Index: /trunk/nbproject/build-impl.xml
===================================================================
--- /trunk/nbproject/build-impl.xml	(revision 4)
+++ /trunk/nbproject/build-impl.xml	(revision 4)
@@ -0,0 +1,1420 @@
+<?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.6"/>
+        <property name="default.javac.target" value="1.6"/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user" name="-init-project">
+        <property file="nbproject/configs/${config}.properties"/>
+        <property file="nbproject/project.properties"/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">
+        <property name="platform.java" value="${java.home}/bin/java"/>
+        <available file="${manifest.file}" property="manifest.available"/>
+        <condition property="splashscreen.available">
+            <and>
+                <not>
+                    <equals arg1="${application.splash}" arg2="" trim="true"/>
+                </not>
+                <available file="${application.splash}"/>
+            </and>
+        </condition>
+        <condition property="main.class.available">
+            <and>
+                <isset property="main.class"/>
+                <not>
+                    <equals arg1="${main.class}" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="profile.available">
+            <and>
+                <isset property="javac.profile"/>
+                <length length="0" string="${javac.profile}" when="greater"/>
+                <matches pattern="((1\.[89])|9)(\..*)?" string="${javac.source}"/>
+            </and>
+        </condition>
+        <condition property="do.archive">
+            <or>
+                <not>
+                    <istrue value="${jar.archive.disabled}"/>
+                </not>
+                <istrue value="${not.archive.disabled}"/>
+            </or>
+        </condition>
+        <condition property="do.mkdist">
+            <and>
+                <isset property="do.archive"/>
+                <isset property="libs.CopyLibs.classpath"/>
+                <not>
+                    <istrue value="${mkdist.disabled}"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="do.archive+manifest.available">
+            <and>
+                <isset property="manifest.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+main.class.available">
+            <and>
+                <isset property="main.class.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+splashscreen.available">
+            <and>
+                <isset property="splashscreen.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+profile.available">
+            <and>
+                <isset property="profile.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="have.tests">
+            <or>
+                <available file="${test.src.dir}"/>
+            </or>
+        </condition>
+        <condition property="have.sources">
+            <or>
+                <available file="${src.dir}"/>
+            </or>
+        </condition>
+        <condition property="netbeans.home+have.tests">
+            <and>
+                <isset property="netbeans.home"/>
+                <isset property="have.tests"/>
+            </and>
+        </condition>
+        <condition property="no.javadoc.preview">
+            <and>
+                <isset property="javadoc.preview"/>
+                <isfalse value="${javadoc.preview}"/>
+            </and>
+        </condition>
+        <property name="run.jvmargs" value=""/>
+        <property name="run.jvmargs.ide" value=""/>
+        <property name="javac.compilerargs" value=""/>
+        <property name="work.dir" value="${basedir}"/>
+        <condition property="no.deps">
+            <and>
+                <istrue value="${no.dependencies}"/>
+            </and>
+        </condition>
+        <property name="javac.debug" value="true"/>
+        <property name="javadoc.preview" value="true"/>
+        <property name="application.args" value=""/>
+        <property name="source.encoding" value="${file.encoding}"/>
+        <property name="runtime.encoding" value="${source.encoding}"/>
+        <property name="manifest.encoding" value="${source.encoding}"/>
+        <condition property="javadoc.encoding.used" value="${javadoc.encoding}">
+            <and>
+                <isset property="javadoc.encoding"/>
+                <not>
+                    <equals arg1="${javadoc.encoding}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <property name="javadoc.encoding.used" value="${source.encoding}"/>
+        <property name="includes" value="**"/>
+        <property name="excludes" value=""/>
+        <property name="do.depend" value="false"/>
+        <condition property="do.depend.true">
+            <istrue value="${do.depend}"/>
+        </condition>
+        <path id="endorsed.classpath.path" path="${endorsed.classpath}"/>
+        <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">
+            <and>
+                <isset property="endorsed.classpath"/>
+                <not>
+                    <equals arg1="${endorsed.classpath}" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+        <condition else="" property="javac.profile.cmd.line.arg" value="-profile ${javac.profile}">
+            <isset property="profile.available"/>
+        </condition>
+        <condition else="false" property="jdkBug6558476">
+            <and>
+                <matches pattern="1\.[56]" string="${java.specification.version}"/>
+                <not>
+                    <os family="unix"/>
+                </not>
+            </and>
+        </condition>
+        <condition else="false" property="javac.fork">
+            <or>
+                <istrue value="${jdkBug6558476}"/>
+                <istrue value="${javac.external.vm}"/>
+            </or>
+        </condition>
+        <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>
+        <property name="java.failonerror" value="true"/>
+    </target>
+    <target name="-post-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">
+        <fail unless="src.dir">Must set src.dir</fail>
+        <fail unless="test.src.dir">Must set test.src.dir</fail>
+        <fail unless="build.dir">Must set build.dir</fail>
+        <fail unless="dist.dir">Must set dist.dir</fail>
+        <fail unless="build.classes.dir">Must set build.classes.dir</fail>
+        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>
+        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>
+        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>
+        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>
+        <fail unless="dist.jar">Must set dist.jar</fail>
+    </target>
+    <target name="-init-macrodef-property">
+        <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <attribute name="name"/>
+            <attribute name="value"/>
+            <sequential>
+                <property name="@{name}" value="${@{value}}"/>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors">
+        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" name="processorpath"/>
+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="sourcepath"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <mkdir dir="@{apgeneratedsrcdir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.profile.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <compilerarg value="-processorpath"/>
+                    <compilerarg path="@{processorpath}:${empty.dir}"/>
+                    <compilerarg line="${ap.processors.internal}"/>
+                    <compilerarg line="${annotation.processing.processor.options}"/>
+                    <compilerarg value="-s"/>
+                    <compilerarg path="@{apgeneratedsrcdir}"/>
+                    <compilerarg line="${ap.proc.none.internal}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
+        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" name="processorpath"/>
+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="sourcepath"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.profile.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">
+        <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <sequential>
+                <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                </depend>
+            </sequential>
+        </macrodef>
+        <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <sequential>
+                <fail unless="javac.includes">Must set javac.includes</fail>
+                <pathconvert pathsep="${line.separator}" property="javac.includes.binary">
+                    <path>
+                        <filelist dir="@{destdir}" files="${javac.includes}"/>
+                    </path>
+                    <globmapper from="*.java" to="*.class"/>
+                </pathconvert>
+                <tempfile deleteonexit="true" property="javac.includesfile.binary"/>
+                <echo file="${javac.includesfile.binary}" message="${javac.includes.binary}"/>
+                <delete>
+                    <files includesfile="${javac.includesfile.binary}"/>
+                </delete>
+                <delete>
+                    <fileset file="${javac.includesfile.binary}"/>
+                </delete>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${junit.available}" name="-init-macrodef-junit-init">
+        <condition else="false" property="nb.junit.batch" value="true">
+            <and>
+                <istrue value="${junit.available}"/>
+                <not>
+                    <isset property="test.method"/>
+                </not>
+            </and>
+        </condition>
+        <condition else="false" property="nb.junit.single" value="true">
+            <and>
+                <istrue value="${junit.available}"/>
+                <isset property="test.method"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-init-test-properties">
+        <property name="test.binaryincludes" value="&lt;nothing&gt;"/>
+        <property name="test.binarytestincludes" value=""/>
+        <property name="test.binaryexcludes" value=""/>
+    </target>
+    <target if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">
+        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">
+        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <batchtest todir="${build.test.results.dir}">
+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
+                            <filename name="${test.binarytestincludes}"/>
+                        </fileset>
+                    </batchtest>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-init,-init-macrodef-junit-single, -init-macrodef-junit-batch" if="${junit.available}" name="-init-macrodef-junit"/>
+    <target if="${testng.available}" name="-init-macrodef-testng">
+        <macrodef name="testng" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <condition else="" property="testng.methods.arg" value="@{testincludes}.@{testmethods}">
+                    <isset property="test.method"/>
+                </condition>
+                <union id="test.set">
+                    <fileset dir="${test.src.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                        <filename name="@{testincludes}"/>
+                    </fileset>
+                </union>
+                <taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>
+                <testng classfilesetref="test.set" failureProperty="tests.failed" listeners="org.testng.reporters.VerboseReporter" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="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}" failonerror="${java.failonerror}" 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}" failonerror="${java.failonerror}" 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}" failonerror="${java.failonerror}" fork="true">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+                    <jvmarg line="${run.jvmargs}"/>
+                    <jvmarg line="${run.jvmargs.ide}"/>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-copylibs">
+        <macrodef name="copylibs" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${manifest.file}" name="manifest"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
+                <pathconvert property="run.classpath.without.build.classes.dir">
+                    <path path="${run.classpath}"/>
+                    <map from="${build.classes.dir.resolved}" to=""/>
+                </pathconvert>
+                <pathconvert pathsep=" " property="jar.classpath">
+                    <path path="${run.classpath.without.build.classes.dir}"/>
+                    <chainedmapper>
+                        <flattenmapper/>
+                        <filtermapper>
+                            <replacestring from=" " to="%20"/>
+                        </filtermapper>
+                        <globmapper from="*" to="lib/*"/>
+                    </chainedmapper>
+                </pathconvert>
+                <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
+                <copylibs compress="${jar.compress}" excludeFromCopy="${copylibs.excludes}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" manifestencoding="UTF-8" rebase="${copylibs.rebase}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
+                    <fileset dir="${build.classes.dir}" excludes="${dist.archive.excludes}"/>
+                    <manifest>
+                        <attribute name="Class-Path" value="${jar.classpath}"/>
+                        <customize/>
+                    </manifest>
+                </copylibs>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-presetdef-jar">
+        <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <jar compress="${jar.compress}" index="${jar.index}" jarfile="${dist.jar}" manifestencoding="UTF-8">
+                <j2seproject1:fileset dir="${build.classes.dir}" excludes="${dist.archive.excludes}"/>
+            </jar>
+        </presetdef>
+    </target>
+    <target name="-init-ap-cmdline-properties">
+        <property name="annotation.processing.enabled" value="true"/>
+        <property name="annotation.processing.processors.list" value=""/>
+        <property name="annotation.processing.processor.options" value=""/>
+        <property name="annotation.processing.run.all.processors" value="true"/>
+        <property name="javac.processorpath" value="${javac.classpath}"/>
+        <property name="javac.test.processorpath" value="${javac.test.classpath}"/>
+        <condition property="ap.supported.internal" value="true">
+            <not>
+                <matches pattern="1\.[0-5](\..*)?" string="${javac.source}"/>
+            </not>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-ap-cmdline-supported">
+        <condition else="" property="ap.processors.internal" value="-processor ${annotation.processing.processors.list}">
+            <isfalse value="${annotation.processing.run.all.processors}"/>
+        </condition>
+        <condition else="" property="ap.proc.none.internal" value="-proc:none">
+            <isfalse value="${annotation.processing.enabled}"/>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" name="-init-ap-cmdline">
+        <property name="ap.cmd.line.internal" value=""/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-test,-init-macrodef-test-debug,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline" name="init"/>
+    <!--
+                ===================
+                COMPILATION SECTION
+                ===================
+            -->
+    <target name="-deps-jar-init" unless="built-jar.properties">
+        <property location="${build.dir}/built-jar.properties" name="built-jar.properties"/>
+        <delete file="${built-jar.properties}" quiet="true"/>
+    </target>
+    <target if="already.built.jar.${basedir}" name="-warn-already-built-jar">
+        <echo level="warn" message="Cycle detected: 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" if="do.archive" name="-do-jar-create-manifest" unless="manifest.available">
+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
+        <touch file="${tmp.manifest.file}" verbose="false"/>
+    </target>
+    <target depends="init" if="do.archive+manifest.available" name="-do-jar-copy-manifest">
+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
+        <copy encoding="${manifest.encoding}" file="${manifest.file}" outputencoding="UTF-8" tofile="${tmp.manifest.file}"/>
+    </target>
+    <target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+main.class.available" name="-do-jar-set-mainclass">
+        <manifest encoding="UTF-8" file="${tmp.manifest.file}" mode="update">
+            <attribute name="Main-Class" value="${main.class}"/>
+        </manifest>
+    </target>
+    <target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+profile.available" name="-do-jar-set-profile">
+        <manifest encoding="UTF-8" file="${tmp.manifest.file}" mode="update">
+            <attribute name="Profile" value="${javac.profile}"/>
+        </manifest>
+    </target>
+    <target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+splashscreen.available" name="-do-jar-set-splashscreen">
+        <basename file="${application.splash}" property="splashscreen.basename"/>
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <copy failonerror="false" file="${application.splash}" todir="${build.classes.dir}/META-INF"/>
+        <manifest encoding="UTF-8" file="${tmp.manifest.file}" mode="update">
+            <attribute name="SplashScreen-Image" value="META-INF/${splashscreen.basename}"/>
+        </manifest>
+    </target>
+    <target depends="init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen" if="do.mkdist" name="-do-jar-copylibs">
+        <j2seproject3:copylibs manifest="${tmp.manifest.file}"/>
+        <echo level="info">To run this application from the command line without Ant, try:</echo>
+        <property location="${dist.jar}" name="dist.jar.resolved"/>
+        <echo level="info">java -jar "${dist.jar.resolved}"</echo>
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen" if="do.archive" name="-do-jar-jar" unless="do.mkdist">
+        <j2seproject1:jar manifest="${tmp.manifest.file}"/>
+        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
+        <property location="${dist.jar}" name="dist.jar.resolved"/>
+        <pathconvert property="run.classpath.with.dist.jar">
+            <path path="${run.classpath}"/>
+            <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>
+        </pathconvert>
+        <condition else="" property="jar.usage.message" value="To run this application from the command line without Ant, try:${line.separator}${platform.java} -cp ${run.classpath.with.dist.jar} ${main.class}">
+            <isset property="main.class.available"/>
+        </condition>
+        <condition else="debug" property="jar.usage.level" value="info">
+            <isset property="main.class.available"/>
+        </condition>
+        <echo level="${jar.usage.level}" message="${jar.usage.message}"/>
+    </target>
+    <target depends="-do-jar-copylibs" if="do.archive" name="-do-jar-delete-manifest">
+        <delete>
+            <fileset file="${tmp.manifest.file}"/>
+        </delete>
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-do-jar-jar,-do-jar-delete-manifest" name="-do-jar-without-libraries"/>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-do-jar-copylibs,-do-jar-delete-manifest" name="-do-jar-with-libraries"/>
+    <target name="-post-jar">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-jar,-do-jar-without-libraries,-do-jar-with-libraries,-post-jar" name="-do-jar"/>
+    <target depends="init,compile,-pre-jar,-do-jar,-post-jar" description="Build JAR." name="jar"/>
+    <!--
+                =================
+                EXECUTION SECTION
+                =================
+            -->
+    <target depends="init,compile" description="Run a main class." name="run">
+        <j2seproject1:java>
+            <customize>
+                <arg line="${application.args}"/>
+            </customize>
+        </j2seproject1:java>
+    </target>
+    <target name="-do-not-recompile">
+        <property name="javac.includes.binary" value=""/>
+    </target>
+    <target depends="init,compile-single" name="run-single">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <j2seproject1:java classname="${run.class}"/>
+    </target>
+    <target depends="init,compile-test-single" name="run-test-with-main">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <j2seproject1:java classname="${run.class}" classpath="${run.test.classpath}"/>
+    </target>
+    <!--
+                =================
+                DEBUGGING SECTION
+                =================
+            -->
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger">
+        <j2seproject1:nbjpdastart name="${debug.class}"/>
+    </target>
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test">
+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/>
+    </target>
+    <target depends="init,compile" name="-debug-start-debuggee">
+        <j2seproject3:debug>
+            <customize>
+                <arg line="${application.args}"/>
+            </customize>
+        </j2seproject3:debug>
+    </target>
+    <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/>
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto">
+        <j2seproject1:nbjpdastart stopclassname="${main.class}"/>
+    </target>
+    <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/>
+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">
+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+        <j2seproject3:debug classname="${debug.class}"/>
+    </target>
+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/>
+    <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test">
+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+        <j2seproject3:debug classname="${debug.class}" classpath="${debug.test.classpath}"/>
+    </target>
+    <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/>
+    <target depends="init" name="-pre-debug-fix">
+        <fail unless="fix.includes">Must set fix.includes</fail>
+        <property name="javac.includes" value="${fix.includes}.java"/>
+    </target>
+    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">
+        <j2seproject1:nbjpdareload/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>
+    <!--
+                =================
+                PROFILING SECTION
+                =================
+            -->
+    <!--
+                pre NB7.2 profiler integration
+            -->
+    <target depends="profile-init,compile" description="Profile a project in the IDE." if="profiler.info.jvmargs.agent" name="-profile-pre72">
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile/>
+    </target>
+    <target depends="profile-init,compile-single" description="Profile a selected class in the IDE." if="profiler.info.jvmargs.agent" name="-profile-single-pre72">
+        <fail unless="profile.class">Must select one file in the IDE or set profile.class</fail>
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile classname="${profile.class}"/>
+    </target>
+    <target depends="profile-init,compile-single" if="profiler.info.jvmargs.agent" name="-profile-applet-pre72">
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </profile>
+    </target>
+    <target depends="profile-init,compile-test-single" if="profiler.info.jvmargs.agent" name="-profile-test-single-pre72">
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <junit dir="${profiler.info.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" jvm="${profiler.info.jvm}" showoutput="true">
+            <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
+            <jvmarg value="${profiler.info.jvmargs.agent}"/>
+            <jvmarg line="${profiler.info.jvmargs}"/>
+            <test name="${profile.class}"/>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+            </classpath>
+            <syspropertyset>
+                <propertyref prefix="test-sys-prop."/>
+                <mapper from="test-sys-prop.*" to="*" type="glob"/>
+            </syspropertyset>
+            <formatter type="brief" usefile="false"/>
+            <formatter type="xml"/>
+        </junit>
+    </target>
+    <!--
+                end of pre NB72 profiling section
+            -->
+    <target if="netbeans.home" name="-profile-check">
+        <condition property="profiler.configured">
+            <or>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-javaagent:"/>
+            </or>
+        </condition>
+    </target>
+    <target depends="-profile-check,-profile-pre72" description="Profile a project in the IDE." if="profiler.configured" name="profile" unless="profiler.info.jvmargs.agent">
+        <startprofiler/>
+        <antcall target="run"/>
+    </target>
+    <target depends="-profile-check,-profile-single-pre72" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-single" unless="profiler.info.jvmargs.agent">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <startprofiler/>
+        <antcall target="run-single"/>
+    </target>
+    <target depends="-profile-test-single-pre72" description="Profile a selected test in the IDE." name="profile-test-single"/>
+    <target depends="-profile-check" description="Profile a selected test in the IDE." if="profiler.configured" name="profile-test" unless="profiler.info.jvmargs">
+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
+        <startprofiler/>
+        <antcall target="test-single"/>
+    </target>
+    <target depends="-profile-check" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-test-with-main">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <startprofiler/>
+        <antcall target="run-test-with-main"/>
+    </target>
+    <target depends="-profile-check,-profile-applet-pre72" if="profiler.configured" name="profile-applet" unless="profiler.info.jvmargs.agent">
+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+        <startprofiler/>
+        <antcall target="run-applet"/>
+    </target>
+    <!--
+                ===============
+                JAVADOC SECTION
+                ===============
+            -->
+    <target depends="init" if="have.sources" name="-javadoc-build">
+        <mkdir dir="${dist.javadoc.dir}"/>
+        <condition else="" property="javadoc.endorsed.classpath.cmd.line.arg" value="-J${endorsed.classpath.cmd.line.arg}">
+            <and>
+                <isset property="endorsed.classpath.cmd.line.arg"/>
+                <not>
+                    <equals arg1="${endorsed.classpath.cmd.line.arg}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <condition else="" property="bug5101868workaround" value="*.java">
+            <matches pattern="1\.[56](\..*)?" string="${java.version}"/>
+        </condition>
+        <javadoc additionalparam="-J-Dfile.encoding=${file.encoding} ${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
+            <classpath>
+                <path path="${javac.classpath}"/>
+            </classpath>
+            <fileset dir="${src.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                <filename name="**/*.java"/>
+            </fileset>
+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="**/*.java"/>
+                <exclude name="*.java"/>
+            </fileset>
+            <arg line="${javadoc.endorsed.classpath.cmd.line.arg}"/>
+        </javadoc>
+        <copy todir="${dist.javadoc.dir}">
+            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
+                <filename name="**/doc-files/**"/>
+            </fileset>
+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="**/doc-files/**"/>
+            </fileset>
+        </copy>
+    </target>
+    <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview">
+        <nbbrowse file="${dist.javadoc.dir}/index.html"/>
+    </target>
+    <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/>
+    <!--
+                =========================
+                TEST COMPILATION SECTION
+                =========================
+            -->
+    <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">
+        <mkdir dir="${build.test.classes.dir}"/>
+    </target>
+    <target name="-pre-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="do.depend.true" name="-compile-test-depend">
+        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
+    </target>
+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" processorpath="${javac.test.processorpath}" srcdir="${test.src.dir}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>
+    <target name="-pre-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+        <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" processorpath="${javac.test.processorpath}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>
+    <!--
+                =======================
+                TEST EXECUTION SECTION
+                =======================
+            -->
+    <target depends="init" if="have.tests" name="-pre-test-run">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">
+        <j2seproject3:test includes="${includes}" testincludes="**/*Test.java"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init" if="have.tests" name="test-report"/>
+    <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>
+    <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>
+    <target depends="init" if="have.tests" name="-pre-test-run-single">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
+        <j2seproject3:test excludes="" includes="${test.includes}" testincludes="${test.includes}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single-method">
+        <fail unless="test.class">Must select some files in the IDE or set test.class</fail>
+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
+        <j2seproject3:test excludes="" includes="${javac.includes}" testincludes="${test.class}" testmethods="${test.method}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method" if="have.tests" name="-post-test-run-single-method">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method" description="Run single unit test." name="test-single-method"/>
+    <!--
+                =======================
+                TEST DEBUGGING SECTION
+                =======================
+            -->
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test">
+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testincludes="${javac.includes}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test-method">
+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
+        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testMethod="${test.method}" testincludes="${test.class}" testmethods="${test.method}"/>
+    </target>
+    <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">
+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>
+    </target>
+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>
+    <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
+        <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>
+    <!--
+                =========================
+                APPLET EXECUTION SECTION
+                =========================
+            -->
+    <target depends="init,compile-single" name="run-applet">
+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+        <j2seproject1:java classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </j2seproject1:java>
+    </target>
+    <!--
+                =========================
+                APPLET DEBUGGING  SECTION
+                =========================
+            -->
+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet">
+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+        <j2seproject3:debug classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </j2seproject3:debug>
+    </target>
+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/>
+    <!--
+                ===============
+                CLEANUP SECTION
+                ===============
+            -->
+    <target name="-deps-clean-init" unless="built-clean.properties">
+        <property location="${build.dir}/built-clean.properties" name="built-clean.properties"/>
+        <delete file="${built-clean.properties}" quiet="true"/>
+    </target>
+    <target if="already.built.clean.${basedir}" name="-warn-already-built-clean">
+        <echo level="warn" message="Cycle detected: 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: /trunk/nbproject/project.properties
===================================================================
--- /trunk/nbproject/project.properties	(revision 3)
+++ /trunk/nbproject/project.properties	(revision 3)
@@ -0,0 +1,74 @@
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=false
+annotation.processing.processor.options=
+annotation.processing.processors.list=
+annotation.processing.run.all.processors=true
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+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}
+# Files in build.classes.dir which should be excluded from distribution jar
+dist.archive.excludes=
+# This directory is removed when the project is cleaned:
+dist.dir=dist
+dist.jar=${dist.dir}/ScriptBuilder.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+excludes=
+includes=**
+jar.compress=false
+javac.classpath=\
+    ${libs.swing-layout.classpath}
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.deprecation=false
+javac.processorpath=\
+    ${javac.classpath}
+javac.source=1.7
+javac.target=1.7
+javac.test.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+javac.test.processorpath=\
+    ${javac.test.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=
+main.class=scriptbuilder.gui.ScriptBuilderFrame
+manifest.file=manifest.mf
+meta.inf.dir=${src.dir}/META-INF
+mkdist.disabled=false
+platform.active=default_platform
+run.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+# Space-separated list of JVM arguments used when running the project.
+# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
+# To set system properties for unit tests define test-sys-prop.name=value:
+run.jvmargs=
+run.test.classpath=\
+    ${javac.test.classpath}:\
+    ${build.test.classes.dir}
+source.encoding=UTF-8
+src.dir=src
+test.src.dir=test
Index: /trunk/nbproject/project.xml
===================================================================
--- /trunk/nbproject/project.xml	(revision 2)
+++ /trunk/nbproject/project.xml	(revision 2)
@@ -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: /trunk/nbproject/genfiles.properties
===================================================================
--- /trunk/nbproject/genfiles.properties	(revision 4)
+++ /trunk/nbproject/genfiles.properties	(revision 4)
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=c690a94a
+build.xml.script.CRC32=5682d7f4
+build.xml.stylesheet.CRC32=8064a381@1.68.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=1357f838
+nbproject/build-impl.xml.stylesheet.CRC32=830a3534@1.80.1.48
Index: /trunk/manifest.mf
===================================================================
--- /trunk/manifest.mf	(revision 5)
+++ /trunk/manifest.mf	(revision 5)
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+X-COMMENT: Main-Class will be added automatically by build
+
Index: /trunk/src/scriptbuilder/structures/events/ScriptEventInterface.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/ScriptEventInterface.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/ScriptEventInterface.java	(revision 1)
@@ -0,0 +1,28 @@
+package scriptbuilder.structures.events;
+
+import scriptbuilder.structures.ScriptEvent;
+import scriptbuilder.structures.ScriptEvent.ScriptEventType;
+
+/**
+ * Generic interface for ScriptEvent objects. Script Events have an event type,
+ * a length, and several data values unique to the event.
+ *
+ * @author Bryan McGuffin
+ */
+public interface ScriptEventInterface extends Comparable
+{
+
+    /**
+     * Get the time length of this event.
+     *
+     * @return number of seconds the event takes place; default is 1
+     */
+    int getLength();
+
+    /**
+     * Get the event type.
+     *
+     * @return the enum script event type of this event
+     */
+    ScriptEventType getScriptEventType();
+}
Index: /trunk/src/scriptbuilder/structures/events/ActivityLogEvaluationEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/ActivityLogEvaluationEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/ActivityLogEvaluationEvent.java	(revision 1)
@@ -0,0 +1,49 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.events;
+
+import java.util.ArrayList;
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ * Data model for an activity log evaluation event. This is an evaluation event.
+ *
+ * @author Bryan McGuffin
+ */
+public class ActivityLogEvaluationEvent extends ScriptEvent implements EvaluationEventInterface
+{
+
+    public ActivityLogEvaluationEvent()
+    {
+        super(ScriptEventType.ACTIVITY_LOG_EVAL_EVENT);
+    }
+
+    public ArrayList<String> expectedAction = new ArrayList<String>();
+
+    @Override
+    public ArrayList<String> getExpectedActions()
+    {
+        return expectedAction;
+    }
+
+    @Override
+    public void addAction(String act)
+    {
+        expectedAction.add(act);
+    }
+
+    @Override
+    public void updateAction(int index, String act)
+    {
+        expectedAction.set(index, act);
+    }
+
+    @Override
+    public void removeAction(int index)
+    {
+        expectedAction.remove(index);
+    }
+}
Index: /trunk/src/scriptbuilder/structures/events/RadioEvaluationEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/RadioEvaluationEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/RadioEvaluationEvent.java	(revision 1)
@@ -0,0 +1,50 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package scriptbuilder.structures.events;
+
+import java.util.ArrayList;
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ * Data model for a radio evaluation event. This is an evaluation event.
+ *
+ * @author Bryan McGuffin
+ */
+public class RadioEvaluationEvent extends ScriptEvent implements EvaluationEventInterface
+{
+
+    public RadioEvaluationEvent()
+    {
+        super(ScriptEventType.RADIO_EVAL_EVENT);
+    }
+    
+    public ArrayList<String> expectedAction = new ArrayList<String>();
+    
+    @Override
+    public ArrayList<String> getExpectedActions()
+    {
+        return expectedAction;
+    }
+    
+    @Override
+    public void addAction(String act)
+    {
+        expectedAction.add(act);
+    }
+
+    @Override
+    public void updateAction(int index, String act)
+    {
+        expectedAction.set(index, act);
+    }
+    
+    @Override
+    public void removeAction(int index)
+    {
+        expectedAction.remove(index);
+    }
+}
Index: /trunk/src/scriptbuilder/structures/events/CADEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/CADEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/CADEvent.java	(revision 1)
@@ -0,0 +1,28 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.events;
+
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ * Data model for a CAD incident event. CAD events have a string description of
+ * what is occurring at that time, and may or may not have sub-events.
+ *
+ * @author Bryan McGuffin
+ */
+public class CADEvent extends ScriptEvent
+{
+
+    public CADEvent()
+    {
+        super(ScriptEventType.CAD_EVENT);
+    }
+
+    public boolean hasSubEvents = false;
+
+    public String detail = "";
+
+}
Index: /trunk/src/scriptbuilder/structures/events/EvaluationEventInterface.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/EvaluationEventInterface.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/EvaluationEventInterface.java	(revision 1)
@@ -0,0 +1,47 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.events;
+
+import java.util.ArrayList;
+
+/**
+ * Generic interface for an evaluation event. An evaluation event has some set
+ * of expected actions.
+ *
+ * @author Bryan McGuffin
+ */
+public interface EvaluationEventInterface
+{
+
+    /**
+     * Get all the expected actions stored in this event.
+     * 
+     * @return a list of expected actions
+     */
+    ArrayList<String> getExpectedActions();
+
+    /**
+     * Add a new action to the list of expected actions.
+     * 
+     * @param act the new expected action
+     */
+    void addAction(String act);
+
+    /**
+     * Update the description of an existing expected action.
+     * 
+     * @param index The zero-based index of the action to update.
+     * @param act the new description of that action
+     */
+    void updateAction(int index, String act);
+
+    /**
+     * Remove an action from the list.
+     * 
+     * @param index the zero-based index of the action to remove
+     */
+    void removeAction(int index);
+}
Index: /trunk/src/scriptbuilder/structures/events/FacilitatorEvaluationEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/FacilitatorEvaluationEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/FacilitatorEvaluationEvent.java	(revision 1)
@@ -0,0 +1,49 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.events;
+
+import java.util.ArrayList;
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ * Data model for a facilitator evaluation event. This is an evaluation event.
+ *
+ * @author Bryan McGuffin
+ */
+public class FacilitatorEvaluationEvent extends ScriptEvent implements EvaluationEventInterface
+{
+
+    public FacilitatorEvaluationEvent()
+    {
+        super(ScriptEventType.FACILITATOR_EVAL_EVENT);
+    }
+
+    public ArrayList<String> expectedAction = new ArrayList<String>();
+
+    @Override
+    public ArrayList<String> getExpectedActions()
+    {
+        return expectedAction;
+    }
+
+    @Override
+    public void addAction(String act)
+    {
+        expectedAction.add(act);
+    }
+
+    @Override
+    public void updateAction(int index, String act)
+    {
+        expectedAction.set(index, act);
+    }
+
+    @Override
+    public void removeAction(int index)
+    {
+        expectedAction.remove(index);
+    }
+}
Index: /trunk/src/scriptbuilder/structures/events/CHPRadioEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/CHPRadioEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/CHPRadioEvent.java	(revision 1)
@@ -0,0 +1,32 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.events;
+
+import java.util.ArrayList;
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ * Data model for a CHP radio event. A CHP radio transmission has a
+ * conversation, with dialog between a field unit and a dispatch center. It also
+ * has an audio file which has that conversation acted out.
+ *
+ * @author Bryan McGuffin
+ */
+public class CHPRadioEvent extends ScriptEvent
+{
+
+    public CHPRadioEvent()
+    {
+        super(ScriptEventType.CHP_RADIO_EVENT);
+    }
+
+    public ArrayList<String> lines = new ArrayList<String>();
+
+    public ArrayList<String> roles = new ArrayList<String>();
+
+    public String radioFile = "";
+
+}
Index: /trunk/src/scriptbuilder/structures/events/WitnessEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/WitnessEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/WitnessEvent.java	(revision 1)
@@ -0,0 +1,33 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.events;
+
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ * Data model for a witness event. A witness has a name, a phone number, and a
+ * street address.
+ *
+ * @author Bryan McGuffin
+ */
+public class WitnessEvent extends ScriptEvent
+{
+
+    /**
+     * Constructor. Generate a new script event that has a witness event icon.
+     */
+    public WitnessEvent()
+    {
+        super(ScriptEventType.WITNESS_EVENT);
+    }
+
+    public String witnessAddress = "";
+
+    public String witnessName = "";
+
+    public String witnessNum = "";
+
+}
Index: /trunk/src/scriptbuilder/structures/events/ATMSEvaluationEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/ATMSEvaluationEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/ATMSEvaluationEvent.java	(revision 1)
@@ -0,0 +1,49 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.events;
+
+import java.util.ArrayList;
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ * Data model for an ATMS evaluation event. This is an evaluation event.
+ *
+ * @author Bryan McGuffin
+ */
+public class ATMSEvaluationEvent extends ScriptEvent implements EvaluationEventInterface
+{
+
+    public ATMSEvaluationEvent()
+    {
+        super(ScriptEventType.ATMS_EVAL_EVENT);
+    }
+
+    public ArrayList<String> expectedAction = new ArrayList<String>();
+
+    @Override
+    public ArrayList<String> getExpectedActions()
+    {
+        return expectedAction;
+    }
+
+    @Override
+    public void addAction(String act)
+    {
+        expectedAction.add(act);
+    }
+
+    @Override
+    public void updateAction(int index, String act)
+    {
+        expectedAction.set(index, act);
+    }
+
+    @Override
+    public void removeAction(int index)
+    {
+        expectedAction.remove(index);
+    }
+}
Index: /trunk/src/scriptbuilder/structures/events/CCTVEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/CCTVEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/CCTVEvent.java	(revision 1)
@@ -0,0 +1,25 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.events;
+
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ * Data model for a CCTV event. (Just a stub; CCTV events aren't currently
+ * used.) A CCTV event has, for now, a string message.
+ *
+ * @author Bryan McGuffin
+ */
+public class CCTVEvent extends ScriptEvent
+{
+
+    public CCTVEvent()
+    {
+        super(ScriptEventType.CCTV_EVENT);
+    }
+
+    public String message = "";
+}
Index: /trunk/src/scriptbuilder/structures/events/ParamicsEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/ParamicsEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/ParamicsEvent.java	(revision 1)
@@ -0,0 +1,33 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.events;
+
+import java.util.ArrayList;
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ * Data model for a Paramics event. Paramics data has a status, an event type, a
+ * location ID, and some number of affected lanes.
+ *
+ * @author Bryan McGuffin
+ */
+public class ParamicsEvent extends ScriptEvent
+{
+
+    public ParamicsEvent()
+    {
+        super(ScriptEventType.PARAMICS_EVENT);
+    }
+
+    public String status = "";
+
+    public String type = "";
+
+    public ArrayList<Integer> laneNums = new ArrayList<Integer>();
+
+    public String locationID = "";
+
+}
Index: /trunk/src/scriptbuilder/structures/events/AudioEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/AudioEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/AudioEvent.java	(revision 1)
@@ -0,0 +1,27 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.events;
+
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ * Data model for an audio event. Audio events have a filepath leading to an
+ * audio file to be played, and a length in seconds of that file.
+ *
+ * @author Bryan McGuffin
+ */
+public class AudioEvent extends ScriptEvent
+{
+
+    public AudioEvent()
+    {
+        super(ScriptEventType.AUDIO_EVENT);
+    }
+
+    public Integer audioLength = 0;
+
+    public String audioPath = "";
+}
Index: /trunk/src/scriptbuilder/structures/events/MaintenanceRadioEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/MaintenanceRadioEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/MaintenanceRadioEvent.java	(revision 1)
@@ -0,0 +1,26 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.events;
+
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ * Data model for a maintenance radio event. A maintenance radio transmission
+ * has a string message.
+ *
+ * @author Bryan McGuffin
+ */
+public class MaintenanceRadioEvent extends ScriptEvent
+{
+
+    public MaintenanceRadioEvent()
+    {
+        super(ScriptEventType.MAINTENANCE_RADIO_EVENT);
+    }
+
+    public String message = "";
+
+}
Index: /trunk/src/scriptbuilder/structures/events/TowEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/TowEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/TowEvent.java	(revision 1)
@@ -0,0 +1,32 @@
+    /*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.events;
+
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ * Data model for a Tow event. A tow truck has a beat and a company, and two
+ * phone numbers: one public, and one for confirmation.
+ *
+ * @author Bryan McGuffin
+ */
+public class TowEvent extends ScriptEvent
+{
+
+    public TowEvent()
+    {
+        super(ScriptEventType.TOW_EVENT);
+    }
+
+    public String towBeat = "";
+
+    public String towCompany = "";
+
+    public String towConfNum = "";
+
+    public String towPubNum = "";
+
+}
Index: /trunk/src/scriptbuilder/structures/events/CMSEvaluationEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/CMSEvaluationEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/CMSEvaluationEvent.java	(revision 1)
@@ -0,0 +1,58 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.events;
+
+import java.util.ArrayList;
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ * Data model for a CMS evaluatiion event. A CMS event has a location, a set of
+ * messages, an ID, and a type. It also is an evaluation event.
+ *
+ * @author Bryan McGuffin
+ */
+public class CMSEvaluationEvent extends ScriptEvent implements EvaluationEventInterface
+{
+
+    public CMSEvaluationEvent()
+    {
+        super(ScriptEventType.CMS_EVAL_EVENT);
+    }
+
+    public String location = "";
+
+    public ArrayList<String> message = new ArrayList<String>();
+
+    public String cmsID = "";
+
+    public String cmsType = "";
+
+    public ArrayList<String> expectedAction = new ArrayList<String>();
+
+    @Override
+    public ArrayList<String> getExpectedActions()
+    {
+        return expectedAction;
+    }
+
+    @Override
+    public void addAction(String act)
+    {
+        expectedAction.add(act);
+    }
+
+    @Override
+    public void updateAction(int index, String act)
+    {
+        expectedAction.set(index, act);
+    }
+
+    @Override
+    public void removeAction(int index)
+    {
+        expectedAction.remove(index);
+    }
+}
Index: /trunk/src/scriptbuilder/structures/events/UnitEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/UnitEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/UnitEvent.java	(revision 1)
@@ -0,0 +1,31 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.events;
+
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ * Data model for a Unit event. A unit has a status and an ID number, can be
+ * active, and can be the primary response unit.
+ *
+ * @author Bryan McGuffin
+ */
+public class UnitEvent extends ScriptEvent
+{
+
+    public UnitEvent()
+    {
+        super(ScriptEventType.UNIT_EVENT);
+    }
+
+    public String unitActive = "";
+
+    public String unitPrimary = "";
+
+    public String unitStatus = "";
+
+    public String unitNum = "";
+}
Index: /trunk/src/scriptbuilder/structures/events/CADEvaluationEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/CADEvaluationEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/CADEvaluationEvent.java	(revision 1)
@@ -0,0 +1,49 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.events;
+
+import java.util.ArrayList;
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ * Data model for a CAD evaluation event. This is an evaluation event.
+ *
+ * @author Bryan McGuffin
+ */
+public class CADEvaluationEvent extends ScriptEvent implements EvaluationEventInterface
+{
+
+    public CADEvaluationEvent()
+    {
+        super(ScriptEventType.CAD_EVAL_EVENT);
+    }
+
+    public ArrayList<String> expectedAction = new ArrayList<String>();
+
+    @Override
+    public ArrayList<String> getExpectedActions()
+    {
+        return expectedAction;
+    }
+
+    @Override
+    public void addAction(String act)
+    {
+        expectedAction.add(act);
+    }
+
+    @Override
+    public void updateAction(int index, String act)
+    {
+        expectedAction.set(index, act);
+    }
+
+    @Override
+    public void removeAction(int index)
+    {
+        expectedAction.remove(index);
+    }
+}
Index: /trunk/src/scriptbuilder/structures/events/TMTRadioEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/TMTRadioEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/TMTRadioEvent.java	(revision 1)
@@ -0,0 +1,25 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.events;
+
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ * Data model for a TMT Radio event. A TMT radio transmission has a string
+ * message.
+ *
+ * @author Bryan McGuffin
+ */
+public class TMTRadioEvent extends ScriptEvent
+{
+
+    public TMTRadioEvent()
+    {
+        super(ScriptEventType.TMT_RADIO_EVENT);
+    }
+
+    public String message = "";
+}
Index: /trunk/src/scriptbuilder/structures/events/TelephoneEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/events/TelephoneEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/events/TelephoneEvent.java	(revision 1)
@@ -0,0 +1,30 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.events;
+
+import java.util.ArrayList;
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ * Data model for a telephone conversation. A conversation is made up of lines
+ * of dialog; each line of dialog in the conversation has some text to be
+ * spoken, and a role for the speaker.
+ *
+ * @author Bryan McGuffin
+ */
+public class TelephoneEvent extends ScriptEvent
+{
+
+    public TelephoneEvent()
+    {
+        super(ScriptEventType.TELEPHONE_EVENT);
+    }
+
+    public ArrayList<String> lines = new ArrayList<String>();
+
+    public ArrayList<String> roles = new ArrayList<String>();
+
+}
Index: /trunk/src/scriptbuilder/structures/ScriptEvent.java
===================================================================
--- /trunk/src/scriptbuilder/structures/ScriptEvent.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/ScriptEvent.java	(revision 1)
@@ -0,0 +1,173 @@
+package scriptbuilder.structures;
+
+import java.util.Observable;
+import scriptbuilder.structures.events.*;
+
+/**
+ * A single script event. It has an event type, and a duration (in seconds) of
+ * at least 1. It is comparable based on event type.
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ * @author Bryan McGuffin
+ * @version 2017/06/30
+ */
+public abstract class ScriptEvent extends Observable implements ScriptEventInterface
+{
+
+    /**
+     * Compare the Script Events based on their type enum.
+     *
+     * @param o the other script event to be compared
+     * @return -1, 0, or 1 depending on if this event's type comes before,
+     * simultaneously, or after the other event's type in the enum list
+     */
+    @Override
+    public int compareTo(Object a)
+    {
+        ScriptEvent o = (ScriptEvent) a;
+        return this.type.compareTo(o.type);
+    }
+    
+    @Override
+    public int getLength()
+    {
+        return length;
+    }
+
+    /**
+     * The different possible event types, ordered by event domain and then
+     * alphabetically. The string parameter of each type is the name of a .png
+     * image which will be used as an icon to represent that event 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");
+
+        /**
+         * The file name of a PNG image to be used as the icon for this event
+         * type.
+         */
+        public String IMAGE_NAME;
+
+        private ScriptEventType(String image)
+        {
+            this.IMAGE_NAME = image;
+        }
+    }
+
+    /**
+     * The Event type, from the enum of ScriptEventType.
+     */
+    private ScriptEventType type;
+
+    /**
+     * Number of seconds this event lasts
+     */
+    public int length;
+
+    /**
+     * Constructor with type and length parameters.
+     *
+     * @param type The type of event.
+     * @param l the duration of the event in seconds.
+     */
+    public ScriptEvent(ScriptEventType type, int l)
+    {
+        this.type = type;
+        this.length = l;
+    }
+
+    /**
+     * Constructor with no length parameter. Event length will default to 1
+     * second.
+     *
+     * @param type The type of event.
+     */
+    public ScriptEvent(ScriptEventType type)
+    {
+        this.type = type;
+        this.length = 1;
+    }
+
+    /**
+     * Get the event type of this ScriptEvent.
+     *
+     * @return The enum type of the event
+     */
+    public ScriptEventType getScriptEventType()
+    {
+        return type;
+    }
+
+    /**
+     * Get the string representation of this event. This string will be used in
+     * the tooltip text when the user hover the mouse over this event.
+     *
+     * @return A string containing this event's type, and a STUB where its
+     * description will go later.
+     */
+    @Override
+    public String toString()
+    {
+        return this.type.toString() + " - [Event Description]";
+    }
+    
+    public static ScriptEventInterface factoryByType(ScriptEventType t)
+    {
+        switch(t)
+        {
+            case AUDIO_EVENT:
+                return new AudioEvent();
+            case CAD_EVENT:
+                return new CADEvent();
+            case CCTV_EVENT:
+                return new CCTVEvent();
+            case CHP_RADIO_EVENT:
+                return new CHPRadioEvent();
+            case PARAMICS_EVENT:
+                return new ParamicsEvent();
+            case TOW_EVENT:
+                return new TowEvent();
+            case UNIT_EVENT:
+                return new UnitEvent();
+            case WITNESS_EVENT:
+                return new WitnessEvent();
+            case MAINTENANCE_RADIO_EVENT:
+                return new MaintenanceRadioEvent();
+            case TMT_RADIO_EVENT:
+                return new TMTRadioEvent();
+            case TELEPHONE_EVENT:
+                return new TelephoneEvent();
+            case ATMS_EVAL_EVENT:
+                return new ATMSEvaluationEvent();
+            case ACTIVITY_LOG_EVAL_EVENT:
+                return new ActivityLogEvaluationEvent();
+            case CAD_EVAL_EVENT:
+                return new CADEvaluationEvent();
+            case CMS_EVAL_EVENT:
+                return new CMSEvaluationEvent();
+            case FACILITATOR_EVAL_EVENT:
+                return new FacilitatorEvaluationEvent();
+            case RADIO_EVAL_EVENT:
+                return new RadioEvaluationEvent();
+            default:
+                return new TelephoneEvent();
+        }            
+    }
+}
Index: /trunk/src/scriptbuilder/structures/MyScriptHandler.java
===================================================================
--- /trunk/src/scriptbuilder/structures/MyScriptHandler.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/MyScriptHandler.java	(revision 1)
@@ -0,0 +1,1093 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures;
+
+import java.util.Random;
+import java.util.Stack;
+import java.util.TreeMap;
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+import scriptbuilder.structures.events.*;
+import scriptbuilder.structures.units.Unit;
+
+/**
+ * Script Handler class for the ScriptBuilder. Adapted from the TMCSim script
+ * handler written by Matthew Cechini.
+ *
+ * @author Bryan McGuffin
+ * @version 2017/07/03
+ */
+public class MyScriptHandler extends DefaultHandler
+{
+
+    /**
+     * Error Logger.
+     */
+    private Logger myScriptLogger = Logger.getLogger("scriptbuilder.structures");
+
+    /**
+     * The script which XML entities will be entered into.
+     */
+    private SimulationScript script;
+
+    /**
+     * Enumeration of every element which appears in the DTD as of 2017/07/01.
+     * They are in alphabetical order and broken up into 3 major sections.
+     */
+    private static enum ELEMENT
+    {
+
+        //These elements are the ones that have sub-elements in the DTD.
+        //They may or may not have character data attached.
+        TMC_SCRIPT,
+        ACTIVITY_LOG_EVALUATION,//EVENT
+        ADDITIONAL_INFO,
+        ATMS_EVALUATION,//EVENT
+        CAD_DATA,
+        CAD_EVALUATION,//EVENT
+        CAD_INCIDENT_EVENT,//EVENT
+        CARDFILE,
+        CHP_RADIO,//EVENT
+        CMS_EVALUATION,//EVENT
+        DIALOG,
+        FACILITATOR_EVALUATION,//EVENT
+        GENERAL,
+        GENERAL_INFO,
+        HEADER_INFO,
+        LOCATION,
+        LOCATION_INFO,
+        NEW_UNIT,
+        PARAMICS,//EVENT
+        RADIO_EVALUATION,
+        SAMPLE_MESSAGE,
+        SCRIPT_DATA,
+        SCRIPT_EVENT,
+        TELEPHONE,//EVENT
+        //These elements have no sub-elements, but all have character data.
+        ADDRESS,
+        AGY,
+        ALIAS,
+        AREA,
+        BADGE_NUM,
+        BEAT,
+        Beat,
+        CCTV_INFO,
+        CITY,
+        CMS_LINE,
+        COMMENT,
+        CURR_LOC,
+        DESTINATION,
+        DETAIL,
+        Direction,
+        EMS,
+        EXPECTED_ACTION,
+        FAX,
+        FIRE,
+        FullLoc,
+        ID,
+        INCIDENT,
+        Incident_type,
+        INSTRUCTOR,
+        Lane_number,
+        LAW,
+        LINE,
+        LOC,
+        Location_type,
+        MASTER_INC_NUM,
+        MAINTENANCE_RADIO,//EVENT
+        MISC_INFO,
+        NAME,
+        OFFICE,
+        OFFICER,
+        OOS,
+        P,
+        PHONE,
+        Postmile,
+        PRIMARY,
+        Route,
+        SERVICE,
+        STACK,
+        STATE,
+        STATUS,
+        Status,
+        STUDENT,
+        TEXT,
+        TIMER,
+        TIME_INDEX,
+        TITLE,
+        TMT_RADIO,//EVENT
+        TruncLoc,
+        TYPE,
+        Type,
+        TYPE_CODE,
+        UNIT_STATUS,
+        ZIP,
+        //These elements have no sub-elements or character data.
+        //They do have attributes.
+        AUDIO,//EVENT
+        TOW,//EVENT
+        UNIT,//EVENT
+        WITNESS;//EVENT
+
+        public String tag;
+
+        private ELEMENT()
+        {
+            this.tag = this.name();
+        }
+
+        /**
+         * Look up an element by its name.
+         *
+         * @param name the name of the element
+         * @return the element which has that name as its nametag, or null if
+         * none does
+         */
+        public static ELEMENT byName(String name)
+        {
+            for (ELEMENT e : ELEMENT.values())
+            {
+                if (e.tag.equals(name))
+                {
+                    return e;
+                }
+            }
+            return null;
+        }
+    }
+
+    /**
+     * Map containing all parsed values. Keys = XML Element. Values = parsed
+     * character data from XML file.
+     */
+    private TreeMap<ELEMENT, String> pcData;
+
+    /**
+     * Current element that we're in.
+     */
+    private ELEMENT currentElement;
+
+    /**
+     * Ordering of elements that we're within.
+     */
+    private Stack<ELEMENT> docPosition;
+
+    /**
+     * Map containing all parsed Incidents. Keys = Incident Log Number. Values =
+     * Incident object.
+     */
+    private TreeMap<Integer, ScriptIncident> incidentMap;
+
+    /**
+     * Map containing all Units. Keys = Unit number. Values = Unit object.
+     */
+    private TreeMap<String, Unit> unitMap;
+
+    /**
+     * Map containing all parsed script events. Keys = XML file level. Values =
+     * Event object.
+     */
+    private TreeMap<ELEMENT, ScriptEventInterface> eventMap;
+
+    /**
+     * Buffer used to hold parsed tag content.
+     */
+    private StringBuffer parsedValue = new StringBuffer();
+
+    /**
+     * *************************************************
+     * ~~~~~~~~Element attribute data.~~~~~~~~
+     * **************************************************
+     */
+    /**
+     * Log number for the current ScriptEvent being parsed.
+     */
+    private Integer incidentLogNumber = 0;
+
+    /**
+     * File path for the current audio file.
+     */
+    private String audioPath = "";
+
+    /**
+     * Length in seconds of the current audio file.
+     */
+    private Integer audioLength = 0;
+
+    /**
+     * Category name for the current cardfile.
+     */
+    private String cardfileCategory = "";
+
+    /**
+     * File path for the current CHP radio file.
+     */
+    private String CHPRadiofile = "";
+
+    /**
+     * ID number for the current CMS data.
+     */
+    private String CMSID = "";
+
+    /**
+     * Type for the current CMS data.
+     */
+    private String CMSType = "";
+
+    /**
+     * Role played by the instructor for the current dialog line.
+     */
+    private String InstructorRole = "";
+
+    /**
+     * Role played by the speaker for the current dialog line.
+     */
+    private String LineRole = "";
+
+    /**
+     * ID number for the current location info.
+     */
+    private String LocationInfoID = "";
+
+    /**
+     * ID number for the current unit.
+     */
+    private String NewUnitNum = "";
+
+    /**
+     * ID number for the current Paramics data.
+     */
+    private String ParamicsID = "";
+
+    /**
+     * Title of the script.
+     */
+    private String TMCTitle = "";
+
+    /**
+     * Beat for the current Tow data.
+     */
+    private String TowBeat = "";
+
+    /**
+     * Company name for the current Tow data.
+     */
+    private String TowCompany = "";
+
+    /**
+     * Confirmation phone number for the current Tow data.
+     */
+    private String TowConfNum = "";
+
+    /**
+     * Public telephone number for the current Tow data.
+     */
+    private String TowPubNum = "";
+
+    /**
+     * True/false value for whether the current unit is active.
+     */
+    private String UnitActive = "";
+
+    /**
+     * True/false value for whether the current unit is the primary unit.
+     */
+    private String UnitPrimary = "";
+
+    /**
+     * Status of the current unit.
+     */
+    private String UnitStatus = "";
+
+    /**
+     * ID number for the current unit.
+     */
+    private String UnitNum = "";
+
+    /**
+     * Street address of the current witness.
+     */
+    private String WitnessAddress = "";
+
+    /**
+     * Name of the current witness.
+     */
+    private String WitnessName = "";
+
+    /**
+     * Phone number of the current witness.
+     */
+    private String WitnessNum = "";
+
+    /**
+     * If true, the current CAD event is not empty.
+     */
+    private boolean foundSubEvents = false;
+
+    /**
+     * The most recent element which contains dialog or other sub-elements.
+     */
+    private ScriptEventInterface trackedEvent = null;
+
+    /**
+     * Incident description for the current ScriptEvent being parsed.
+     */
+    private String currentIncidentDesc = "";
+
+    /**
+     * Name of the current incident.
+     */
+    private String currentIncName = "";
+
+    /**
+     * Time index value (in seconds) for the current ScriptEvent being parsed.
+     */
+    private long currentEventTime = 0;
+
+    /**
+     * Number of levels deep we are. Used for debugging.
+     */
+    private int sublevels = 0;
+
+    /**
+     * The incident we are currently editing.
+     */
+    private ScriptIncident currInc = null;
+
+    /**
+     * Constructor. Initializes incident map.
+     */
+    public MyScriptHandler(SimulationScript s)
+    {
+        script = s;
+        incidentMap = new TreeMap<Integer, ScriptIncident>();
+        eventMap = new TreeMap<ELEMENT, ScriptEventInterface>();
+        pcData = new TreeMap<ELEMENT, String>();
+        docPosition = new Stack<ELEMENT>();
+    }
+
+    /**
+     * Get the list of incidents that have been parsed from the script file.
+     *
+     * @returns Vector of Incident objects.
+     */
+    public Vector<ScriptIncident> getIncidents()
+    {
+        return new Vector<ScriptIncident>(incidentMap.values());
+    }
+
+    /**
+     * SAX Handler method. Clear incident map and reset the error flag.
+     */
+    @Override
+    public void startDocument()
+    {
+        //System.out.println("STUB: Start the document");
+        for (ELEMENT e : ELEMENT.values())
+        {
+            pcData.put(e, null);
+        }
+    }
+
+    /**
+     * Clear all existing events, thereby resetting the script.
+     */
+    public void reset()
+    {
+        incidentMap.clear();
+        System.out.println("STUB: Restart the document");
+    }
+
+    /**
+     * SAX Handler method. Executes at the beginning of each XML element.
+     */
+    @Override
+    public void startElement(String uri, String localName, String qName, Attributes attributes)
+    {
+        /*System.out.println("Start_element;");
+         String t = "";
+         for (int i = 0; i < sublevels; i++)
+         {
+         t += "\t";
+         }
+         System.out.println(t + "New element " + qName);
+         if (attributes.getLength() > 0)
+         {
+         System.out.println(t + "Attributes:");
+         for (int i = 0; i < attributes.getLength(); i++)
+         {
+         System.out.print(t + "" + (i + 1) + ". " + attributes.getQName(i));
+         System.out.println(": '" + attributes.getValue(i) + "\'");
+         }
+         }
+         sublevels++;*/
+        docPosition.push(ELEMENT.byName(qName));
+
+        try
+        {
+            if (qName.equals(ELEMENT.ACTIVITY_LOG_EVALUATION.tag))
+            {
+                eventMap.put(docPosition.peek(), ScriptEvent.factoryByType(ScriptEvent.ScriptEventType.ACTIVITY_LOG_EVAL_EVENT));
+                trackedEvent = eventMap.get(docPosition.peek());
+            }
+            else if (qName.equals(ELEMENT.ATMS_EVALUATION.tag))
+            {
+                eventMap.put(docPosition.peek(), ScriptEvent.factoryByType(ScriptEvent.ScriptEventType.ATMS_EVAL_EVENT));
+                trackedEvent = eventMap.get(docPosition.peek());
+            }
+            else if (qName.equals(ELEMENT.AUDIO.tag))
+            {
+                foundSubEvents = true;
+                eventMap.put(docPosition.peek(), ScriptEvent.factoryByType(ScriptEvent.ScriptEventType.AUDIO_EVENT));
+                try
+                {
+                    audioLength = Integer.parseInt(attributes.getValue("Length"));
+                    audioPath = attributes.getValue("Path");
+                }
+                catch (Exception e)
+                {
+                    audioLength = 0;
+                    audioPath = "";
+                }
+            }
+            else if (qName.equals(ELEMENT.CARDFILE.tag))
+            {
+                try
+                {
+                    cardfileCategory = attributes.getValue("Category");
+                }
+                catch (Exception e)
+                {
+                    cardfileCategory = "";
+                }
+            }
+            else if (qName.equals(ELEMENT.CAD_EVALUATION.tag))
+            {
+                eventMap.put(docPosition.peek(), ScriptEvent.factoryByType(ScriptEvent.ScriptEventType.CAD_EVAL_EVENT));
+                trackedEvent = eventMap.get(docPosition.peek());
+            }
+            else if (qName.equals(ELEMENT.CAD_INCIDENT_EVENT.tag))
+            {
+                eventMap.put(docPosition.peek(), ScriptEvent.factoryByType(ScriptEvent.ScriptEventType.CAD_EVENT));
+            }
+            else if (qName.equals(ELEMENT.CCTV_INFO.tag))
+            {
+                foundSubEvents = true;
+                eventMap.put(docPosition.peek(), ScriptEvent.factoryByType(ScriptEvent.ScriptEventType.CCTV_EVENT));
+            }
+            else if (qName.equals(ELEMENT.CHP_RADIO.tag))
+            {
+                eventMap.put(docPosition.peek(), ScriptEvent.factoryByType(ScriptEvent.ScriptEventType.CHP_RADIO_EVENT));
+                trackedEvent = eventMap.get(docPosition.peek());
+                try
+                {
+                    CHPRadiofile = attributes.getValue("RadioFile");
+                }
+                catch (Exception e)
+                {
+                    CHPRadiofile = "";
+                }
+            }
+            else if (qName.equals(ELEMENT.CMS_EVALUATION.tag))
+            {
+                eventMap.put(docPosition.peek(), ScriptEvent.factoryByType(ScriptEvent.ScriptEventType.CMS_EVAL_EVENT));
+                trackedEvent = eventMap.get(docPosition.peek());
+                try
+                {
+                    CMSID = attributes.getValue("cmsID");
+                    CMSType = attributes.getValue("type");
+                }
+                catch (Exception e)
+                {
+                    CMSID = "";
+                    CMSType = "";
+                }
+            }
+            else if (qName.equals(ELEMENT.FACILITATOR_EVALUATION.tag))
+            {
+                eventMap.put(docPosition.peek(), ScriptEvent.factoryByType(ScriptEvent.ScriptEventType.FACILITATOR_EVAL_EVENT));
+                trackedEvent = eventMap.get(docPosition.peek());
+            }
+            else if (qName.equals(ELEMENT.INSTRUCTOR.tag))
+            {
+                try
+                {
+                    InstructorRole = attributes.getValue("Role");
+                }
+                catch (Exception e)
+                {
+                    System.out.println("SERIOUS PARSING ERROR IN \'Role\'");
+                    InstructorRole = "";
+                }
+            }
+            else if (qName.equals(ELEMENT.LINE.tag))
+            {
+                try
+                {
+                    LineRole = attributes.getValue("Role");
+                }
+                catch (Exception e)
+                {
+                    LineRole = "";
+                }
+            }
+            else if (qName.equals(ELEMENT.LOCATION_INFO.tag))
+            {
+                try
+                {
+                    LocationInfoID = attributes.getValue("ID");
+                }
+                catch (Exception e)
+                {
+                    LocationInfoID = "";
+                }
+            }
+            else if (qName.equals(ELEMENT.MAINTENANCE_RADIO.tag))
+            {
+                eventMap.put(docPosition.peek(), ScriptEvent.factoryByType(ScriptEvent.ScriptEventType.MAINTENANCE_RADIO_EVENT));
+            }
+            else if (qName.equals(ELEMENT.NEW_UNIT.tag))
+            {
+                try
+                {
+                    NewUnitNum = attributes.getValue("UnitNum");
+                }
+                catch (Exception e)
+                {
+                    NewUnitNum = "";
+                }
+            }
+            else if (qName.equals(ELEMENT.PARAMICS.tag))
+            {
+                foundSubEvents = true;
+                eventMap.put(docPosition.peek(), ScriptEvent.factoryByType(ScriptEvent.ScriptEventType.PARAMICS_EVENT));
+                trackedEvent = eventMap.get(docPosition.peek());
+                try
+                {
+                    ParamicsID = attributes.getValue("LocationID");
+                }
+                catch (Exception e)
+                {
+                    ParamicsID = "";
+                }
+            }
+            else if (qName.equals(ELEMENT.RADIO_EVALUATION.tag))
+            {
+                eventMap.put(docPosition.peek(), ScriptEvent.factoryByType(ScriptEvent.ScriptEventType.RADIO_EVAL_EVENT));
+                trackedEvent = eventMap.get(docPosition.peek());
+            }
+            else if (qName.equals(ELEMENT.TMC_SCRIPT.tag))
+            {
+                try
+                {
+                    TMCTitle = attributes.getValue("title");
+                }
+                catch (Exception e)
+                {
+                    TMCTitle = "";
+                }
+            }
+            else if (qName.equals(ELEMENT.TMT_RADIO.tag))
+            {
+                eventMap.put(docPosition.peek(), ScriptEvent.factoryByType(ScriptEvent.ScriptEventType.TMT_RADIO_EVENT));
+            }
+            else if (qName.equals(ELEMENT.TOW.tag))
+            {
+                foundSubEvents = true;
+                eventMap.put(docPosition.peek(), ScriptEvent.factoryByType(ScriptEvent.ScriptEventType.TOW_EVENT));
+                try
+                {
+                    TowBeat = attributes.getValue("Beat");
+                    TowCompany = attributes.getValue("Company");
+                    TowConfNum = attributes.getValue("ConfNum");
+                    TowPubNum = attributes.getValue("PubNum");
+                }
+                catch (Exception e)
+                {
+                    TowBeat = "";
+                    TowCompany = "";
+                    TowConfNum = "";
+                    TowPubNum = "";
+                }
+            }
+            else if (qName.equals(ELEMENT.TELEPHONE.tag))
+            {
+                eventMap.put(docPosition.peek(), ScriptEvent.factoryByType(ScriptEvent.ScriptEventType.TELEPHONE_EVENT));
+                trackedEvent = eventMap.get(docPosition.peek());
+            }
+            else if (qName.equals(ELEMENT.UNIT.tag))
+            {
+                foundSubEvents = true;
+                eventMap.put(docPosition.peek(), ScriptEvent.factoryByType(ScriptEvent.ScriptEventType.UNIT_EVENT));
+                try
+                {
+                    UnitActive = attributes.getValue("Active");
+                    UnitPrimary = attributes.getValue("Primary");
+                    UnitStatus = attributes.getValue("Status");
+                    UnitNum = attributes.getValue("UnitNum");
+                }
+                catch (Exception e)
+                {
+                    UnitActive = "";
+                    UnitPrimary = "";
+                    UnitStatus = "";
+                    UnitNum = "0-0";
+                }
+            }
+            else if (qName.equals(ELEMENT.WITNESS.tag))
+            {
+                foundSubEvents = true;
+                eventMap.put(docPosition.peek(), ScriptEvent.factoryByType(ScriptEvent.ScriptEventType.WITNESS_EVENT));
+                try
+                {
+                    WitnessAddress = attributes.getValue("Address");
+                    WitnessName = attributes.getValue("Name");
+                    WitnessNum = attributes.getValue("PhoneNum");
+                }
+                catch (Exception e)
+                {
+                    WitnessAddress = "";
+                    WitnessName = "";
+                    WitnessNum = "";
+                }
+            }
+            else if (qName.equals(ELEMENT.INCIDENT.tag))
+            {
+                try
+                {
+                    incidentLogNumber = Integer.parseInt(attributes.getValue(
+                            "LogNum"));
+                }
+                catch (Exception e)
+                {
+                    myScriptLogger.logp(Level.SEVERE, "ScriptHandler", "startElement",
+                            "Invalid LogNumber " + attributes.getValue(
+                                    "LogNum"), e);
+                    incidentLogNumber = 0;
+                }
+            }
+            else if (qName.equals(ELEMENT.UNIT.tag))
+            {
+                try
+                {
+                    UnitNum = attributes.getValue("UnitNum");
+                }
+                catch (Exception e)
+                {
+                    myScriptLogger.logp(Level.SEVERE, "ScriptHandler", "startElement",
+                            "Invalid Unit Number " + attributes.getValue(
+                                    "UnitNum"), e);
+                    UnitNum = "0-0";
+                }
+            }
+        }
+        catch (Exception e)
+        {
+            myScriptLogger.logp(Level.SEVERE, "ScriptHandler", "startElement",
+                    "Exception in starting element <" + qName + ">.", e);
+        }
+    }
+
+    /**
+     * SAX Handler method. Append read characters to local buffer.
+     */
+    @Override
+    public void characters(char[] ch, int start, int length)
+    {
+        String str = new String(ch, start, length).trim();
+        str = str.replace("\t ", "");
+        str = str.replace("\t", "");
+        str = str.replace("\n ", "\n");
+
+        parsedValue.append(str);
+        if (pcData.get(docPosition.peek()) == null || pcData.get(docPosition.peek()).equals(""))
+        {
+            pcData.put(docPosition.peek(), str);
+        }
+        else
+        {
+            pcData.put(docPosition.peek(), "" + (pcData.get(docPosition.peek())
+                    + "\n" + str));
+        }
+    }
+
+    /**
+     * SAX Handler method. Executes at the close of each XML element.
+     */
+    @Override
+    public void endElement(String uri, String localName, String qName)
+    {
+
+        currentElement = docPosition.pop();
+        ScriptEventInterface newEvent = null;
+        try
+        {
+            if (currentElement == ELEMENT.ATMS_EVALUATION)
+            {
+                newEvent = eventMap.remove(currentElement);
+
+                currInc.addNewEvent(newEvent, (int) currentEventTime);
+            }
+            else if (currentElement == ELEMENT.ACTIVITY_LOG_EVALUATION)
+            {
+                newEvent = eventMap.remove(currentElement);
+
+                currInc.addNewEvent(newEvent, (int) currentEventTime);
+            }
+            else if (currentElement == ELEMENT.AUDIO)
+            {
+                newEvent = eventMap.remove(currentElement);
+                ((AudioEvent) newEvent).audioLength = audioLength;
+                ((AudioEvent) newEvent).audioPath = audioPath;
+                ((AudioEvent) newEvent).length = audioLength;
+                currInc.addNewEvent(newEvent, (int) currentEventTime);
+            }
+            else if (currentElement == ELEMENT.CAD_EVALUATION)
+            {
+                newEvent = eventMap.remove(currentElement);
+
+                currInc.addNewEvent(newEvent, (int) currentEventTime);
+            }
+            else if (currentElement == ELEMENT.CAD_INCIDENT_EVENT)
+            {
+                newEvent = eventMap.remove(currentElement);
+                ((CADEvent) newEvent).detail = pcData.remove(ELEMENT.DETAIL);
+                ((CADEvent) newEvent).hasSubEvents = foundSubEvents;
+                if (null != ((CADEvent) newEvent).detail)
+                {
+                    if (!(((CADEvent) newEvent).detail.equals("")))
+                    {
+                        currInc.addNewEvent(newEvent, (int) currentEventTime);
+                    }
+                }
+                foundSubEvents = false;
+            }
+            else if (currentElement == ELEMENT.CCTV_INFO)
+            {
+                newEvent = eventMap.remove(currentElement);
+                ((CCTVEvent) newEvent).message = pcData.remove(ELEMENT.CCTV_INFO);
+                currInc.addNewEvent(newEvent, (int) currentEventTime);
+            }
+            else if (currentElement == ELEMENT.CHP_RADIO)
+            {
+                newEvent = eventMap.remove(currentElement);
+                ((CHPRadioEvent) newEvent).radioFile = CHPRadiofile;
+                currInc.addNewEvent(newEvent, (int) currentEventTime);
+            }
+
+            else if (currentElement == ELEMENT.CMS_EVALUATION)
+            {
+                newEvent = eventMap.remove(currentElement);
+                ((CMSEvaluationEvent) newEvent).cmsID = CMSID;
+                ((CMSEvaluationEvent) newEvent).cmsType = CMSType;
+                if (pcData.get(ELEMENT.LOCATION) != null)
+                {
+                    ((CMSEvaluationEvent) newEvent).location = pcData.remove(ELEMENT.LOCATION);
+                }
+
+                currInc.addNewEvent(newEvent, (int) currentEventTime);
+            }
+            else if (currentElement == ELEMENT.CMS_LINE)
+            {
+                if (trackedEvent instanceof CMSEvaluationEvent)
+                {
+                    ((CMSEvaluationEvent) trackedEvent).message.add(pcData.remove(ELEMENT.CMS_LINE));
+                }
+            }
+            else if (currentElement == ELEMENT.EXPECTED_ACTION)
+            {
+                if (trackedEvent instanceof EvaluationEventInterface)
+                {
+                    ((EvaluationEventInterface) trackedEvent).addAction(pcData.remove(ELEMENT.EXPECTED_ACTION));
+                }
+            }
+            else if (currentElement == ELEMENT.FACILITATOR_EVALUATION)
+            {
+                newEvent = eventMap.remove(currentElement);
+
+                currInc.addNewEvent(newEvent, (int) currentEventTime);
+            }
+            else if (currentElement == ELEMENT.INSTRUCTOR)
+            {
+                if (trackedEvent instanceof TelephoneEvent)
+                {
+                    ((TelephoneEvent) trackedEvent).lines.add(pcData.remove(ELEMENT.INSTRUCTOR));
+                    ((TelephoneEvent) trackedEvent).roles.add(InstructorRole);
+                }
+            }
+            else if (currentElement == ELEMENT.Lane_number)
+            {
+                if (trackedEvent instanceof ParamicsEvent)
+                {
+                    ((ParamicsEvent) trackedEvent).laneNums.add(Integer.parseInt(pcData.remove(ELEMENT.Lane_number)));
+                }
+            }
+            else if (currentElement == ELEMENT.LINE)
+            {
+                if (trackedEvent instanceof CHPRadioEvent)
+                {
+                    ((CHPRadioEvent) trackedEvent).lines.add(pcData.remove(ELEMENT.LINE));
+                    ((CHPRadioEvent) trackedEvent).roles.add(LineRole);
+                }
+            }
+            else if (currentElement == ELEMENT.MAINTENANCE_RADIO)
+            {
+                newEvent = eventMap.remove(currentElement);
+                ((MaintenanceRadioEvent) newEvent).message = pcData.remove(ELEMENT.MAINTENANCE_RADIO);
+                currInc.addNewEvent(newEvent, (int) currentEventTime);
+            }
+            else if (currentElement == ELEMENT.PARAMICS)
+            {
+                newEvent = eventMap.remove(currentElement);
+                ((ParamicsEvent) newEvent).locationID = ParamicsID;
+
+                if (pcData.get(ELEMENT.Status) != null)
+                {
+                    ((ParamicsEvent) newEvent).status = pcData.remove(ELEMENT.Status);
+                }
+                if (pcData.get(ELEMENT.Type) != null)
+                {
+                    ((ParamicsEvent) newEvent).type = pcData.remove(ELEMENT.Type);
+                }
+                currInc.addNewEvent(newEvent, (int) currentEventTime);
+            }
+            else if (currentElement == ELEMENT.RADIO_EVALUATION)
+            {
+                newEvent = eventMap.remove(currentElement);
+
+                currInc.addNewEvent(newEvent, (int) currentEventTime);
+            }
+            else if (currentElement == ELEMENT.STUDENT)
+            {
+                if (trackedEvent instanceof TelephoneEvent)
+                {
+                    ((TelephoneEvent) trackedEvent).lines.add(pcData.remove(ELEMENT.STUDENT));
+                    ((TelephoneEvent) trackedEvent).roles.add("Student");
+                }
+            }
+            else if (currentElement == ELEMENT.TEXT && docPosition.peek() == ELEMENT.GENERAL_INFO)
+            {
+                currInc.description = pcData.remove(ELEMENT.TEXT);
+            }
+            else if (currentElement == ELEMENT.TMT_RADIO)
+            {
+                newEvent = eventMap.remove(currentElement);
+                ((TMTRadioEvent) newEvent).message = pcData.remove(ELEMENT.TMT_RADIO);
+                currInc.addNewEvent(newEvent, (int) currentEventTime);
+            }
+            else if (currentElement == ELEMENT.TELEPHONE)
+            {
+                newEvent = eventMap.remove(currentElement);
+                currInc.addNewEvent(newEvent, (int) currentEventTime);
+            }
+            else if (currentElement == ELEMENT.TOW)
+            {
+                newEvent = eventMap.remove(currentElement);
+                ((TowEvent) newEvent).towBeat = TowBeat;
+                ((TowEvent) newEvent).towCompany = TowCompany;
+                ((TowEvent) newEvent).towConfNum = TowConfNum;
+                ((TowEvent) newEvent).towPubNum = TowPubNum;
+                currInc.addNewEvent(newEvent, (int) currentEventTime);
+            }
+            else if (currentElement == ELEMENT.UNIT)
+            {
+                newEvent = eventMap.remove(currentElement);
+                ((UnitEvent) newEvent).unitActive = UnitActive;
+                ((UnitEvent) newEvent).unitPrimary = UnitPrimary;
+                ((UnitEvent) newEvent).unitStatus = UnitStatus;
+                ((UnitEvent) newEvent).unitNum = UnitNum;
+                currInc.addNewEvent(newEvent, (int) currentEventTime);
+            }
+            else if (currentElement == ELEMENT.WITNESS)
+            {
+                newEvent = eventMap.remove(currentElement);
+                ((WitnessEvent) newEvent).witnessAddress = WitnessAddress;
+                ((WitnessEvent) newEvent).witnessName = WitnessName;
+                ((WitnessEvent) newEvent).witnessNum = WitnessNum;
+                currInc.addNewEvent(newEvent, (int) currentEventTime);
+            }
+
+            else if (qName.equals(ELEMENT.INCIDENT.tag))
+            {
+                currentIncName = parsedValue.toString();
+
+                if (incidentMap.get(incidentLogNumber) == null)
+                {
+                    incidentMap.put(incidentLogNumber,
+                            new ScriptIncident(SimulationScript.incidentColors[Math.abs(new Random().nextInt()) % SimulationScript.incidentColors.length],
+                                    incidentLogNumber, currentIncName, currentIncidentDesc,
+                                    script, (int) currentEventTime));
+                }
+                currInc = incidentMap.get(incidentLogNumber);
+
+            }
+            else if (qName.equals(ELEMENT.NEW_UNIT))
+            {
+                if (unitMap.get(NewUnitNum) == null)
+                {
+                    Unit unit = new Unit();
+                    unit.UnitNum = NewUnitNum;
+                    if (pcData.containsKey(ELEMENT.AGY))
+                    {
+                        unit.Agy = pcData.remove(ELEMENT.AGY);
+                    }
+                    if (pcData.containsKey(ELEMENT.ALIAS))
+                    {
+                        unit.Alias = pcData.remove(ELEMENT.ALIAS);
+                    }
+                    if (pcData.containsKey(ELEMENT.AREA))
+                    {
+                        unit.Area = pcData.remove(ELEMENT.AREA);
+                    }
+                    if (pcData.containsKey(ELEMENT.BADGE_NUM))
+                    {
+                        unit.Badge_Num = pcData.remove(ELEMENT.BADGE_NUM);
+                    }
+                    if (pcData.containsKey(ELEMENT.CURR_LOC))
+                    {
+                        unit.Curr_Loc = pcData.remove(ELEMENT.CURR_LOC);
+                    }
+                    if (pcData.containsKey(ELEMENT.DESTINATION))
+                    {
+                        unit.Destination = pcData.remove(ELEMENT.DESTINATION);
+                    }
+                    if (pcData.containsKey(ELEMENT.ID))
+                    {
+                        unit.ID = pcData.remove(ELEMENT.ID);
+                    }
+                    if (pcData.containsKey(ELEMENT.MASTER_INC_NUM))
+                    {
+                        unit.Master_Inc_Num = pcData.remove(ELEMENT.MASTER_INC_NUM);
+                    }
+                    if (pcData.containsKey(ELEMENT.MISC_INFO))
+                    {
+                        unit.Misc_Info = pcData.remove(ELEMENT.MISC_INFO);
+                    }
+                    if (pcData.containsKey(ELEMENT.OOS))
+                    {
+                        unit.OOS = pcData.remove(ELEMENT.OOS);
+                    }
+                    if (pcData.containsKey(ELEMENT.OFFICE))
+                    {
+                        unit.Office = pcData.remove(ELEMENT.OFFICE);
+                    }
+                    if (pcData.containsKey(ELEMENT.OFFICER))
+                    {
+                        unit.Officer = pcData.remove(ELEMENT.OFFICER);
+                    }
+                    if (pcData.containsKey(ELEMENT.P))
+                    {
+                        unit.P = pcData.remove(ELEMENT.P);
+                    }
+                    if (pcData.containsKey(ELEMENT.PRIMARY))
+                    {
+                        unit.Primary = pcData.remove(ELEMENT.PRIMARY);
+                    }
+                    if (pcData.containsKey(ELEMENT.STACK))
+                    {
+                        unit.Stack = pcData.remove(ELEMENT.STACK);
+                    }
+                    if (pcData.containsKey(ELEMENT.STATUS))
+                    {
+                        unit.Status = pcData.remove(ELEMENT.STATUS);
+                    }
+                    if (pcData.containsKey(ELEMENT.TIMER))
+                    {
+                        unit.Timer = pcData.remove(ELEMENT.TIMER);
+                    }
+                }
+            }
+            else if (qName.equals(ELEMENT.TIME_INDEX.tag))
+            {
+                currentEventTime = timeBytesToSeconds(parsedValue.toString().trim());
+            }
+
+            parsedValue.setLength(0);
+            eventMap.put(currentElement, null);
+        }
+        catch (Exception e)
+        {
+            myScriptLogger.logp(Level.SEVERE, "ScriptHandler", "endElement",
+                    "Exception in ending element <" + qName + ">.", e);
+        }
+        /*
+         String t = "";
+         sublevels--;
+         for (int i = 0; i < sublevels; i++)
+         {
+         t += "\t";
+         }
+         System.out.println(t + "End of element " + qName);*/
+
+    }
+
+    /**
+     * SAX Handler method. End the document and close it out.
+     */
+    @Override
+    public void endDocument()
+    {
+        //System.out.println("STUB: End the document");
+    }
+
+    /**
+     * Sax Handler method. Log normal errors.
+     */
+    @Override
+    public void error(SAXParseException e)
+    {
+        myScriptLogger.logp(Level.SEVERE, "ScriptHandler", "error",
+                "SAX Parsing error.", e);
+    }
+
+    /**
+     * SAX Handler method. Log fatal errors.
+     */
+    @Override
+    public void fatalError(SAXParseException e)
+    {
+        myScriptLogger.logp(Level.SEVERE, "ScriptHandler", "fatalError",
+                "SAX Parsing fatal error.", e);
+    }
+
+    /**
+     * SAX Handler method. Log warnings.
+     */
+    @Override
+    public void warning(SAXParseException e)
+    {
+        myScriptLogger.logp(Level.SEVERE, "ScriptHandler", "warning",
+                "SAX Parsing warning.", e);
+    }
+
+    /**
+     * Private method to convert a time object from format HH:MM:SS to a long
+     * value of the corresponding number of seconds.
+     *
+     * @param time String time representation of format HH:MM:SS
+     * @return long Number of seconds
+     * @throws StringIndexOutOfBoundsException if the input parameter is not
+     * valid
+     */
+    private long timeBytesToSeconds(String time)
+            throws StringIndexOutOfBoundsException
+    {
+        long seconds = 0;
+
+        seconds = ((long) Character.digit(time.charAt(0), 10) * 36000
+                + Character.digit(time.charAt(1), 10) * 3600
+                + Character.digit(time.charAt(3), 10) * 600
+                + Character.digit(time.charAt(4), 10) * 60
+                + Character.digit(time.charAt(6), 10) * 10
+                + Character.digit(time.charAt(7), 10));
+
+        return seconds;
+    }
+}
Index: /trunk/src/scriptbuilder/structures/SimulationScript.java
===================================================================
--- /trunk/src/scriptbuilder/structures/SimulationScript.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/SimulationScript.java	(revision 1)
@@ -0,0 +1,214 @@
+package scriptbuilder.structures;
+
+import java.awt.Color;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.Random;
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParserFactory;
+import scriptbuilder.structures.ScriptEvent.ScriptEventType;
+import scriptbuilder.structures.ScriptIncident.IncidentFocusedEvent;
+import scriptbuilder.structures.ScriptIncident.SliceChangedEvent;
+
+/**
+ * Representation of the script to be run by the TMC Simulator. Holds a list of
+ * incidents, which have start and end times and contain events.
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ *
+ * @author Bryan McGuffin <bmcguffi@calpoly.edu>
+ * @version 2017/06/22
+ */
+public class SimulationScript extends Observable implements Observer
+{
+
+    /**
+     * All default options for GUI colorings of incidents.
+     */
+    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
+    };
+
+    /**
+     * The incidents displayed by the GUI.
+     */
+    public List<ScriptIncident> incidents;
+
+    //Somewhere in the code, something assumes that the list of incidents
+    //contains exactly 10 items. Until I can find and un-break that, this will do.
+    private final int INCIDENT_FILL_COUNT = 10;
+
+    /**
+     * Number of incidents currently displayed.
+     */
+    private int numberOfIncidents;
+
+    /**
+     * Script handler for parsing incoming XML files.
+     */
+    private MyScriptHandler sh;
+
+    //TODO: Pretty much everything in this constructor is dummy data.
+    //Replace all of it.
+    /**
+     * Constructor. Backfill incident list with null objects, to be replaced
+     * later.
+     */
+    public SimulationScript()
+    {
+        sh = new MyScriptHandler(this);
+        incidents = new ArrayList<ScriptIncident>();
+        numberOfIncidents = 0;
+
+        // Create the media event
+        /*incidents.add(new ScriptIncident(incidentColors[0], 100, "Media",
+         "An incident for the media in CAD.", 10800, this));
+         numberOfIncidents++;
+         // 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));
+         numberOfIncidents++;*/
+        //Backfill with null incidents
+        for (int i = numberOfIncidents; i < INCIDENT_FILL_COUNT; i++)
+        {
+            incidents.add(null);
+        }
+        /*
+         // Add some demo events
+         incidents.add(new ScriptIncident(incidentColors[1], 174, "Blueberry Truck",
+         "Blueberry truck crashed on the freeway.", 8800, this));
+         numberOfIncidents++;
+         incidents.add(new ScriptIncident(incidentColors[2], 175, "Construction Crash",
+         "Crash at construction site on Red Road.", 6800, this));
+         numberOfIncidents++;
+         incidents.add(new ScriptIncident(incidentColors[3], 176, "Car Freeway Flip",
+         "Car flipped across the lane divider on the freeway.", 7200, this));
+         numberOfIncidents++;
+         incidents.add(new ScriptIncident(incidentColors[4], 177, "Two Lane Crash",
+         "Crash taking two lanes on Tree Road.", 4200, this));
+         numberOfIncidents++;
+         incidents.add(new ScriptIncident(incidentColors[5], 178, "Stalled Truck",
+         "Truck stalled on the freeway.", 2800, this));
+         numberOfIncidents++;
+         //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);
+         Random rng = new Random();
+         ScriptEventType[] eventTypes = ScriptEventType.values();
+         if (numberOfIncidents > 0)
+         {
+         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 % numberOfIncidents).slices.get(s % (incidents.get(n % numberOfIncidents).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); 
+         }
+         */
+    }
+
+    /**
+     * Pass incident focus events on to observers, if applicable.
+     *
+     * @param o The observable object sending the update
+     * @param arg Argument parameter of update
+     */
+    @Override
+    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);
+        }
+    }
+
+    /**
+     * Load in an existing script from an XML file.
+     *
+     * @param f the file containing the script
+     */
+    public void loadScriptFromFile(File f)
+    {
+        try
+        {
+
+            SAXParserFactory.newInstance().newSAXParser().parse(f, sh);
+
+            Vector<ScriptIncident> inc = sh.getIncidents();
+
+            for (ScriptIncident sci : inc)
+            {
+                if (numberOfIncidents < INCIDENT_FILL_COUNT)
+                {
+                    incidents.set(numberOfIncidents++, sci);
+                }
+            }
+        }
+        catch (Exception ex)
+        {
+            System.out.println("ERROR LOADING SCRIPT");
+            ex.printStackTrace();
+        }
+        update(this, this);
+    }
+}
Index: /trunk/src/scriptbuilder/structures/TimeSlice.java
===================================================================
--- /trunk/src/scriptbuilder/structures/TimeSlice.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/TimeSlice.java	(revision 1)
@@ -0,0 +1,187 @@
+package scriptbuilder.structures;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import scriptbuilder.gui.ScriptBuilderGuiConstants;
+import scriptbuilder.structures.events.ScriptEventInterface;
+
+/**
+ * An instance in time in the simulation. Each timeslice has a start time, an X
+ * position on the GUI timeline, and a list of ScriptEvents which occur at that
+ * time.
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ * @author Bryan McGuffin
+ * @version 2017/06/30
+ */
+public class TimeSlice implements Comparable
+{
+
+    //Events which occur at this instance
+    /**
+     * List of Script Events which begin at this instance.
+     */
+    public List<ScriptEventInterface> events;
+    //Absolute start time of this time slice
+    private int seconds;
+
+    /**
+     * Constructor.
+     *
+     * @param seconds Number of seconds from the beginning of the simulation
+     * that this timeslice occurs
+     */
+    public TimeSlice(int seconds)
+    {
+        this.seconds = seconds;
+        events = new ArrayList<ScriptEventInterface>();
+    }
+
+    /**
+     * Add a new script event to this time slice. Sort events by event type.
+     *
+     * @param event the ScriptEvent to be added
+     */
+    public void addEvent(ScriptEventInterface event)
+    {
+        events.add(event);
+        Collections.sort(events);
+    }
+
+    /**
+     * Get the X position of this timeslice on the GUI timeline. Affected by
+     * zoom level.
+     *
+     * @return Screen distance from the start of the timeline that this
+     * timeslice occurs
+     */
+    public int getX()
+    {
+        return seconds / ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION
+                * ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK;
+    }
+
+    /**
+     * Get the start time of this timeSlice.
+     *
+     * @return the start time of the timeslice in seconds, from the beginning of
+     * the simulation
+     */
+    public int getTime()
+    {
+        return seconds;
+    }
+
+    /**
+     * Shift the start position of this timeslice to the right by some amount.
+     *
+     * @param amnt the number of seconds forward in time to push this slice
+     */
+    public void shift(int amnt)
+    {
+        seconds += amnt;
+    }
+
+    /**
+     * Get the number of seconds that events which start in this timeslice are
+     * active.
+     *
+     * @return The duration of the longest-lasting event in this slice.
+     */
+    public int getEffectiveDuration()
+    {
+        int dur = 0;
+        for (ScriptEventInterface e : events)
+        {
+            if (e.getLength() > dur)
+            {
+                dur = e.getLength();
+            }
+        }
+        return dur;
+    }
+
+    /**
+     * Get the text to be displayed when hovering over this timeSlice.
+     *
+     * @param y the y-position of the cursor on the GUI
+     * @return The text to be displayed: all events are listed if we're on the
+     * main incident line, but only one event is listed if we're hovering over
+     * that particular event
+     */
+    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;
+    }
+
+    /**
+     * List all the events attached to this timeslice, with line breaks between.
+     *
+     * @return A list of the form: event1_type - event1_description event2_type
+     * - event2_description ...
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder sb = new StringBuilder();
+
+        for (ScriptEventInterface event : events)
+        {
+            sb.append(event.toString());
+            sb.append('\n');
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Order the timeslices by start time. Earlier start times come first.
+     *
+     * @param o the other timeSlice to be compared
+     * @return -1, 0 , or 1 depending on if this timeSlice comes before,
+     * simultaneously, or after the other
+     */
+    @Override
+    public int compareTo(Object o)
+    {
+        TimeSlice other = (TimeSlice) o;
+        if (this.getTime() < other.getTime())
+        {
+            return -1;
+        }
+        else if (this.getTime() > other.getTime())
+        {
+            return 1;
+        }
+        else
+        {
+            return 0;
+        }
+
+    }
+}
Index: /trunk/src/scriptbuilder/structures/ScriptIncident.java
===================================================================
--- /trunk/src/scriptbuilder/structures/ScriptIncident.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/ScriptIncident.java	(revision 1)
@@ -0,0 +1,293 @@
+package scriptbuilder.structures;
+
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Observable;
+import java.util.TreeMap;
+import scriptbuilder.structures.events.ScriptEventInterface;
+
+/**
+ * A script incident. It has an ID number, a name, and a description. It may
+ * contain several script events. It also has a color in the GUI window, and is
+ * collapsible. Incidents may start as soon as the script begins to run, or they
+ * can be offset from the start of the script.
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ * @author Bryan McGuffin
+ * @version 2017/06/29
+ */
+public class ScriptIncident extends Observable
+{
+
+    /**
+     * The moments in time which have associated events.
+     */
+    public TreeMap<Integer, TimeSlice> slices;
+
+    /**
+     * GUI display color of this slice.
+     */
+    public Color color;
+
+    /**
+     * ID number for this incident.
+     */
+    public int number;
+
+    /**
+     * Name of the incident.
+     */
+    public String name;
+
+    /**
+     * Description of the incident.
+     */
+    public String description;
+
+    /**
+     * Length, in seconds, of the incident.
+     */
+    public int length = 0;
+
+    /**
+     * If true, incident appears minimized.
+     */
+    public boolean collapsed = false;
+
+    /**
+     * Number of seconds between start of simulation and start of this incident.
+     */
+    public int offset = 0;
+
+    /**
+     * Start position of the latest timeslice.
+     */
+    private int latestStart = 0;
+
+    /**
+     * Basic constructor.
+     *
+     * @param number The incident ID number
+     * @param name The name of the incident
+     * @param description The description of the incident
+     * @param script The script object holding this incident
+     */
+    public ScriptIncident(int number, String name, String description,
+            SimulationScript script)
+    {
+        color = Color.BLACK;
+        this.number = number;
+        this.name = name;
+        this.description = description;
+        this.addObserver(script);
+        slices = new TreeMap<Integer, TimeSlice>();
+    }
+
+    /**
+     * Constructor with color parameter.
+     *
+     * @param color The color to use in the GUI for this event
+     * @param number The incident ID number
+     * @param name The name of the incident
+     * @param description The description of the incident
+     * @param script The script object holding this incident
+     */
+    public ScriptIncident(Color color, int number, String name,
+            String description, SimulationScript script)
+    {
+        this.color = color;
+        this.number = number;
+        this.name = name;
+        this.description = description;
+        this.addObserver(script);
+        slices = new TreeMap<Integer, TimeSlice>();
+    }
+
+    /**
+     * Constructor with color and offset parameters.
+     *
+     * @param color The color to use in the GUI for this event
+     * @param number The incident ID number
+     * @param name The name of the incident
+     * @param description The description of the incident
+     * @param script The script object holding this incident
+     * @param offset Number of seconds after 00:00:00 that this incident begins
+     */
+    public ScriptIncident(Color color, int number, String name,
+            String description, SimulationScript script,
+            int offset)
+    {
+        this.color = color;
+        this.number = number;
+        this.name = name;
+        this.description = description;
+        this.addObserver(script);
+        slices = new TreeMap<Integer, TimeSlice>();
+        this.setOffset(offset);
+    }
+
+    /**
+     * Set whether or not the incident is fully visible or in a compacted state.
+     *
+     * @param collapsed True if the event is compacted
+     */
+    public void setCollapsed(boolean collapsed)
+    {
+        this.collapsed = collapsed;
+        setChanged();
+        notifyObservers();
+    }
+
+    /**
+     * Set the delay time between the start of the script and the start of this
+     * incident.
+     *
+     * @param offset Number of seconds after 00:00:00 that this incident begins
+     */
+    public void setOffset(int offset)
+    {
+        this.offset = offset;
+        setChanged();
+        notifyObservers();
+    }
+
+    /**
+     * Add a new script event to this incident.
+     *
+     * @param ev The new event
+     * @param start Start time of this event, in seconds, from the beginning of
+     * the simulation
+     */
+    public void addNewEvent(ScriptEventInterface ev, int start)
+    {
+        TimeSlice t = slices.get(start);
+        if (t == null)
+        {
+            //System.out.println("Generating new slice at time " + start);
+            t = new TimeSlice(start);
+            t.addEvent(ev);
+            slices.put(start, t);
+        }
+        else
+        {
+            t.addEvent(ev);
+        }
+        if (start > latestStart)
+        {
+            latestStart = start;
+            //System.out.println("Latest Start: " + latestStart);
+        }
+        if (start < offset)
+        {
+            offset = start;
+            //System.out.println("Offset: " + offset);
+        }
+        updateLength();
+    }
+
+    /**
+     * Get an array of all valid timeSlices.
+     *
+     * @return List of timeSlices which are not null
+     */
+    public ArrayList<TimeSlice> getSlices()
+    {
+        ArrayList<TimeSlice> arr = new ArrayList<TimeSlice>();
+        for (int i = 0; i <= latestStart; i++)
+        {
+            TimeSlice ts = slices.get(i);
+            if (ts != null)
+            {
+                arr.add(ts);
+            }
+        }
+        return arr;
+    }
+
+    /**
+     * Update the offset and apparent length of this incident. The offset is the
+     * start time of the earliest event in the incident. The length is the time
+     * that the latest, longest-lasting event ends, minus the offset.
+     */
+    private void updateLength()
+    {
+        int lengthSoFar = 0;
+        for (int i = 0; i <= latestStart; i++)
+        {
+            TimeSlice ts = slices.get(i);
+            if (ts != null)
+            {
+                int reach = ts.getTime() + ts.getEffectiveDuration() - offset;
+                if (reach > lengthSoFar)
+                {
+                    lengthSoFar = reach;
+                }
+            }
+        }
+        length = lengthSoFar + 100;
+    }
+
+    /**
+     * An event which is fired if the focused slice changes.
+     */
+    public static class SliceChangedEvent
+    {
+
+        public TimeSlice slice;
+
+        SliceChangedEvent(TimeSlice slice)
+        {
+            this.slice = slice;
+        }
+    }
+
+    /**
+     * Update and cause the system to focus on the given timeslice.
+     *
+     * @param i Index of the slice to focus on
+     */
+    public void setSliceActive(int i)
+    {
+        if (this.slices.get(i) != null)
+        {
+            setChanged();
+            notifyObservers(new SliceChangedEvent(this.slices.get(i)));
+        }
+    }
+
+    /**
+     * An event which is fired if the focused incident changes.
+     */
+    public static class IncidentFocusedEvent
+    {
+
+        public ScriptIncident incident;
+
+        IncidentFocusedEvent(ScriptIncident i)
+        {
+            incident = i;
+        }
+    }
+
+    /**
+     * Update and cause the system to focus on this incident.
+     */
+    public void setIncidentActive()
+    {
+        setChanged();
+        notifyObservers(new IncidentFocusedEvent(this));
+    }
+
+    /**
+     * String representation of this incident.
+     *
+     * @return String of the form "[Incident number] - [Incident name]"
+     */
+    @Override
+    public String toString()
+    {
+        return this.number + " - " + this.name;
+    }
+}
Index: /trunk/src/scriptbuilder/structures/units/Unit.java
===================================================================
--- /trunk/src/scriptbuilder/structures/units/Unit.java	(revision 1)
+++ /trunk/src/scriptbuilder/structures/units/Unit.java	(revision 1)
@@ -0,0 +1,58 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package scriptbuilder.structures.units;
+
+/**
+ * Placeholder until I add some functionality. Represents an officer in a
+ * vehicle on the map. Has a name, ID, position, and status, as well as several
+ * other identifying factors.
+ *
+ * @author Bryan McGuffin
+ */
+public class Unit
+{
+
+    public String UnitNum = "";
+
+    public String ID = "";
+
+    public String Status = "";
+
+    public String Master_Inc_Num = "";
+
+    public String Primary = "";
+
+    public String OOS = "";
+
+    public String Type = "";
+
+    public String Curr_Loc = "";
+
+    public String Destination = "";
+
+    public String Misc_Info = "";
+
+    public String Stack = "";
+
+    public String Area = "";
+
+    public String Officer = "";
+
+    public String Badge_Num = "";
+
+    public String Timer = "";
+
+    public String Office = "";
+
+    public String P = "";
+
+    public String Agy = "";
+
+    public String Alias = "";
+
+    public String Unit_Status = "";
+
+}
Index: /trunk/src/scriptbuilder/gui/drawers/IncidentTimelineDrawer.java
===================================================================
--- /trunk/src/scriptbuilder/gui/drawers/IncidentTimelineDrawer.java	(revision 1)
+++ /trunk/src/scriptbuilder/gui/drawers/IncidentTimelineDrawer.java	(revision 1)
@@ -0,0 +1,43 @@
+package scriptbuilder.gui.drawers;
+
+import java.awt.Graphics2D;
+import scriptbuilder.gui.ScriptBuilderGuiConstants;
+import scriptbuilder.structures.ScriptIncident;
+import scriptbuilder.structures.TimeSlice;
+
+/**
+ * Draws the graphics for one entire incident.
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ * @author Bryan McGuffin
+ */
+public class IncidentTimelineDrawer
+{
+
+    /**
+     * Draw the incident line. Then, utilize TimeSliceDrawer to draw the
+     * timeslices.
+     *
+     * @param g2d the graphics component
+     * @param incident the incident to be drawn
+     * @param collapsed if true, time slice events won't be drawn
+     */
+    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.getSlices())
+        {
+            TimeSliceDrawer.DrawTimeSlice(g2d, slice, collapsed);
+        }
+    }
+}
Index: /trunk/src/scriptbuilder/gui/drawers/EventIconDrawer.java
===================================================================
--- /trunk/src/scriptbuilder/gui/drawers/EventIconDrawer.java	(revision 1)
+++ /trunk/src/scriptbuilder/gui/drawers/EventIconDrawer.java	(revision 1)
@@ -0,0 +1,166 @@
+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.*;
+import scriptbuilder.structures.events.ScriptEventInterface;
+
+/**
+ * Draws the icon for one event. Maintains a map of all previously used images
+ * for faster lookup.
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ * @author Bryan McGuffin
+ */
+public class EventIconDrawer
+{
+
+    /**
+     * Mapping of all previously used icon images. Keys: The string name of the
+     * image. Values: The image object.
+     */
+    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;
+
+    /**
+     * Get the image icon which corresponds to the given name. If the image map
+     * hasn't been initialized, do so and give it a copy of each image.
+     *
+     * @param name Name of the image to find
+     * @return Image object corresponding to that name
+     */
+    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;
+    }
+
+    /**
+     * Given an event, draw its icon.
+     *
+     * @see DrawEventIcon(Graphics2D g2d, ScriptEventType eventType, int x, int
+     * y)
+     */
+    public static void DrawEventIcon(Graphics2D g2d, ScriptEventInterface event,
+            int x, int y)
+    {
+        DrawEventIcon(g2d, event.getScriptEventType(), x, y);
+    }
+
+    /**
+     * Given an event type, draw the icon relevant to that type.
+     *
+     * @param g2d the graphics component
+     * @param eventType The type of event to draw
+     * @param x X position of the icon
+     * @param y Y position of the icon
+     */
+    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: /trunk/src/scriptbuilder/gui/drawers/CursorDrawer.java
===================================================================
--- /trunk/src/scriptbuilder/gui/drawers/CursorDrawer.java	(revision 1)
+++ /trunk/src/scriptbuilder/gui/drawers/CursorDrawer.java	(revision 1)
@@ -0,0 +1,93 @@
+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;
+
+/**
+ * Draws the cursor which marks the X position on the currently focused incident
+ * timeline.
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ * @author Bryan McGuffin
+ */
+public class CursorDrawer
+{
+
+    /**
+     * The working copy of the cursor icon to use.
+     */
+    private static Image cursorIconImage = null;
+
+    /**
+     * Gets the image to use for the cursor and stores it for faster subsequent
+     * lookups.
+     *
+     * @return Cursor.png
+     */
+    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;
+    }
+
+    /**
+     * Sets up the box for the cursor timestamp text, then draws the cursor at
+     * the given position.
+     *
+     * @param g2d the graphics component
+     * @param x current offset of the mouse from the center of the cursor
+     * @param locked if true, timestamp is a different color
+     */
+    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: /trunk/src/scriptbuilder/gui/drawers/TimeSliceDrawer.java
===================================================================
--- /trunk/src/scriptbuilder/gui/drawers/TimeSliceDrawer.java	(revision 1)
+++ /trunk/src/scriptbuilder/gui/drawers/TimeSliceDrawer.java	(revision 1)
@@ -0,0 +1,98 @@
+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;
+import scriptbuilder.structures.events.ScriptEventInterface;
+
+/**
+ * Draws the icons present in one timeslice, in one incident.
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ * @author Bryan McGuffin
+ */
+public class TimeSliceDrawer
+{
+
+    /**
+     * The icon which indicates that there are events present in this timeSlice.
+     */
+    private static Image sliceEventImage = null;
+
+    /**
+     * The default zoom level.
+     */
+    public static int zoom = 20;
+
+    /**
+     * Get the icon to use whenever events are present in the slice. If we don't
+     * already have a copy, harvest it from a file.
+     *
+     * @return The existing copy of Event.png
+     */
+    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;
+    }
+
+    /**
+     * Draw the events in this timeslice. If any exist, draw the slice event
+     * image. If the incident isn't collapsed, draw the event icons as well.
+     *
+     * @param g2d the graphics component
+     * @param slice the timeSlice to draw
+     * @param collapsed if true, don't draw the event icons
+     */
+    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;
+                }
+
+                ScriptEventInterface 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: /trunk/src/scriptbuilder/gui/ScriptBuilderFrame.form
===================================================================
--- /trunk/src/scriptbuilder/gui/ScriptBuilderFrame.form	(revision 1)
+++ /trunk/src/scriptbuilder/gui/ScriptBuilderFrame.form	(revision 1)
@@ -0,0 +1,2139 @@
+<?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="editable" type="boolean" value="false"/>
+            <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
+              <Color blue="0" green="0" red="0" type="rgb"/>
+            </Property>
+          </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="editable" type="boolean" value="false"/>
+            <Property name="columns" type="int" value="20"/>
+            <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="generateNoiseMenu">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Noise"/>
+          </Properties>
+          <SubComponents>
+            <MenuItem class="javax.swing.JMenuItem" name="generateNoiseOption">
+              <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="generateNoiseOptionActionPerformed"/>
+              </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>
+        <Menu class="javax.swing.JMenu" name="jMenu2">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="XML"/>
+          </Properties>
+          <SubComponents>
+            <MenuItem class="javax.swing.JMenuItem" name="XMLImportBtn">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Import from XML"/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="XMLImportBtnActionPerformed"/>
+              </Events>
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="XMLExportBtn">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Export to XML"/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="XMLExportBtnActionPerformed"/>
+              </Events>
+            </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"/>
+    <SyntheticProperty name="generateCenter" type="boolean" value="false"/>
+  </SyntheticProperties>
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+  </AuxValues>
+
+  <Layout>
+    <DimensionLayout dim="0">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" attributes="0">
+              <EmptySpace 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" max="-2" attributes="1"/>
+                          <Component id="incidentEventsPanel" alignment="0" min="-2" 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="0" 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: /trunk/src/scriptbuilder/gui/ScriptBuilderGuiConstants.java
===================================================================
--- /trunk/src/scriptbuilder/gui/ScriptBuilderGuiConstants.java	(revision 1)
+++ /trunk/src/scriptbuilder/gui/ScriptBuilderGuiConstants.java	(revision 1)
@@ -0,0 +1,72 @@
+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.*;
+
+/**
+ * Global constants for the script builder. 
+ * 
+ * @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: /trunk/src/scriptbuilder/gui/ExtensionFileFilter.java
===================================================================
--- /trunk/src/scriptbuilder/gui/ExtensionFileFilter.java	(revision 1)
+++ /trunk/src/scriptbuilder/gui/ExtensionFileFilter.java	(revision 1)
@@ -0,0 +1,117 @@
+package scriptbuilder.gui;
+
+import java.io.File;
+
+import javax.swing.filechooser.FileFilter;
+
+/**
+ * Filters files based on extension. Multiple extensions can be designated as
+ * valid.
+ *
+ * @author Greg Eddington
+ * @author Bryan McGuffin
+ */
+public class ExtensionFileFilter extends FileFilter
+{
+
+    /**
+     * The description of the valid extensions.
+     */
+    String description;
+
+    /**
+     * All valid file extensions.
+     */
+    String extensions[];
+
+    /**
+     * Constructor for a single file extension. Don't include the period in the
+     * entry; that is, if the valid extension is .jpg, the extension parameter
+     * should be "jpg".
+     *
+     * @param description The extension description
+     * @param extension the valid file extension
+     */
+    public ExtensionFileFilter(String description, String extension)
+    {
+        this(description, new String[]
+        {
+            extension
+        });
+    }
+
+    /**
+     * Constructor for an array of one or more file extensions. Don't include
+     * the period in each entry; that is, if a valid extension is .jpg, the
+     * corresponding entry in the array should be "jpg".
+     *
+     * @param description The extension description
+     * @param extensions an array of valid file extensions
+     */
+    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);
+    }
+
+    /**
+     * Transform all extensions to lowercase.
+     *
+     * @param array the array of extension strings
+     */
+    private void toLower(String array[])
+    {
+        for (int i = 0, n = array.length; i < n; i++)
+        {
+            array[i] = array[i].toLowerCase();
+        }
+    }
+
+    /**
+     * Getter for the description of the extension
+     *
+     * @return
+     */
+    @Override
+    public String getDescription()
+    {
+        return description;
+    }
+
+    /**
+     * Determine whether the given file is valid based on its extension.
+     *
+     * @param file The file to be checked
+     * @return true if the extension on the file is in this filter's list of
+     * valid extensions, false otherwise
+     */
+    @Override
+    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: /trunk/src/scriptbuilder/gui/panels/TimeStampPanel.java
===================================================================
--- /trunk/src/scriptbuilder/gui/panels/TimeStampPanel.java	(revision 1)
+++ /trunk/src/scriptbuilder/gui/panels/TimeStampPanel.java	(revision 1)
@@ -0,0 +1,125 @@
+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;
+
+/**
+ * Represents the timestamp bar at the top of the GUI timeline. Displays
+ * timestamps at significant intervals. Updates based on zoom level and scroll
+ * position.
+ *
+ * @author Greg Eddington
+ * @author Bryan McGuffin
+ */
+public class TimeStampPanel extends JPanel
+{
+
+    private int longestLength = ScriptBuilderGuiConstants.TICK_TIMELINE_SMALLEST_LENGTH;
+
+    /**
+     * Just refresh the panel.
+     *
+     * @param zoom UNUSED
+     */
+    public void setZoom(float zoom)
+    {
+        repaint();
+    }
+
+    /**
+     * Constructor.
+     */
+    public TimeStampPanel()
+    {
+        super();
+    }
+
+    /**
+     * Update the length interval and the dimensions of the panel. NOTE: This
+     * method implementation is an exact duplication of the update method in
+     * panels.TimelineTickPanel. I'm not sure if it actually accomplishes
+     * anything here.
+     *
+     * @param script The simulation script model
+     */
+    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 + incident.offset) > longestLength)
+                {
+                    longestLength = incident.length + incident.offset;
+                }
+            }
+        }
+        for (ScriptIncident i : script.incidents)
+        {
+            if (i != null && i.number == 100)
+            {
+                i.length = longestLength;
+                i.offset = 0;
+            }
+
+        }
+
+        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();
+    }
+
+    /**
+     * Refresh the panel. Draw the timestamps for the appropriate intervals
+     * based on zoom level.
+     *
+     * @param g The graphics component
+     */
+    @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: /trunk/src/scriptbuilder/gui/panels/IncidentTimelinePanel.java
===================================================================
--- /trunk/src/scriptbuilder/gui/panels/IncidentTimelinePanel.java	(revision 1)
+++ /trunk/src/scriptbuilder/gui/panels/IncidentTimelinePanel.java	(revision 1)
@@ -0,0 +1,321 @@
+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;
+import scriptbuilder.structures.events.ScriptEventInterface;
+
+/**
+ * Represents a single incident timeline in the GUI. Listens for mouse actions.
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ * @author Bryan McGuffin
+ * @version 2017/06/30
+ */
+public class IncidentTimelinePanel extends JPanel
+{
+
+    /**
+     * The incident this panel represents.
+     */
+    ScriptIncident incident;
+    /**
+     * If true, this panel is in its minimized state.
+     */
+    boolean collapsed;
+    /**
+     * If false, this panel won't be drawn.
+     */
+    boolean visible;
+    /**
+     * If true, this panel has focus.
+     */
+    boolean focused;
+
+    int cursorTime, lastSlice, x, y;
+
+    /**
+     * The map representing the properties of this incident's events. Keys:
+     * event types. Values: Properties objects for those events.
+     */
+    Map<ScriptEventType, Properties> eventTypeToPropertyMap;
+
+    /**
+     * Listener for the mouse. Receives notifications when the mouse enters,
+     * exits, moves through, or clicks inside the panel.
+     */
+    public class IncidentTimelineMouseListener extends MouseInputAdapter
+    {
+
+        /**
+         * Action to take when the mouse enters the panel. Here, the incident
+         * corresponding to this panel gains focus.
+         *
+         * @param e the mouse event
+         */
+        @Override
+        public void mouseEntered(MouseEvent e)
+        {
+            incident.setIncidentActive();
+            focused = true;
+        }
+
+        /**
+         * Action to take when the mouse leaves the panel. Here, the incident
+         * loses focus and the panel gets repainted.
+         *
+         * @param e the mouse event
+         */
+        @Override
+        public void mouseExited(MouseEvent e)
+        {
+            focused = false;
+            repaint();
+        }
+
+        /**
+         * Determine if the mouse click happened within a valid timeSlice on
+         * this incident; if so, activate the Editor window for that timeSlice.
+         *
+         * @param e the mouse event
+         */
+        @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);
+            newSlice *= ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION;
+            /**
+             * Check if click is out of bounds *
+             */
+            if (incident.slices.get(newSlice) == null || incident == null
+                    || newSlice < 0)
+            {
+                return;
+            }
+
+            for (ScriptEventInterface se : incident.slices.get(newSlice).events)
+            {
+                ed.addProperty(eventTypeToPropertyMap.get(se.getScriptEventType()), se);
+            }
+
+            /**
+             * Add a new icon if left mouse button was clicked *
+             */
+            if (e.getButton() == MouseEvent.BUTTON1)
+            {
+                if (f.currentEventType != null)
+                {
+                    ScriptEventInterface s = ScriptEvent.factoryByType(f.currentEventType);
+                    ed.addProperty(eventTypeToPropertyMap.get(f.currentEventType), s);
+                    incident.slices.get(newSlice).addEvent(s);
+                    f.update(f.getScript(), f.getScript());
+                }
+            }
+
+            ed.setVisible(true);
+        }
+
+        /**
+         * Determine if the mouse is now hovering over a valid timeslice; if so,
+         * alter tooltip text and info window text to reflect the new timeslice.
+         *
+         * @param e the mouse event
+         */
+        @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);
+                newSlice *= ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION;
+                if (newSlice >= 0 && incident.slices.get(newSlice) != null)
+                {
+                    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();
+        }
+    }
+
+    /**
+     * Constructor. Generates a HashMap of all possible event types.
+     */
+    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);
+    }
+
+    /**
+     * Update the panel if it's changed collapsed status. Redraw it with the
+     * correct dimensions for its status.
+     *
+     * @param incident the incident this panel represents
+     */
+    public void timelinePanelUpdate(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.getSlices())
+                {
+                    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();
+    }
+
+    /**
+     * Redraw this panel and all the icons inside it. If user is holding an
+     * event, draw that icon under the mouse.
+     *
+     * @param g the graphics component
+     */
+    @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: /trunk/src/scriptbuilder/gui/panels/IncidentNumberPanel.java
===================================================================
--- /trunk/src/scriptbuilder/gui/panels/IncidentNumberPanel.java	(revision 1)
+++ /trunk/src/scriptbuilder/gui/panels/IncidentNumberPanel.java	(revision 1)
@@ -0,0 +1,215 @@
+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;
+
+/**
+ * Displays the Incident ID number and name. Holds the button to toggle
+ * collapsed state.
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ * @author Bryan McGuffin
+ */
+public class IncidentNumberPanel extends JPanel
+{
+
+    ScriptIncident incident;
+    boolean visible;
+    public boolean collapsed = false;
+    private static Image collapseImage = null, expandImage = null;
+
+    /**
+     * Get the icon to use for the "collapse" button.
+     *
+     * @return Collapse.png
+     */
+    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;
+    }
+
+    /**
+     * Get the icon to use for the "expand" button.
+     *
+     * @return Expand.png
+     */
+    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;
+    }
+
+    /**
+     * Listener for the mouse. Receives notifications if the mouse is clicked
+     * inside the button.
+     */
+    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);
+
+        /**
+         * If the click occurs inside the icon borders, toggle the collapsed
+         * state.
+         *
+         * @param e the mouse event
+         */
+        @Override
+        public void mouseClicked(MouseEvent e)
+        {
+            if (collapseExpandButtonShape.contains(e.getX(), e.getY()))
+            {
+                incident.setCollapsed(!collapsed);
+            }
+        }
+    }
+
+    /**
+     * Constructor. Sets up the mouse listener.
+     */
+    public IncidentNumberPanel()
+    {
+        super();
+
+        // Add the mouse listener
+        IncidentNumberMouseListener mouseListener
+                = new IncidentNumberMouseListener();
+        addMouseMotionListener(mouseListener);
+        addMouseListener(mouseListener);
+    }
+
+    /**
+     * Update the dimensions of the panel.
+     *
+     * @param incident The incident to be represented by this panel.
+     */
+    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.getSlices())
+                {
+                    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();
+    }
+
+    /**
+     * Refresh the panel. Choose button icon depending on collapsed state.
+     *
+     * @param g the graphics component
+     */
+    @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: /trunk/src/scriptbuilder/gui/panels/IncidentsPanel.java
===================================================================
--- /trunk/src/scriptbuilder/gui/panels/IncidentsPanel.java	(revision 1)
+++ /trunk/src/scriptbuilder/gui/panels/IncidentsPanel.java	(revision 1)
@@ -0,0 +1,61 @@
+package scriptbuilder.gui.panels;
+
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.util.List;
+import javax.swing.JPanel;
+import scriptbuilder.structures.SimulationScript;
+
+/**
+ * Represents the underlying panel for the main GUI timeline. Contains all the
+ * timeline panels which sit on top of each other. May be unused in current
+ * implementation.
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ * @author Bryan McGuffin
+ */
+public class IncidentsPanel extends JPanel
+{
+
+    private SimulationScript script;
+    private TimelineTickPanel timelineTickPanel;
+    private List<IncidentTimelinePanel> incidentPanels;
+    private List<IncidentNumberPanel> numberPanels;
+
+    /**
+     * Install the script model into this object.
+     *
+     * @param script
+     */
+    public void setScript(SimulationScript script)
+    {
+        this.script = script;
+
+        timelineTickPanel.update(script);
+    }
+
+    /**
+     * Constructor. Set up new timeline tick panel.
+     */
+    public IncidentsPanel()
+    {
+        super();
+
+        timelineTickPanel = new TimelineTickPanel();
+        this.add(timelineTickPanel);
+    }
+
+    /**
+     * Refresh the timelineTickPanel.
+     *
+     * @param g Graphics component
+     */
+    @Override
+    public void paint(Graphics g)
+    {
+        super.paint(g);
+
+        Graphics2D g2d = (Graphics2D) g;
+        timelineTickPanel.paint(g);
+    }
+}
Index: /trunk/src/scriptbuilder/gui/panels/TimelineTickPanel.java
===================================================================
--- /trunk/src/scriptbuilder/gui/panels/TimelineTickPanel.java	(revision 1)
+++ /trunk/src/scriptbuilder/gui/panels/TimelineTickPanel.java	(revision 1)
@@ -0,0 +1,192 @@
+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;
+
+/**
+ * Represents the underlying panel on the main timeline. All the
+ * IncidentTimelinePanel objects sit over it. This panel draws all the
+ * per-minute ticks on the timeline, and adjusts and scales them as necessary.
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ * @author Bryan McGuffin
+ */
+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();
+    }
+
+    /**
+     * Listener for the mouse. Is notified when the mouse enters, exits, or
+     * moves around on the panel.
+     */
+    public class TimelineTickMouseListener extends MouseInputAdapter
+    {
+
+        /**
+         * When the mouse enters the panel, the panel gets focus.
+         *
+         * @param e the mouse event
+         */
+        @Override
+        public void mouseEntered(MouseEvent e)
+        {
+            focused = true;
+        }
+
+        /**
+         * When the mouse leaves the panel, the panel loses focus and refreshes.
+         *
+         * @param e the mouse event
+         */
+        @Override
+        public void mouseExited(MouseEvent e)
+        {
+            focused = false;
+            repaint();
+        }
+
+        /**
+         * When the mouse moves around in the panel, the panel refreshes and
+         * updates its mouse tracker.
+         *
+         * @param e
+         */
+        @Override
+        public void mouseMoved(MouseEvent e)
+        {
+            x = e.getX();
+            y = e.getY();
+
+            repaint();
+        }
+    }
+
+    /**
+     * Constructor. Set up the mouse listener.
+     */
+    public TimelineTickPanel()
+    {
+        super();
+
+        TimelineTickMouseListener mouseListener
+                = new TimelineTickMouseListener();
+        addMouseMotionListener(mouseListener);
+        addMouseListener(mouseListener);
+    }
+
+    /**
+     * Update the panel's dimensions based on number of events, zoom level, and
+     * which events are collapsed.
+     *
+     * @param script The main script model
+     */
+    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 + incident.offset) > longestLength)
+                {
+                    longestLength = incident.length + incident.offset;
+                }
+            }
+        }
+
+        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();
+    }
+
+    /**
+     * Refresh the panel. Redraw the ticks based on zoom level, panel
+     * dimensions, and offset. If the user is trying to add an event, draw that
+     * event's icon under the mouse.
+     *
+     * @param g The graphics component
+     */
+    @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: /trunk/src/scriptbuilder/gui/ScriptBuilderFrame.java
===================================================================
--- /trunk/src/scriptbuilder/gui/ScriptBuilderFrame.java	(revision 1)
+++ /trunk/src/scriptbuilder/gui/ScriptBuilderFrame.java	(revision 1)
@@ -0,0 +1,2923 @@
+/*
+ * 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;
+import scriptbuilder.structures.events.ScriptEventInterface;
+
+/**
+ * GUI for the script builder. Contains all panels and editor elements. Performs
+ * updates to reflect script model, which it observes.
+ *
+ * @author Greg Eddington
+ * @author Bryan McGuffin
+ */
+public class ScriptBuilderFrame extends javax.swing.JFrame implements Observer
+{
+
+    /**
+     * The script model.
+     */
+    private SimulationScript script;
+    /**
+     * The current type of selected event.
+     */
+    public ScriptEventType currentEventType;
+    /**
+     * A list of all the event type buttons.
+     */
+    private ArrayList<JButton> eventButtons = null;
+
+    /**
+     * True if we are currently editing an incident.
+     */
+    private boolean editingIncident;
+    /**
+     * Index of the previous incident.
+     */
+    int oldIncidentIndex;
+
+    /**
+     * Get the script currently in use.
+     *
+     * @return the script model object
+     */
+    public SimulationScript getScript()
+    {
+        System.out.println("Change");
+        return script;
+    }
+
+    /**
+     * Listener for the scroll pane.
+     */
+    class MyAdjustmentListener implements AdjustmentListener
+    {
+
+        /**
+         * If the incident timeline is scrolled horizontally, the timestamp
+         * panel is updated to reflect it.
+         *
+         * @param evt the adjustment event
+         */
+        @Override
+        public void adjustmentValueChanged(AdjustmentEvent evt)
+        {
+            if (evt.getAdjustable().getOrientation() == Adjustable.HORIZONTAL)
+            {
+                timeStampScrollPane.getHorizontalScrollBar()
+                        .setValue(timelinesScrollPane.getHorizontalScrollBar().getValue());
+            }
+            else
+            {
+                // Event from vertical scrollbar
+            }
+
+            repaint();
+        }
+    }
+
+    /**
+     * Listener for key presses. Used for hotkeys for different event types.
+     */
+    private class TimelineKeyListener implements KeyListener
+    {
+
+        /**
+         * If a hotkey is pressed, select that type of event.
+         *
+         * @param e the key event
+         */
+        @Override
+        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();
+        }
+
+        /**
+         * Take no action upon key release.
+         *
+         * @param e the key event
+         */
+        @Override
+        public void keyReleased(KeyEvent e)
+
+        {
+        }
+
+        /**
+         * Take no action upon key release.
+         *
+         * @param e the key event
+         */
+        @Override
+        public void keyTyped(KeyEvent e)
+        {
+        }
+    }
+
+    /**
+     * Constructor. Prep new script model, initialize the GUI, and add listeners
+     * for all buttons.
+     */
+    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);
+    }
+
+    /**
+     * Update the GUI to reflect the model. If the script changed, update all
+     * the incident panels. If a timeslice changed, add any new events to the
+     * model. If an incident gained focus, update the incident info screen to
+     * display its details.
+     *
+     * @param o The observed object
+     * @param arg Either the script model or an incident event, depending on who
+     * called this update
+     */
+    @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.timelinePanelUpdate(script.incidents.get(0));
+            incidentTimelinePanel2.timelinePanelUpdate(script.incidents.get(1));
+            incidentTimelinePanel3.timelinePanelUpdate(script.incidents.get(2));
+            incidentTimelinePanel4.timelinePanelUpdate(script.incidents.get(3));
+            incidentTimelinePanel5.timelinePanelUpdate(script.incidents.get(4));
+            incidentTimelinePanel6.timelinePanelUpdate(script.incidents.get(5));
+            incidentTimelinePanel7.timelinePanelUpdate(script.incidents.get(6));
+            incidentTimelinePanel8.timelinePanelUpdate(script.incidents.get(7));
+            incidentTimelinePanel9.timelinePanelUpdate(script.incidents.get(8));
+            incidentTimelinePanel10.timelinePanelUpdate(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 (ScriptEventInterface 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();
+        generateNoiseMenu = new javax.swing.JMenu();
+        generateNoiseOption = new javax.swing.JMenuItem();
+        helpMenu = new javax.swing.JMenu();
+        helpTutorial = new javax.swing.JMenuItem();
+        helpAbout = new javax.swing.JMenuItem();
+        jMenu2 = new javax.swing.JMenu();
+        XMLImportBtn = new javax.swing.JMenuItem();
+        XMLExportBtn = 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.setEditable(false);
+        incidentColorField.setBackground(new java.awt.Color(0, 0, 0));
+
+        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)); // NOI18N
+        jLabel13.setText("Radio Chatter: ");
+
+        jLabel14.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
+        jLabel14.setText("Lane Closures:");
+
+        jLabel15.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
+        jLabel15.setText("TMCAL Logs:");
+
+        jTextArea1.setEditable(false);
+        jTextArea1.setColumns(20);
+        jTextArea1.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
+        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)); // NOI18N
+        jLabel16.setText("Background Noise: ");
+
+        jLabel17.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
+        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, 0, 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);
+
+        generateNoiseMenu.setText("Noise");
+
+        generateNoiseOption.setText("Generate Noise...");
+        generateNoiseOption.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                generateNoiseOptionActionPerformed(evt);
+            }
+        });
+        generateNoiseMenu.add(generateNoiseOption);
+
+        scriptBuilderMenuBar.add(generateNoiseMenu);
+
+        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);
+
+        jMenu2.setText("XML");
+
+        XMLImportBtn.setText("Import from XML");
+        XMLImportBtn.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                XMLImportBtnActionPerformed(evt);
+            }
+        });
+        jMenu2.add(XMLImportBtn);
+
+        XMLExportBtn.setText("Export to XML");
+        XMLExportBtn.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                XMLExportBtnActionPerformed(evt);
+            }
+        });
+        jMenu2.add(XMLExportBtn);
+
+        scriptBuilderMenuBar.add(jMenu2);
+
+        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, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(incidentEventsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, 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
+
+    /**
+     * Scale the timeline width based on zoom slider position.
+     *
+     * @param evt the state change event
+     */
+    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
+
+    /**
+     * If cancel button is pressed, close radio event editor
+     *
+     * @param evt the button press event
+     */
+    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
+
+    /**
+     * Executed when the "OK" button is pressed on the Incident editor. If
+     * incident is new, and is valid, adds it to the model and updates. If
+     * editing existing incident, verifies changes are valid and applies them.
+     * Then closes editor window.
+     *
+     * @param evt the button press event
+     */
+    private void incidentOkButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_incidentOkButtonActionPerformed
+        if (!editingIncident)
+        {
+            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(),
+                            script));
+            script.incidents.get(indx).length = (Integer) addIncidentLength.getValue() * 60;
+            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(),
+                            script));
+            script.incidents.get(oldIncidentIndex).length = (Integer) addIncidentLength.getValue() * 60;
+            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
+
+    /**
+     * Closes editor window upon click of cancel button.
+     *
+     * @param evt the button press event
+     */
+    private void incidentCancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_incidentCancelButtonActionPerformed
+        incidentFrame.setVisible(false);
+    }//GEN-LAST:event_incidentCancelButtonActionPerformed
+
+    /**
+     * Opens incident editor window and preps for addition of new incident, upon
+     * click of "New Incident" menu option.
+     *
+     * @param evt the button press event
+     */
+    private void newIncidentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newIncidentActionPerformed
+        editingIncident = 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
+
+    /**
+     * Deselects new event type upon click of blank "select" button.
+     *
+     * @param evt the button press event
+     */
+    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
+
+    /**
+     * Selects CAD_EVENT as the current type of new event, upon click of "CAD
+     * Event" button.
+     *
+     * @param evt the button press event
+     */
+    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
+    /**
+     * Selects CCTV_EVENT as the current type of new event, upon click of "CCTV
+     * Event" button.
+     *
+     * @param evt the button press event
+     */
+    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
+    /**
+     * Selects CHP_RADIO_EVENT as the current type of new event, upon click of
+     * "CHP Radio Event" button.
+     *
+     * @param evt the button press event
+     */
+    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
+
+    /**
+     * Upon click of "Open file" menu option, opens a window to load a new .sim
+     * file.
+     *
+     * @param evt the button press event
+     */
+    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
+
+    /**
+     * Upon click of "Save as" menu option, opens a window to choose a .sim file
+     * to save this as.
+     *
+     * @param evt the button press event
+     */
+    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
+
+    /**
+     * Upon click of "Save" menu option, opens a window to choose a .sim file to
+     * save this as.
+     *
+     * @param evt the button press event
+     */
+    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
+
+    /**
+     * Upon click of "Edit incident" menu option, brings up a dropdown menu of
+     * all existing incidents. Once an incident is selected, opens incident
+     * editor window with that event's details loaded.
+     *
+     * @param evt the button press event
+     */
+    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)
+        {
+            editingIncident = 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
+
+    /**
+     * Brings up the noise generation screen upon click of the "Generate Noise"
+     * menu option.
+     *
+     * @param evt the button press event
+     */
+    private void generateNoiseOptionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateNoiseOptionActionPerformed
+        addNoiseFrame.setVisible(true);
+    }//GEN-LAST:event_generateNoiseOptionActionPerformed
+
+    /**
+     * Hides the noise generation screen upon click of the "Cancel" button.
+     *
+     * @param evt the button press event
+     */
+    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
+        addNoiseFrame.setVisible(false);
+    }//GEN-LAST:event_jButton1ActionPerformed
+
+    /**
+     * Generates random noise upon click of the "OK" button, then hides the
+     * noise generation screen.
+     *
+     * @param evt the button press event
+     */
+    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(ScriptEvent.factoryByType(eventTypes[e % eventTypes.length]));
+        }
+
+        addNoiseFrame.setVisible(false);
+
+        update(script, script);
+}//GEN-LAST:event_jButton2ActionPerformed
+
+    /**
+     * Allow the user to pick an incident from a dropdown, then save it to an
+     * XML file.
+     *
+     * @param evt the button press event
+     */
+    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
+    /**
+     * Selects WITNESS_EVENT as the current type of new event, upon click of
+     * "Witness Event" button.
+     *
+     * @param evt the button press event
+     */
+    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
+    /**
+     * Selects UNIT_EVENT as the current type of new event, upon click of "Unit
+     * Event" button.
+     *
+     * @param evt the button press event
+     */
+    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
+    /**
+     * Selects TOW_EVENT as the current type of new event, upon click of "TOW
+     * Event" button.
+     *
+     * @param evt the button press event
+     */
+    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
+    /**
+     * Selects PARAMICS_EVENT as the current type of new event, upon click of
+     * "Paramics Event" button.
+     *
+     * @param evt the button press event
+     */
+    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
+    /**
+     * Selects MAINTENANCE_RADIO_EVENT as the current type of new event, upon
+     * click of "Maintenance Radio Event" button.
+     *
+     * @param evt the button press event
+     */
+    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
+    /**
+     * Selects ATMS_EVAL_EVENT as the current type of new event, upon click of
+     * "ATMS Evaluation Event" button.
+     *
+     * @param evt the button press event
+     */
+    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
+    /**
+     * Selects TELEPHONE_EVENT as the current type of new event, upon click of
+     * "Telephone Event" button.
+     *
+     * @param evt the button press event
+     */
+    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
+    /**
+     * Selects TMT_RADIO_EVENT as the current type of new event, upon click of
+     * "TMT Radio Event" button.
+     *
+     * @param evt the button press event
+     */
+    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
+    /**
+     * Selects CMS_EVAL_EVENT as the current type of new event, upon click of
+     * "CMS Evaluation Event" button.
+     *
+     * @param evt the button press event
+     */
+    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
+    /**
+     * Selects CAD_EVAL_EVENT as the current type of new event, upon click of
+     * "CAD Evaluation Event" button.
+     *
+     * @param evt the button press event
+     */
+    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
+    /**
+     * Selects ACTIVITY_LOG_EVAL_EVENT as the current type of new event, upon
+     * click of "Activity Log Evaluation Event" button.
+     *
+     * @param evt the button press event
+     */
+    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
+    /**
+     * Selects RADIO_EVAL_EVENT as the current type of new event, upon click of
+     * "Radio Evaluation Event" button.
+     *
+     * @param evt the button press event
+     */
+    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
+    /**
+     * Selects FACILITATOR_EVAL_EVENT as the current type of new event, upon
+     * click of "Facilitator Evaluation Event" button.
+     *
+     * @param evt the button press event
+     */
+    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
+    /**
+     * Selects AUDIO_EVENT as the current type of new event, upon click of
+     * "Audio Event" button.
+     *
+     * @param evt the button press event
+     */
+    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
+
+    /**
+     * Increases zoom level upon click of the "Zoom in" icon.
+     *
+     * @param evt the mouse event
+     */
+    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
+    /**
+     * Decreases zoom level upon click of the "Zoom out" icon.
+     *
+     * @param evt the mouse event
+     */
+    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
+
+    private void XMLExportBtnActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_XMLExportBtnActionPerformed
+    {//GEN-HEADEREND:event_XMLExportBtnActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_XMLExportBtnActionPerformed
+    /**
+     * Upon click of the "Import From XML" menu option, allows user to choose an
+     * XML script, and loads it into the script model.
+     *
+     * @param evt the button press event
+     */
+    private void XMLImportBtnActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_XMLImportBtnActionPerformed
+    {//GEN-HEADEREND:event_XMLImportBtnActionPerformed
+        JFileChooser fc = new JFileChooser();
+
+        fc.setFileFilter(new ExtensionFileFilter("Simulation Script XML (.xml)",
+                new String[]
+                {
+                    "xml"
+                }));
+        if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
+        {
+            System.out.println(fc.getSelectedFile().getName());
+        }
+        script.loadScriptFromFile(fc.getSelectedFile());
+    }//GEN-LAST:event_XMLImportBtnActionPerformed
+
+    /**
+     * Runs the script builder.
+     * 
+     * @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.JMenuItem XMLExportBtn;
+    private javax.swing.JMenuItem XMLImportBtn;
+    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.JMenu generateNoiseMenu;
+    private javax.swing.JMenuItem generateNoiseOption;
+    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 jMenu2;
+    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: /trunk/src/old/TimelinePanel.java
===================================================================
--- /trunk/src/old/TimelinePanel.java	(revision 1)
+++ /trunk/src/old/TimelinePanel.java	(revision 1)
@@ -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: /trunk/src/old/MouseWatcherPainter.java
===================================================================
--- /trunk/src/old/MouseWatcherPainter.java	(revision 1)
+++ /trunk/src/old/MouseWatcherPainter.java	(revision 1)
@@ -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;
+//    }
+//}
Index: /trunk/src/event/editor/RemoveablePanel.java
===================================================================
--- /trunk/src/event/editor/RemoveablePanel.java	(revision 1)
+++ /trunk/src/event/editor/RemoveablePanel.java	(revision 1)
@@ -0,0 +1,12 @@
+package event.editor;
+
+import java.awt.event.*;
+import scriptbuilder.structures.events.ScriptEventInterface;
+
+public interface RemoveablePanel
+{
+
+    
+
+    void setRemoveListener(ActionListener listener);
+}
Index: /trunk/src/event/editor/ParamicsPanel.form
===================================================================
--- /trunk/src/event/editor/ParamicsPanel.form	(revision 1)
+++ /trunk/src/event/editor/ParamicsPanel.form	(revision 1)
@@ -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="TypeDropdown" alignment="1" pref="597" max="32767" attributes="1"/>
+                          <Component id="StatusDropdown" alignment="0" pref="597" max="32767" attributes="1"/>
+                          <Component id="LocationDropdown" 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="LocationDropdown" 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="StatusDropdown" 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="TypeDropdown" 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="StatusDropdown">
+      <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="TypeDropdown">
+      <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="LocationDropdown">
+      <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: /trunk/src/event/editor/TelephonePanel.java
===================================================================
--- /trunk/src/event/editor/TelephonePanel.java	(revision 1)
+++ /trunk/src/event/editor/TelephonePanel.java	(revision 1)
@@ -0,0 +1,213 @@
+package event.editor;
+
+import java.awt.event.*;
+import javax.swing.*;
+import java.util.*;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.*;
+import scriptbuilder.structures.events.*;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class TelephonePanel extends javax.swing.JPanel implements ScriptEventEditorPanel
+{
+
+    private ActionListener removeListener;
+    private JTable dialogTable;
+    private TelephoneEvent event;
+    HashMap<JButton, String> buttonMap;
+
+    /**
+     * Creates new form TelephonePanel
+     */
+    public TelephonePanel()
+    {
+        initComponents();
+        buttonMap = new HashMap<JButton, String>();
+        buttonMap.put(addInstructorButton, "Instructor");
+        buttonMap.put(addStudentButton, "Student");
+        dialogTable = GenericTable.genericizeTable(jScrollPane1, buttonMap, deleteSelectedButton);
+    }
+
+    public void getEventObject(ScriptEventInterface sei)
+    {
+        event = (TelephoneEvent) sei;
+
+        for (int i = 0; i < event.roles.size(); i++)
+        {
+            ((MyTableModel) dialogTable.getModel()).addRow(event.roles.get(i), event.lines.get(i));
+            if (!event.roles.get(i).equals("Student"))
+            {
+                txtInstructorRole.setText(event.roles.get(i));
+            }
+        }
+        txtInstructorRole.addKeyListener(new KeyListener()
+        {
+            public void keyTyped(KeyEvent e)
+            {
+            }
+
+            public void keyPressed(KeyEvent e)
+            {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER)
+                {
+                    buttonMap.put(addInstructorButton, txtInstructorRole.getText());
+                }
+            }
+
+            public void keyReleased(KeyEvent e)
+            {
+            }
+        });
+        buttonMap.put(addInstructorButton, txtInstructorRole.getText());
+        addInstructorButton.addActionListener(new ActionListener()
+        {
+
+            public void actionPerformed(ActionEvent e)
+            {
+                int i = event.roles.size();
+                event.roles.add(txtInstructorRole.getText());
+                event.lines.add("");
+            }
+        });
+        addStudentButton.addActionListener(new ActionListener()
+        {
+            public void actionPerformed(ActionEvent e)
+            {
+                int i = event.roles.size();
+                event.roles.add("Student");
+                event.lines.add("");
+            }
+        });
+        dialogTable.getModel().addTableModelListener(new TableModelListener()
+        {
+
+            public void tableChanged(TableModelEvent e)
+            {
+                if (e.getType() == TableModelEvent.UPDATE)
+                {
+                    event.roles.set(e.getLastRow(), dialogTable.getModel().getValueAt(e.getLastRow(), 0).toString());
+                    event.lines.set(e.getLastRow(), dialogTable.getModel().getValueAt(e.getLastRow(), 1).toString());
+                }
+                if(e.getType() == TableModelEvent.DELETE)
+                {
+                    event.roles.remove(e.getLastRow());
+                    event.lines.remove(e.getLastRow());
+                }
+            }
+        });
+
+    }
+
+    public void update(Observable o, Object arg)
+    {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    /**
+     * 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();
+        txtInstructorRole = 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");
+
+        txtInstructorRole.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(txtInstructorRole, 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(txtInstructorRole, 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.JButton removeButton;
+    private javax.swing.JTextField txtInstructorRole;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /trunk/src/event/editor/MaintenanceRadioPanel.form
===================================================================
--- /trunk/src/event/editor/MaintenanceRadioPanel.form	(revision 1)
+++ /trunk/src/event/editor/MaintenanceRadioPanel.form	(revision 1)
@@ -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: /trunk/src/event/editor/TowPanel.form
===================================================================
--- /trunk/src/event/editor/TowPanel.form	(revision 1)
+++ /trunk/src/event/editor/TowPanel.form	(revision 1)
@@ -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="txtBeat" alignment="0" pref="396" max="32767" attributes="0"/>
+                          <Component id="txtCompany" alignment="0" pref="396" max="32767" attributes="0"/>
+                          <Component id="txtConfirmationNumber" alignment="0" pref="396" max="32767" attributes="0"/>
+                          <Component id="txtPublicNumber" 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="txtCompany" 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="txtConfirmationNumber" 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="txtPublicNumber" 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="txtBeat" 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="txtCompany">
+    </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="txtConfirmationNumber">
+      <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="txtPublicNumber">
+      <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="txtBeat">
+    </Component>
+    <Component class="javax.swing.JLabel" name="help">
+    </Component>
+  </SubComponents>
+</Form>
Index: /trunk/src/event/editor/WitnessPanel.java
===================================================================
--- /trunk/src/event/editor/WitnessPanel.java	(revision 1)
+++ /trunk/src/event/editor/WitnessPanel.java	(revision 1)
@@ -0,0 +1,224 @@
+package event.editor;
+
+import java.awt.event.*;
+import java.util.Observable;
+import java.util.StringTokenizer;
+import scriptbuilder.structures.events.ScriptEventInterface;
+import scriptbuilder.structures.events.WitnessEvent;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class WitnessPanel extends javax.swing.JPanel implements RemoveablePanel, ScriptEventEditorPanel
+{
+
+    private ActionListener removeListener;
+    private WitnessEvent event;
+
+    /**
+     * Creates new form WitnessPanel
+     */
+    public WitnessPanel()
+    {
+        initComponents();
+    }
+
+    public void setRemoveListener(ActionListener listener)
+    {
+        removeListener = listener;
+    }
+
+    
+    public void getEventObject(ScriptEventInterface sei)
+    {
+        event = (WitnessEvent) sei;
+        StringTokenizer st = new StringTokenizer(event.witnessName);
+        txtFirstName.setText(st.nextToken());
+        txtFirstName.addKeyListener(new KeyListener()
+        {
+            public void keyTyped(KeyEvent e)
+            {
+            }
+            public void keyPressed(KeyEvent e)
+            {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER)
+                {
+                    event.witnessName = txtFirstName.getText() + " "+txtLastName.getText();
+                }
+            }
+            public void keyReleased(KeyEvent e)
+            {
+            }
+        });
+        txtLastName.setText("");
+        while (st.hasMoreTokens())
+        {
+            txtLastName.setText(txtLastName.getText() + st.nextToken());
+        }
+        txtLastName.addKeyListener(new KeyListener()
+        {
+            public void keyTyped(KeyEvent e)
+            {
+            }
+            public void keyPressed(KeyEvent e)
+            {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER)
+                {
+                    event.witnessName = txtFirstName.getText() + " "+txtLastName.getText();
+                }
+            }
+            public void keyReleased(KeyEvent e)
+            {
+            }
+        });
+        txtPhoneNumber.setText("" + event.witnessNum);
+        txtPhoneNumber.addKeyListener(new KeyListener()
+        {
+            public void keyTyped(KeyEvent e)
+            {
+            }
+            public void keyPressed(KeyEvent e)
+            {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER)
+                {
+                    event.witnessNum = txtPhoneNumber.getText();
+                }
+            }
+            public void keyReleased(KeyEvent e)
+            {
+            }
+        });
+        txtAddress.setText(event.witnessAddress);
+        txtAddress.addKeyListener(new KeyListener()
+        {
+            public void keyTyped(KeyEvent e)
+            {
+            }
+            public void keyPressed(KeyEvent e)
+            {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER)
+                {
+                    event.witnessAddress = txtAddress.getText();
+                }
+            }
+            public void keyReleased(KeyEvent e)
+            {
+            }
+        });
+    }
+
+    public void update(Observable o, Object arg)
+    {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    /**
+     * 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();
+        txtFirstName = new javax.swing.JTextField();
+        jLabel2 = new javax.swing.JLabel();
+        txtLastName = new javax.swing.JTextField();
+        jLabel3 = new javax.swing.JLabel();
+        txtAddress = new javax.swing.JTextField();
+        jLabel4 = new javax.swing.JLabel();
+        txtPhoneNumber = 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");
+
+        txtPhoneNumber.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, txtLastName, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 547, Short.MAX_VALUE)
+                            .add(txtAddress, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 547, Short.MAX_VALUE)
+                            .add(org.jdesktop.layout.GroupLayout.TRAILING, txtFirstName, 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(txtPhoneNumber, 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(txtFirstName, 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(txtLastName, 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(txtAddress, 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(txtPhoneNumber, 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.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.JTextField txtAddress;
+    private javax.swing.JTextField txtFirstName;
+    private javax.swing.JTextField txtLastName;
+    private javax.swing.JFormattedTextField txtPhoneNumber;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /trunk/src/event/editor/CMSEvaluationPanel.form
===================================================================
--- /trunk/src/event/editor/CMSEvaluationPanel.form	(revision 1)
+++ /trunk/src/event/editor/CMSEvaluationPanel.form	(revision 1)
@@ -0,0 +1,161 @@
+<?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">
+                      <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 type="102" attributes="0">
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jScrollPane1" alignment="0" 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="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="TypeDropdown" alignment="0" max="32767" attributes="1"/>
+                                  <Component id="txtLocation" alignment="0" max="32767" attributes="0"/>
+                                  <Component id="txtID" alignment="0" max="32767" attributes="1"/>
+                              </Group>
+                          </Group>
+                      </Group>
+                      <EmptySpace 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="txtID" 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="TypeDropdown" 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="txtLocation" 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="txtLocation">
+      <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="TypeDropdown">
+      <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="txtID">
+      <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"/>
+      <SubComponents>
+        <Component class="javax.swing.JTextArea" name="txtMessage">
+          <Properties>
+            <Property name="columns" type="int" value="20"/>
+            <Property name="rows" type="int" value="5"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </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: /trunk/src/event/editor/CCTVPanel.java
===================================================================
--- /trunk/src/event/editor/CCTVPanel.java	(revision 1)
+++ /trunk/src/event/editor/CCTVPanel.java	(revision 1)
@@ -0,0 +1,184 @@
+package event.editor;
+
+import java.awt.event.*;
+import java.util.Observable;
+import scriptbuilder.structures.events.CCTVEvent;
+import scriptbuilder.structures.events.ScriptEventInterface;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class CCTVPanel extends javax.swing.JPanel implements RemoveablePanel, ScriptEventEditorPanel
+{
+
+    private ActionListener removeListener;
+    private CCTVEvent event;
+
+    /**
+     * 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;
+    }
+
+    public void getEventObject(ScriptEventInterface sei)
+    {
+        event = (CCTVEvent) sei;
+        //TODO: Add listeners for text fields
+    }
+
+    public void update(Observable o, Object arg)
+    {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    /**
+     * 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: /trunk/src/event/editor/AudioPanel.java
===================================================================
--- /trunk/src/event/editor/AudioPanel.java	(revision 1)
+++ /trunk/src/event/editor/AudioPanel.java	(revision 1)
@@ -0,0 +1,212 @@
+package event.editor;
+
+import java.awt.event.*;
+import java.util.Observable;
+import javax.swing.*;
+import scriptbuilder.structures.events.AudioEvent;
+import scriptbuilder.structures.events.ScriptEventInterface;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class AudioPanel extends javax.swing.JPanel implements RemoveablePanel, ScriptEventEditorPanel
+{
+
+    private ActionListener removeListener;
+    private AudioEvent event;
+
+    /**
+     * Creates new form AudioPanel
+     */
+    public AudioPanel()
+    {
+        initComponents();
+
+    }
+
+    public void getEventObject(ScriptEventInterface sei)
+    {
+        event = (AudioEvent) sei;
+        audioFileText.setText(event.audioPath);
+        audioLengthText.setText(event.audioLength.toString());
+        audioFileText.addKeyListener(new KeyListener()
+        {
+
+            public void keyTyped(KeyEvent e)
+            {
+            }
+
+            public void keyPressed(KeyEvent e)
+            {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER)
+                {
+                    event.audioPath = audioFileText.getText();
+                }
+            }
+
+            public void keyReleased(KeyEvent e)
+            {
+            }
+        });
+        audioLengthText.addKeyListener(new KeyListener()
+        {
+
+            public void keyTyped(KeyEvent e)
+            {
+            }
+
+            public void keyPressed(KeyEvent e)
+            {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER)
+                {
+                    try
+                    {
+                        event.audioLength = Integer.parseInt(audioLengthText.getText());
+                    }
+                    catch (Exception ex)
+                    {
+
+                    }
+                }
+            }
+
+            public void keyReleased(KeyEvent e)
+            {
+            }
+        }
+        );
+    }
+
+    public void setRemoveListener(ActionListener listener)
+    {
+        removeListener = listener;
+    }
+
+    public void update(Observable o, Object arg)
+    {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    /**
+     * 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();
+        audioFileText = new javax.swing.JTextField();
+        jLabel2 = new javax.swing.JLabel();
+        audioLengthText = 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");
+
+        audioFileText.setToolTipText("The path to the audio file");
+
+        jLabel2.setText("Length");
+
+        audioLengthText.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(audioFileText, 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(audioLengthText, 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(audioFileText, 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(audioLengthText, 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)
+        {
+            audioFileText.setText(browser.getSelectedFile().getPath());
+        }
+    }//GEN-LAST:event_browse
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JTextField audioFileText;
+    private javax.swing.JFormattedTextField audioLengthText;
+    private javax.swing.JButton browseButton;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JButton removeButton;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /trunk/src/event/editor/GenericTable.java
===================================================================
--- /trunk/src/event/editor/GenericTable.java	(revision 1)
+++ /trunk/src/event/editor/GenericTable.java	(revision 1)
@@ -0,0 +1,131 @@
+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 JTable 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(), "");;
+            }
+        });
+        return dialogTable;
+    }
+
+    public static JTable genericizeTable(JScrollPane scrollPane,
+            final JComboBox types, JButton addButton, JButton removeButton,
+            String header1, String header2)
+    {
+        MyTableModel.columnNames[0] = header1;
+        MyTableModel.columnNames[1] = header2;
+
+        return GenericTable.genericizeTable(scrollPane, types, addButton, removeButton);
+    }
+
+    public static JTable 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++, "");;
+            }
+        });
+        return dialogTable;
+    }
+}
Index: /trunk/src/event/editor/GenericEvaluationPanel.java
===================================================================
--- /trunk/src/event/editor/GenericEvaluationPanel.java	(revision 1)
+++ /trunk/src/event/editor/GenericEvaluationPanel.java	(revision 1)
@@ -0,0 +1,160 @@
+package event.editor;
+
+import java.awt.event.*;
+import java.util.ArrayList;
+import java.util.Observable;
+import javax.swing.JTable;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import scriptbuilder.structures.events.EvaluationEventInterface;
+import scriptbuilder.structures.events.ScriptEventInterface;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class GenericEvaluationPanel extends javax.swing.JPanel implements RemoveablePanel, ScriptEventEditorPanel
+{
+
+    private ActionListener removeListener;
+    private EvaluationEventInterface event;
+    private JTable dialogTable;
+
+    /**
+     * Creates new form GenericEvaluation
+     */
+    public GenericEvaluationPanel()
+    {
+        initComponents();
+
+        dialogTable = GenericTable.genericizeTable(
+                scrollPane, CriteriaDropdown, addButton, deleteButton, "Scale", "Criteria");
+    }
+
+    public void setRemoveListener(ActionListener listener)
+    {
+        removeListener = listener;
+    }
+
+    public void getEventObject(ScriptEventInterface sei)
+    {
+        if (sei instanceof EvaluationEventInterface)
+        {
+            event = (EvaluationEventInterface) sei;
+            ArrayList<String> strs = event.getExpectedActions();
+            for (String s : strs)
+            {
+                ((MyTableModel) dialogTable.getModel()).addRow(
+                        CriteriaDropdown.getItemAt(0).toString(), s);
+            }
+
+        }
+        addButton.addActionListener(new ActionListener()
+        {
+
+            public void actionPerformed(ActionEvent e)
+            {
+                event.addAction("");
+            }
+        });
+        dialogTable.getModel().addTableModelListener(new TableModelListener()
+        {
+
+            public void tableChanged(TableModelEvent e)
+            {
+                if (e.getType() == TableModelEvent.UPDATE)
+                {
+                    event.updateAction(e.getLastRow(), dialogTable.getModel().getValueAt(e.getLastRow(), 1).toString());
+                }
+                if (e.getType() == TableModelEvent.DELETE)
+                {
+                    event.removeAction(e.getLastRow());
+                }
+            }
+        });
+    }
+
+    public void update(Observable o, Object arg)
+    {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    /**
+     * 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();
+        scrollPane = new javax.swing.JScrollPane();
+        txtNotes = new javax.swing.JTextArea();
+        CriteriaDropdown = 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");
+
+        scrollPane.setToolTipText("");
+
+        txtNotes.setColumns(20);
+        txtNotes.setRows(5);
+        scrollPane.setViewportView(txtNotes);
+
+        CriteriaDropdown.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Yes/No", "1-5", "1-10", "Written" }));
+        CriteriaDropdown.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, scrollPane, 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(CriteriaDropdown, 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(CriteriaDropdown, 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(scrollPane, 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.JComboBox CriteriaDropdown;
+    private javax.swing.JButton addButton;
+    private javax.swing.JButton deleteButton;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JScrollPane scrollPane;
+    private javax.swing.JTextArea txtNotes;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /trunk/src/event/editor/TelephonePanel.form
===================================================================
--- /trunk/src/event/editor/TelephonePanel.form	(revision 1)
+++ /trunk/src/event/editor/TelephonePanel.form	(revision 1)
@@ -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="txtInstructorRole" 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="txtInstructorRole" 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="txtInstructorRole">
+      <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: /trunk/src/event/editor/Editor.java
===================================================================
--- /trunk/src/event/editor/Editor.java	(revision 1)
+++ /trunk/src/event/editor/Editor.java	(revision 1)
@@ -0,0 +1,848 @@
+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.*;
+import scriptbuilder.structures.events.*;
+
+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, ScriptEventInterface se)
+    {
+        try
+        {
+            JPanel panel = (JPanel) classMap.get(property).newInstance();
+
+            final PropertyPanel propertyPanel = properties.addPropertyPanel(property, panel);
+            if (panel instanceof ScriptEventEditorPanel)
+            {
+                ((ScriptEventEditorPanel) panel).getEventObject(se);
+            }
+            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, ScriptEventInterface se)
+    {
+        model.addProperty(property, se);
+    }
+
+    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, new CCTVEvent());
+            }
+            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(" ", "")), new CCTVEvent());
+        }
+    };
+
+    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: /trunk/src/event/editor/Properties.java
===================================================================
--- /trunk/src/event/editor/Properties.java	(revision 1)
+++ /trunk/src/event/editor/Properties.java	(revision 1)
@@ -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: /trunk/src/event/editor/ScriptEventEditorPanel.java
===================================================================
--- /trunk/src/event/editor/ScriptEventEditorPanel.java	(revision 1)
+++ /trunk/src/event/editor/ScriptEventEditorPanel.java	(revision 1)
@@ -0,0 +1,19 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package event.editor;
+
+import java.util.Observer;
+import scriptbuilder.structures.events.ScriptEventInterface;
+
+/**
+ *
+ * @author Bryan McGuffin
+ */
+public interface ScriptEventEditorPanel extends Observer
+{
+
+    void getEventObject(ScriptEventInterface sei);
+}
Index: /trunk/src/event/editor/WitnessPanel.form
===================================================================
--- /trunk/src/event/editor/WitnessPanel.form	(revision 1)
+++ /trunk/src/event/editor/WitnessPanel.form	(revision 1)
@@ -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="txtLastName" alignment="1" pref="547" max="32767" attributes="0"/>
+                          <Component id="txtAddress" alignment="0" pref="547" max="32767" attributes="0"/>
+                          <Component id="txtFirstName" 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="txtPhoneNumber" 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="txtFirstName" 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="txtLastName" 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="txtAddress" 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="txtPhoneNumber" 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="txtFirstName">
+    </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="txtLastName">
+    </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="txtAddress">
+    </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="txtPhoneNumber">
+      <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: /trunk/src/event/editor/UnitPanel.java
===================================================================
--- /trunk/src/event/editor/UnitPanel.java	(revision 1)
+++ /trunk/src/event/editor/UnitPanel.java	(revision 1)
@@ -0,0 +1,247 @@
+package event.editor;
+
+import java.awt.event.*;
+import java.util.Observable;
+import scriptbuilder.structures.events.ScriptEventInterface;
+import scriptbuilder.structures.events.UnitEvent;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class UnitPanel extends javax.swing.JPanel implements RemoveablePanel, ScriptEventEditorPanel
+{
+
+    private ActionListener removeListener;
+    private UnitEvent event;
+
+    /**
+     * Creates new form UnitPanel
+     */
+    public UnitPanel()
+    {
+        initComponents();
+
+        txtUnitNumber.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;
+    }
+
+    public void getEventObject(ScriptEventInterface sei)
+    {
+        event = (UnitEvent) sei;
+        txtUnitNumber.setText(event.unitNum);
+        for (int i = 0; i < ActiveDropdown.getItemCount(); i++)
+        {
+            if (event.unitActive.equalsIgnoreCase((String) ActiveDropdown.getItemAt(i)))
+            {
+                ActiveDropdown.setSelectedIndex(i);
+            }
+        }
+        txtUnitNumber.addKeyListener(new KeyListener()
+        {
+            public void keyTyped(KeyEvent e)
+            {
+            }
+            public void keyPressed(KeyEvent e)
+            {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER)
+                {
+                    event.unitNum = txtUnitNumber.getText();
+                }
+            }
+            public void keyReleased(KeyEvent e)
+            {
+            }
+        });
+        ActiveDropdown.addActionListener(new ActionListener()
+        {
+
+            public void actionPerformed(ActionEvent e)
+            {
+                event.unitActive = ActiveDropdown.getSelectedItem().toString();
+            }
+        });
+        for (int i = 0; i < PrimaryDropdown.getItemCount(); i++)
+        {
+            if (event.unitPrimary.equalsIgnoreCase((String) PrimaryDropdown.getItemAt(i)))
+            {
+                PrimaryDropdown.setSelectedIndex(i);
+            }
+        }
+        PrimaryDropdown.addActionListener(new ActionListener()
+        {
+
+            public void actionPerformed(ActionEvent e)
+            {
+                event.unitPrimary = PrimaryDropdown.getSelectedItem().toString();
+            }
+        });
+        boolean containsItem = false;
+        for (int i = 0; i < StatusDropdown.getItemCount() && !containsItem; i++)
+        {
+            if (event.unitStatus.equalsIgnoreCase((String) StatusDropdown.getItemAt(i)))
+            {
+                StatusDropdown.setSelectedIndex(i);
+                containsItem = true;
+            }
+        }
+        if (!containsItem)
+        {
+            StatusDropdown.addItem(event.unitStatus);
+            StatusDropdown.setSelectedItem(StatusDropdown.getItemCount() - 1);
+        }
+        StatusDropdown.addActionListener(new ActionListener()
+        {
+
+            public void actionPerformed(ActionEvent e)
+            {
+                event.unitStatus = StatusDropdown.getSelectedItem().toString();
+            }
+        });
+    }
+
+    public void update(Observable o, Object arg)
+    {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    /**
+     * 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();
+        txtUnitNumber = new javax.swing.JFormattedTextField();
+        removeButton = new javax.swing.JButton();
+        jLabel2 = new javax.swing.JLabel();
+        StatusDropdown = new javax.swing.JComboBox();
+        jLabel3 = new javax.swing.JLabel();
+        PrimaryDropdown = new javax.swing.JComboBox();
+        jLabel4 = new javax.swing.JLabel();
+        ActiveDropdown = new javax.swing.JComboBox();
+        help = new javax.swing.JLabel();
+
+        jLabel1.setText("Unit Number");
+
+        txtUnitNumber.setText("  -  ");
+        txtUnitNumber.setToolTipText("");
+
+        removeButton.setText("Remove");
+        removeButton.addMouseListener(new java.awt.event.MouseAdapter()
+        {
+            public void mouseClicked(java.awt.event.MouseEvent evt)
+            {
+                removeThisProperty(evt);
+            }
+        });
+
+        jLabel2.setText("Status");
+
+        StatusDropdown.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "1098", "1097", "ENRT" }));
+
+        jLabel3.setText("Primary");
+
+        PrimaryDropdown.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "True", "False" }));
+
+        jLabel4.setText("Active");
+
+        ActiveDropdown.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(StatusDropdown, 0, 475, Short.MAX_VALUE)
+                            .add(txtUnitNumber, 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(ActiveDropdown, 0, 475, Short.MAX_VALUE)
+                            .add(PrimaryDropdown, 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(txtUnitNumber, 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(StatusDropdown, 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(PrimaryDropdown, 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(ActiveDropdown, 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.JComboBox ActiveDropdown;
+    private javax.swing.JComboBox PrimaryDropdown;
+    private javax.swing.JComboBox StatusDropdown;
+    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.JButton removeButton;
+    private javax.swing.JFormattedTextField txtUnitNumber;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /trunk/src/event/editor/CCTVPanel.form
===================================================================
--- /trunk/src/event/editor/CCTVPanel.form	(revision 1)
+++ /trunk/src/event/editor/CCTVPanel.form	(revision 1)
@@ -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: /trunk/src/event/editor/AudioPanel.form
===================================================================
--- /trunk/src/event/editor/AudioPanel.form	(revision 1)
+++ /trunk/src/event/editor/AudioPanel.form	(revision 1)
@@ -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="audioFileText" 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="audioLengthText" 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="audioFileText" 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="audioLengthText" 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="audioFileText">
+      <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="audioLengthText">
+      <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: /trunk/src/event/editor/TMTRadioPanel.java
===================================================================
--- /trunk/src/event/editor/TMTRadioPanel.java	(revision 1)
+++ /trunk/src/event/editor/TMTRadioPanel.java	(revision 1)
@@ -0,0 +1,104 @@
+package event.editor;
+
+import java.awt.event.*;
+import java.util.Observable;
+import scriptbuilder.structures.events.*;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class TMTRadioPanel extends javax.swing.JPanel implements ScriptEventEditorPanel
+{
+
+    private ActionListener removeListener;
+    private TMTRadioEvent event;
+
+    /**
+     * Creates new form TMTRadio
+     */
+    public TMTRadioPanel()
+    {
+        initComponents();
+    }
+
+    public void getEventObject(ScriptEventInterface sei)
+    {
+        event = (TMTRadioEvent) sei;
+        jTextArea1.setText(event.message);
+        jTextArea1.addKeyListener(new KeyListener()
+        {
+
+            public void keyTyped(KeyEvent e)
+            {
+            }
+
+            public void keyPressed(KeyEvent e)
+            {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER)
+                {
+                    event.message = jTextArea1.getText();
+                }
+            }
+
+            public void keyReleased(KeyEvent e)
+            {
+            }
+        });
+    }
+
+    public void update(Observable o, Object arg)
+    {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    /**
+     * 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: /trunk/src/event/editor/GenericEvaluationPanel.form
===================================================================
--- /trunk/src/event/editor/GenericEvaluationPanel.form	(revision 1)
+++ /trunk/src/event/editor/GenericEvaluationPanel.form	(revision 1)
@@ -0,0 +1,103 @@
+<?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="scrollPane" 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="CriteriaDropdown" 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="CriteriaDropdown" 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="scrollPane" 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="scrollPane">
+      <Properties>
+        <Property name="toolTipText" type="java.lang.String" value=""/>
+      </Properties>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JTextArea" name="txtNotes">
+          <Properties>
+            <Property name="columns" type="int" value="20"/>
+            <Property name="rows" type="int" value="5"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JComboBox" name="CriteriaDropdown">
+      <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: /trunk/src/event/editor/Editor.form
===================================================================
--- /trunk/src/event/editor/Editor.form	(revision 1)
+++ /trunk/src/event/editor/Editor.form	(revision 1)
@@ -0,0 +1,296 @@
+<?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"/>
+    <SyntheticProperty name="generateCenter" type="boolean" value="false"/>
+  </SyntheticProperties>
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="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: /trunk/src/event/editor/CHPRadioPanel.java
===================================================================
--- /trunk/src/event/editor/CHPRadioPanel.java	(revision 1)
+++ /trunk/src/event/editor/CHPRadioPanel.java	(revision 1)
@@ -0,0 +1,211 @@
+package event.editor;
+
+import java.awt.event.*;
+import javax.swing.*;
+import java.util.*;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import scriptbuilder.structures.events.*;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class CHPRadioPanel extends javax.swing.JPanel implements ScriptEventEditorPanel
+{
+
+    private ActionListener removeListener;
+    private CHPRadioEvent event;
+    private JTable dialogTable;
+
+    /**
+     * Creates new form CHPRadioPanel
+     */
+    public CHPRadioPanel()
+    {
+        initComponents();
+        HashMap<JButton, String> buttonMap = new HashMap<JButton, String>();
+        buttonMap.put(addDispatchButton, "Dispatch");
+        buttonMap.put(addFieldButton, "Field");
+        dialogTable = GenericTable.genericizeTable(jScrollPane1, buttonMap, deleteSelectedButton);
+    }
+
+    public void getEventObject(ScriptEventInterface sei)
+    {
+        event = (CHPRadioEvent) sei;
+        audioText.setText(event.radioFile);
+        audioText.addKeyListener(new KeyListener()
+        {
+
+            public void keyTyped(KeyEvent e)
+            {
+            }
+
+            public void keyPressed(KeyEvent e)
+            {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER)
+                {
+                    event.radioFile = audioText.getText();
+                }
+            }
+
+            public void keyReleased(KeyEvent e)
+            {
+            }
+        });
+        for (int i = 0; i < event.lines.size(); i++)
+        {
+            ((MyTableModel) dialogTable.getModel()).addRow(event.roles.get(i), event.lines.get(i));
+        }
+        addDispatchButton.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e)
+            {
+                int i = event.roles.size();
+                event.roles.add("Dispatch");
+                event.lines.add("");
+            }
+        });
+        addFieldButton.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e)
+            {
+                int i = event.roles.size();
+                event.roles.add("Field");
+                event.lines.add("");
+            }
+        });
+        dialogTable.getModel().addTableModelListener(new TableModelListener()
+        {
+
+            public void tableChanged(TableModelEvent e)
+            {
+                if (e.getType() == TableModelEvent.UPDATE)
+                {
+                    event.roles.set(e.getLastRow(), dialogTable.getModel().getValueAt(e.getLastRow(), 0).toString());
+                    event.lines.set(e.getLastRow(), dialogTable.getModel().getValueAt(e.getLastRow(), 1).toString());
+                }
+                if(e.getType() == TableModelEvent.DELETE)
+                {
+                    event.roles.remove(e.getLastRow());
+                    event.lines.remove(e.getLastRow());
+                }
+            }
+        });
+        
+    }
+
+    public void update(Observable o, Object arg)
+    {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    /**
+     * 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: /trunk/src/event/editor/CADLogPanel.java
===================================================================
--- /trunk/src/event/editor/CADLogPanel.java	(revision 1)
+++ /trunk/src/event/editor/CADLogPanel.java	(revision 1)
@@ -0,0 +1,133 @@
+package event.editor;
+
+import java.awt.event.*;
+import java.util.Observable;
+import scriptbuilder.structures.events.CADEvent;
+import scriptbuilder.structures.events.ScriptEventInterface;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class CADLogPanel extends javax.swing.JPanel implements RemoveablePanel, ScriptEventEditorPanel
+{
+
+    private ActionListener removeListener;
+    private CADEvent event;
+
+    /**
+     * Creates new form DetailPanel
+     */
+    public CADLogPanel()
+    {
+        initComponents();
+    }
+
+    public void setRemoveListener(ActionListener listener)
+    {
+        removeListener = listener;
+    }
+
+    public void getEventObject(ScriptEventInterface sei)
+    {
+        event = (CADEvent) sei;
+        CadTextField.setText(event.detail);
+        CadTextField.addKeyListener(new KeyListener()
+        {
+
+            public void keyTyped(KeyEvent e)
+            {
+            }
+
+            public void keyPressed(KeyEvent e)
+            {
+                if(e.getKeyCode() == KeyEvent.VK_ENTER)
+                {
+                    event.detail = CadTextField.getText();
+                }
+            }
+
+            public void keyReleased(KeyEvent e)
+            {
+            }
+        });
+    }
+
+    public void update(Observable o, Object arg)
+    {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    /**
+     * 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();
+        CadTextField = 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");
+
+        CadTextField.setColumns(20);
+        CadTextField.setRows(5);
+        jScrollPane1.setViewportView(CadTextField);
+
+        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, 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.JTextArea CadTextField;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JButton removeButton;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /trunk/src/event/editor/ParamicsPanel.java
===================================================================
--- /trunk/src/event/editor/ParamicsPanel.java	(revision 1)
+++ /trunk/src/event/editor/ParamicsPanel.java	(revision 1)
@@ -0,0 +1,386 @@
+package event.editor;
+
+import java.awt.event.*;
+import java.util.ArrayList;
+import java.util.Observable;
+import javax.swing.JCheckBox;
+import scriptbuilder.structures.events.ParamicsEvent;
+import scriptbuilder.structures.events.ScriptEventInterface;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class ParamicsPanel extends javax.swing.JPanel implements RemoveablePanel, ScriptEventEditorPanel
+{
+
+    private ActionListener removeListener;
+    private ParamicsEvent event;
+
+    /**
+     * Creates new form ParamicsPanel
+     */
+    public ParamicsPanel()
+    {
+        initComponents();
+    }
+
+    public void setRemoveListener(ActionListener listener)
+    {
+        removeListener = listener;
+    }
+
+    public void getEventObject(ScriptEventInterface sei)
+    {
+        event = (ParamicsEvent) sei;
+        boolean containsItem = false;
+        for (int i = 0; i < LocationDropdown.getItemCount() && !containsItem; i++)
+        {
+            if (event.locationID.equalsIgnoreCase(LocationDropdown.getItemAt(i).toString()))
+            {
+                LocationDropdown.setSelectedIndex(i);
+                containsItem = true;
+            }
+        }
+        if (!containsItem)
+        {
+            LocationDropdown.addItem(event.locationID);
+            LocationDropdown.setSelectedItem(LocationDropdown.getItemCount() - 1);
+        }
+        for (int i = 0; i < StatusDropdown.getItemCount(); i++)
+        {
+            if (event.status.equalsIgnoreCase(StatusDropdown.getItemAt(i).toString()))
+            {
+                StatusDropdown.setSelectedIndex(i);
+            }
+        }
+        for (int i = 0; i < TypeDropdown.getItemCount(); i++)
+        {
+            if (event.type.equalsIgnoreCase(TypeDropdown.getItemAt(i).toString()))
+            {
+                TypeDropdown.setSelectedIndex(i);
+            }
+        }
+        ArrayList<JCheckBox> lanes = new ArrayList<JCheckBox>();
+        lanes.add(jCheckBox1);
+        lanes.add(jCheckBox2);
+        lanes.add(jCheckBox3);
+        lanes.add(jCheckBox4);
+        lanes.add(jCheckBox5);
+        lanes.add(jCheckBox6);
+        lanes.add(jCheckBox7);
+        lanes.add(jCheckBox8);
+        lanes.add(jCheckBox9);
+        lanes.add(jCheckBox10);
+        for (Integer num : event.laneNums)
+        {
+            lanes.get(num - 1).doClick();
+        }
+    }
+
+    public void update(Observable o, Object arg)
+    {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    /**
+     * 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();
+        StatusDropdown = new javax.swing.JComboBox();
+        TypeDropdown = 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();
+        LocationDropdown = 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");
+
+        StatusDropdown.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "New", "Changed", "Cleared" }));
+
+        TypeDropdown.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);
+            }
+        });
+
+        LocationDropdown.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, TypeDropdown, 0, 597, Short.MAX_VALUE)
+                            .add(StatusDropdown, 0, 597, Short.MAX_VALUE)
+                            .add(LocationDropdown, 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(LocationDropdown, 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(StatusDropdown, 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(TypeDropdown, 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.JComboBox LocationDropdown;
+    private javax.swing.JComboBox StatusDropdown;
+    private javax.swing.JComboBox TypeDropdown;
+    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.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: /trunk/src/event/editor/UnitPanel.form
===================================================================
--- /trunk/src/event/editor/UnitPanel.form	(revision 1)
+++ /trunk/src/event/editor/UnitPanel.form	(revision 1)
@@ -0,0 +1,152 @@
+<?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="StatusDropdown" pref="475" max="32767" attributes="0"/>
+                          <Component id="txtUnitNumber" 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="ActiveDropdown" alignment="0" pref="475" max="32767" attributes="0"/>
+                          <Component id="PrimaryDropdown" 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="txtUnitNumber" 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="StatusDropdown" 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="PrimaryDropdown" 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="ActiveDropdown" 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="txtUnitNumber">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="  -  "/>
+        <Property name="toolTipText" type="java.lang.String" value=""/>
+      </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="StatusDropdown">
+      <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="PrimaryDropdown">
+      <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="ActiveDropdown">
+      <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: /trunk/src/event/editor/MaintenanceRadioPanel.java
===================================================================
--- /trunk/src/event/editor/MaintenanceRadioPanel.java	(revision 1)
+++ /trunk/src/event/editor/MaintenanceRadioPanel.java	(revision 1)
@@ -0,0 +1,104 @@
+package event.editor;
+
+import java.awt.event.*;
+import java.util.Observable;
+import scriptbuilder.structures.events.*;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class MaintenanceRadioPanel extends javax.swing.JPanel implements ScriptEventEditorPanel
+{
+
+    private ActionListener removeListener;
+    private MaintenanceRadioEvent event;
+
+    /**
+     * Creates new form MaintenanceRadio
+     */
+    public MaintenanceRadioPanel()
+    {
+        initComponents();
+    }
+
+    public void getEventObject(ScriptEventInterface sei)
+    {
+        event = (MaintenanceRadioEvent) sei;
+        jTextArea1.setText(event.message);
+        jTextArea1.addKeyListener(new KeyListener()
+        {
+
+            public void keyTyped(KeyEvent e)
+            {
+            }
+
+            public void keyPressed(KeyEvent e)
+            {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER)
+                {
+                    event.message = jTextArea1.getText();
+                }
+            }
+
+            public void keyReleased(KeyEvent e)
+            {
+            }
+        });
+    }
+
+    public void update(Observable o, Object arg)
+    {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    /**
+     * 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: /trunk/src/event/editor/TMTRadioPanel.form
===================================================================
--- /trunk/src/event/editor/TMTRadioPanel.form	(revision 1)
+++ /trunk/src/event/editor/TMTRadioPanel.form	(revision 1)
@@ -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: /trunk/src/event/editor/TowPanel.java
===================================================================
--- /trunk/src/event/editor/TowPanel.java	(revision 1)
+++ /trunk/src/event/editor/TowPanel.java	(revision 1)
@@ -0,0 +1,276 @@
+package event.editor;
+
+import java.awt.event.*;
+import java.util.Observable;
+import scriptbuilder.structures.events.ScriptEventInterface;
+import scriptbuilder.structures.events.TowEvent;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class TowPanel extends javax.swing.JPanel implements RemoveablePanel, ScriptEventEditorPanel
+{
+
+    private ActionListener removeListener;
+    private TowEvent event;
+
+    /**
+     * Creates new form TowPanel
+     */
+    public TowPanel()
+    {
+        initComponents();
+
+        txtConfirmationNumber.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("");
+            }
+
+        });
+
+        txtPublicNumber.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;
+    }
+
+    public void getEventObject(ScriptEventInterface sei)
+    {
+        event = (TowEvent) sei;
+        txtCompany.setText(event.towCompany);
+        txtCompany.addKeyListener(new KeyListener()
+        {
+            public void keyTyped(KeyEvent e)
+            {
+            }
+            public void keyPressed(KeyEvent e)
+            {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER)
+                {
+                    event.towCompany = txtCompany.getText();
+                }
+            }
+            public void keyReleased(KeyEvent e)
+            {
+            }
+        });
+        txtBeat.setText(event.towBeat);
+        txtBeat.addKeyListener(new KeyListener()
+        {
+            public void keyTyped(KeyEvent e)
+            {
+            }
+            public void keyPressed(KeyEvent e)
+            {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER)
+                {
+                    event.towBeat = txtBeat.getText();
+                }
+            }
+            public void keyReleased(KeyEvent e)
+            {
+            }
+        });
+        txtConfirmationNumber.setText("" + event.towConfNum);
+        txtConfirmationNumber.addKeyListener(new KeyListener()
+        {
+            public void keyTyped(KeyEvent e)
+            {
+            }
+            public void keyPressed(KeyEvent e)
+            {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER)
+                {
+                    event.towConfNum = txtConfirmationNumber.getText();
+                }
+            }
+            public void keyReleased(KeyEvent e)
+            {
+            }
+        });
+        txtPublicNumber.setText("" + event.towPubNum);
+        txtPublicNumber.addKeyListener(new KeyListener()
+        {
+            public void keyTyped(KeyEvent e)
+            {
+            }
+            public void keyPressed(KeyEvent e)
+            {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER)
+                {
+                    event.towPubNum = txtPublicNumber.getText();
+                }
+            }
+            public void keyReleased(KeyEvent e)
+            {
+            }
+        });
+    }
+
+    public void update(Observable o, Object arg)
+    {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    /**
+     * 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();
+        txtCompany = new javax.swing.JTextField();
+        jLabel2 = new javax.swing.JLabel();
+        txtConfirmationNumber = new javax.swing.JFormattedTextField();
+        jLabel3 = new javax.swing.JLabel();
+        txtPublicNumber = new javax.swing.JFormattedTextField();
+        jLabel4 = new javax.swing.JLabel();
+        txtBeat = 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
+        {
+            txtConfirmationNumber.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("(###)###-####")));
+        } catch (java.text.ParseException ex)
+        {
+            ex.printStackTrace();
+        }
+
+        jLabel3.setText("Public Number");
+
+        try
+        {
+            txtPublicNumber.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(txtBeat, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE)
+                            .add(txtCompany, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE)
+                            .add(txtConfirmationNumber, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE)
+                            .add(txtPublicNumber, 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(txtCompany, 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(txtConfirmationNumber, 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(txtPublicNumber, 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(txtBeat, 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.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.JButton removeButton;
+    private javax.swing.JTextField txtBeat;
+    private javax.swing.JTextField txtCompany;
+    private javax.swing.JFormattedTextField txtConfirmationNumber;
+    private javax.swing.JFormattedTextField txtPublicNumber;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /trunk/src/event/editor/CMSEvaluationPanel.java
===================================================================
--- /trunk/src/event/editor/CMSEvaluationPanel.java	(revision 1)
+++ /trunk/src/event/editor/CMSEvaluationPanel.java	(revision 1)
@@ -0,0 +1,216 @@
+package event.editor;
+
+import java.awt.event.*;
+import java.util.*;
+import javax.swing.JTable;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import scriptbuilder.structures.events.CMSEvaluationEvent;
+import scriptbuilder.structures.events.ScriptEventInterface;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class CMSEvaluationPanel extends javax.swing.JPanel implements RemoveablePanel, ScriptEventEditorPanel
+{
+
+    private HashMap<String, Class> properties;
+    private JTable dialogTable;
+    private ActionListener removeListener;
+    private CMSEvaluationEvent event;
+
+    /**
+     * Creates new form CMSEvaluation
+     */
+    public CMSEvaluationPanel()
+    {
+        initComponents();
+
+        dialogTable = GenericTable.genericizeNumberedTable(jScrollPane1, addButton, deleteButton);
+    }
+
+    public void setRemoveListener(ActionListener listener)
+    {
+        removeListener = listener;
+    }
+
+    public void getEventObject(ScriptEventInterface sei)
+    {
+        event = (CMSEvaluationEvent) sei;
+        txtID.setText(event.cmsID);
+        txtLocation.setText(event.location);
+        txtMessage.setText("");
+        for (int i = 0; i < event.message.size(); i++)
+        {
+            for (MouseListener ml : addButton.getMouseListeners())
+            {
+                ml.mouseClicked(new MouseEvent(addButton, 1, 1, 1, 1, 1, 1, true));
+            }
+            ((MyTableModel) dialogTable.getModel()).setValueAt(event.message.get(i), i, 1);
+        }
+        for (int i = 0; i < TypeDropdown.getItemCount(); i++)
+        {
+            if (event.cmsType.equalsIgnoreCase(TypeDropdown.getItemAt(i).toString()))
+            {
+                TypeDropdown.setSelectedIndex(i);
+            }
+        }
+        dialogTable.getModel().addTableModelListener(new TableModelListener()
+        {
+
+            public void tableChanged(TableModelEvent e)
+            {
+                if (e.getType() == TableModelEvent.UPDATE)
+                {
+                    event.message.set(e.getLastRow(), dialogTable.getModel().getValueAt(e.getLastRow(), 0).toString());
+                }
+                if(e.getType() == TableModelEvent.DELETE)
+                {
+                    event.message.remove(e.getLastRow());
+                }
+            }
+        });
+
+    }
+
+    public void update(Observable o, Object arg)
+    {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    /**
+     * 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();
+        txtLocation = new javax.swing.JTextField();
+        jLabel2 = new javax.swing.JLabel();
+        TypeDropdown = new javax.swing.JComboBox();
+        txtID = new javax.swing.JFormattedTextField();
+        jLabel1 = new javax.swing.JLabel();
+        deleteButton = new javax.swing.JButton();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        txtMessage = new javax.swing.JTextArea();
+        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");
+
+        txtLocation.setToolTipText("Example: SB 55 @ WARNER AVE");
+
+        jLabel2.setText("Type");
+
+        TypeDropdown.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Update", "New", "Remove" }));
+
+        txtID.setToolTipText("Example: 72");
+
+        jLabel1.setText("CMS ID");
+
+        deleteButton.setText("Delete Selected Message");
+        deleteButton.setToolTipText("Deletes the selected message from the table");
+
+        jScrollPane1.setHorizontalScrollBar(null);
+
+        txtMessage.setColumns(20);
+        txtMessage.setRows(5);
+        jScrollPane1.setViewportView(txtMessage);
+
+        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(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))
+                    .add(layout.createSequentialGroup()
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jScrollPane1)
+                            .add(org.jdesktop.layout.GroupLayout.TRAILING, removeButton)
+                            .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(TypeDropdown, 0, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                                    .add(txtLocation)
+                                    .add(txtID))))
+                        .addContainerGap())))
+        );
+        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(txtID, 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(TypeDropdown, 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(txtLocation, 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.JComboBox TypeDropdown;
+    private javax.swing.JButton addButton;
+    private javax.swing.JButton deleteButton;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JLabel jLabel3;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JButton removeButton;
+    private javax.swing.JFormattedTextField txtID;
+    private javax.swing.JTextField txtLocation;
+    private javax.swing.JTextArea txtMessage;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /trunk/src/event/editor/CADLogPanel.form
===================================================================
--- /trunk/src/event/editor/CADLogPanel.form	(revision 1)
+++ /trunk/src/event/editor/CADLogPanel.form	(revision 1)
@@ -0,0 +1,78 @@
+<?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="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="CadTextField">
+          <Properties>
+            <Property name="columns" type="int" value="20"/>
+            <Property name="rows" type="int" value="5"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+  </SubComponents>
+</Form>
Index: /trunk/src/event/editor/CHPRadioPanel.form
===================================================================
--- /trunk/src/event/editor/CHPRadioPanel.form	(revision 1)
+++ /trunk/src/event/editor/CHPRadioPanel.form	(revision 1)
@@ -0,0 +1,110 @@
+<?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"/>
+                  </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: /trunk/src/images/Images.java
===================================================================
--- /trunk/src/images/Images.java	(revision 1)
+++ /trunk/src/images/Images.java	(revision 1)
@@ -0,0 +1,60 @@
+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: /trunk/build.xml
===================================================================
--- /trunk/build.xml	(revision 5)
+++ /trunk/build.xml	(revision 5)
@@ -0,0 +1,73 @@
+<?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:                  JAR building
+      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: nifest.mf
===================================================================
--- /manifest.mf	(revision 1)
+++ 	(revision )
@@ -1,3 +1,0 @@
-Manifest-Version: 1.0
-X-COMMENT: Main-Class will be added automatically by build
-
Index: ild.xml
===================================================================
--- /build.xml	(revision 2)
+++ 	(revision )
@@ -1,73 +1,0 @@
-<?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:                  JAR building
-      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>
