aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config/snort-dev/.buildpath5
-rw-r--r--config/snort-dev/.project28
-rw-r--r--config/snort-dev/.settings/.jsdtscope12
-rw-r--r--config/snort-dev/.settings/com.aptana.editor.php.prefs3
-rw-r--r--config/snort-dev/.settings/org.eclipse.php.core.prefs5
-rw-r--r--config/snort-dev/.settings/org.eclipse.wst.jsdt.ui.superType.container1
-rw-r--r--config/snort-dev/.settings/org.eclipse.wst.jsdt.ui.superType.name1
-rw-r--r--config/snort-dev/css/colorbox.css36
-rw-r--r--config/snort-dev/css/new_tab_menu.css110
-rw-r--r--config/snort-dev/css/sexybuttons.css342
-rw-r--r--config/snort-dev/css/style_snort2.css313
-rw-r--r--config/snort-dev/images/alert.jpgbin0 -> 13730 bytes
-rw-r--r--config/snort-dev/images/arrow_down.pngbin0 -> 379 bytes
-rw-r--r--config/snort-dev/images/awesome-overlay-sprite.pngbin0 -> 214 bytes
-rw-r--r--config/snort-dev/images/controls.pngbin0 -> 1633 bytes
-rw-r--r--config/snort-dev/images/down.gifbin0 -> 54 bytes
-rw-r--r--config/snort-dev/images/down2.gifbin0 -> 60 bytes
-rw-r--r--config/snort-dev/images/footer.jpgbin0 -> 57411 bytes
-rw-r--r--config/snort-dev/images/footer2.jpgbin0 -> 31878 bytes
-rw-r--r--config/snort-dev/images/icon-table-sort-asc.pngbin0 -> 2906 bytes
-rw-r--r--config/snort-dev/images/icon-table-sort-desc.pngbin0 -> 2913 bytes
-rw-r--r--config/snort-dev/images/icon-table-sort.pngbin0 -> 3025 bytes
-rw-r--r--config/snort-dev/images/icon_excli.pngbin0 -> 5280 bytes
-rw-r--r--config/snort-dev/images/logo.jpgbin0 -> 74306 bytes
-rw-r--r--config/snort-dev/images/logo22.pngbin0 -> 27841 bytes
-rw-r--r--config/snort-dev/images/new_tab_menu.pngbin0 -> 3257 bytes
-rw-r--r--config/snort-dev/images/page_white_text.pngbin0 -> 342 bytes
-rw-r--r--config/snort-dev/images/transparent.gifbin0 -> 156 bytes
-rw-r--r--config/snort-dev/images/transparentbg.pngbin0 -> 2818 bytes
-rw-r--r--config/snort-dev/images/up.gifbin0 -> 54 bytes
-rw-r--r--config/snort-dev/images/up2.gifbin0 -> 60 bytes
-rw-r--r--config/snort-dev/javascript/jquery-1.4.4.min.js167
-rw-r--r--config/snort-dev/javascript/jquery.colorbox-min.js4
-rw-r--r--config/snort-dev/javascript/jquery.form.js785
-rw-r--r--config/snort-dev/javascript/row_helper.js77
-rw-r--r--config/snort-dev/javascript/snort_globalsend.js227
-rw-r--r--config/snort-dev/javascript/sortableTable.js288
-rw-r--r--config/snort-dev/snort_alerts.php181
-rw-r--r--config/snort-dev/snort_blocked.php181
-rw-r--r--config/snort-dev/snort_gui.inc71
-rw-r--r--config/snort-dev/snort_head.inc69
-rw-r--r--config/snort-dev/snort_headbase.inc38
-rw-r--r--config/snort-dev/snort_help_info.php340
-rw-r--r--config/snort-dev/snort_interfaces_global.php343
-rw-r--r--config/snort-dev/snort_interfaces_whitelist.php194
-rw-r--r--config/snort-dev/snort_interfaces_whitelist_edit.php387
-rw-r--r--config/snort-dev/snort_json_get.php37
-rw-r--r--config/snort-dev/snort_json_post.php204
-rw-r--r--config/snort-dev/snort_new.inc438
-rw-r--r--config/snort-dev/testing.php27
50 files changed, 4914 insertions, 0 deletions
diff --git a/config/snort-dev/.buildpath b/config/snort-dev/.buildpath
new file mode 100644
index 00000000..8bcb4b5f
--- /dev/null
+++ b/config/snort-dev/.buildpath
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<buildpath>
+ <buildpathentry kind="src" path=""/>
+ <buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
+</buildpath>
diff --git a/config/snort-dev/.project b/config/snort-dev/.project
new file mode 100644
index 00000000..2f274d68
--- /dev/null
+++ b/config/snort-dev/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>snort</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.dltk.core.scriptbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.php.core.PHPNature</nature>
+ <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+ </natures>
+</projectDescription>
diff --git a/config/snort-dev/.settings/.jsdtscope b/config/snort-dev/.settings/.jsdtscope
new file mode 100644
index 00000000..b13d3035
--- /dev/null
+++ b/config/snort-dev/.settings/.jsdtscope
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path=""/>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
+ <attributes>
+ <attribute name="hide" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
+ <classpathentry kind="output" path=""/>
+</classpath>
diff --git a/config/snort-dev/.settings/com.aptana.editor.php.prefs b/config/snort-dev/.settings/com.aptana.editor.php.prefs
new file mode 100644
index 00000000..ec829f56
--- /dev/null
+++ b/config/snort-dev/.settings/com.aptana.editor.php.prefs
@@ -0,0 +1,3 @@
+#Thu Dec 16 16:47:31 PST 2010
+eclipse.preferences.version=1
+phpVersion=php5
diff --git a/config/snort-dev/.settings/org.eclipse.php.core.prefs b/config/snort-dev/.settings/org.eclipse.php.core.prefs
new file mode 100644
index 00000000..2a9cad67
--- /dev/null
+++ b/config/snort-dev/.settings/org.eclipse.php.core.prefs
@@ -0,0 +1,5 @@
+#Tue Nov 16 19:09:05 PST 2010
+eclipse.preferences.version=1
+include_path=0;/snortpf
+phpVersion=php4
+use_asp_tags_as_php=false
diff --git a/config/snort-dev/.settings/org.eclipse.wst.jsdt.ui.superType.container b/config/snort-dev/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100644
index 00000000..3bd5d0a4
--- /dev/null
+++ b/config/snort-dev/.settings/org.eclipse.wst.jsdt.ui.superType.container
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file
diff --git a/config/snort-dev/.settings/org.eclipse.wst.jsdt.ui.superType.name b/config/snort-dev/.settings/org.eclipse.wst.jsdt.ui.superType.name
new file mode 100644
index 00000000..05bd71b6
--- /dev/null
+++ b/config/snort-dev/.settings/org.eclipse.wst.jsdt.ui.superType.name
@@ -0,0 +1 @@
+Window \ No newline at end of file
diff --git a/config/snort-dev/css/colorbox.css b/config/snort-dev/css/colorbox.css
new file mode 100644
index 00000000..09c3cc53
--- /dev/null
+++ b/config/snort-dev/css/colorbox.css
@@ -0,0 +1,36 @@
+/*
+ ColorBox Core Style
+ The following rules are the styles that are consistant between themes.
+ Avoid changing this area to maintain compatability with future versions of ColorBox.
+*/
+#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxOverlay{position:fixed; width:100%; height:100%;}
+#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
+#cboxContent{position:relative;}
+#cboxLoadedContent{overflow:auto;}
+#cboxLoadedContent iframe{display:block; width:100%; height:100%; border:0;}
+#cboxTitle{margin:0;}
+#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%;}
+#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
+
+/*
+ ColorBox example user style
+ The following rules are ordered and tabbed in a way that represents the
+ order/nesting of the generated HTML, so that the structure easier to understand.
+*/
+#cboxOverlay{background:#000;}
+
+#colorbox{}
+ #cboxContent{margin-top:20px;}
+ #cboxLoadedContent{background:#000; padding:5px;}
+ #cboxTitle{position:absolute; top:-20px; left:0; color:#ccc;}
+ #cboxCurrent{position:absolute; top:-20px; right:0px; color:#ccc;}
+ #cboxSlideshow{position:absolute; top:-20px; right:90px; color:#fff;}
+ #cboxPrevious{position:absolute; top:50%; left:5px; margin-top:-32px; background:url(/snort/images//controls.png) top left no-repeat; width:28px; height:65px; text-indent:-9999px;}
+ #cboxPrevious.hover{background-position:bottom left;}
+ #cboxNext{position:absolute; top:50%; right:5px; margin-top:-32px; background:url(/snort/images//controls.png) top right no-repeat; width:28px; height:65px; text-indent:-9999px;}
+ #cboxNext.hover{background-position:bottom right;}
+ #cboxLoadingOverlay{background:#000;}
+ #cboxLoadingGraphic{background:url(/snort/images//loading.gif) center center no-repeat;}
+ #cboxClose{position:absolute; top:5px; right:5px; display:block; background:url(/snort/images//controls.png) top center no-repeat; width:38px; height:19px; text-indent:-9999px;}
+ #cboxClose.hover{background-position:bottom center;}
diff --git a/config/snort-dev/css/new_tab_menu.css b/config/snort-dev/css/new_tab_menu.css
new file mode 100644
index 00000000..1592be9f
--- /dev/null
+++ b/config/snort-dev/css/new_tab_menu.css
@@ -0,0 +1,110 @@
+/*
+ new_tab_menu.css
+ part of pfSense
+ Copyright (C) 2010-2011 Robert Zelaya
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+
+ Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
+ The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
+
+ <tr>
+ <td>
+ <?php
+ $tab_array_indent = 0; // move to the line in px
+ $tab_array_space = 1; // space betwen lines in px
+ $tab_array_char_limit = 82; // number or chr before the drop down box
+ $tab_array = array();
+ $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
+ $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
+ $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
+ $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
+ $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
+ $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+
+*/
+
+
+.spannewtab {
+ font-size: 0.9em;
+}
+
+.newtabmenu ul, li{
+ border:0;
+ margin:0; padding:0;
+ list-style:none;
+}
+
+.newtabmenu li{float:left; margin-right:2px; text-align: center;}
+.newtabmenu a:link, .newtabmenu a:visited{
+ background:url(/snort/images/new_tab_menu.png) right 45px;
+ color:#ffffff; /* noactive font */
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ font-weight:bold;
+ font-size:.9em;
+ height:20px;
+ line-height:20px;
+ text-decoration:none;
+}
+.newtabmenu a span{
+ background:url(/snort/images/new_tab_menu.png) left 45px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ height:20px;
+ margin-right:7px;
+ padding-left:7px;
+}
+.newtabmenu a:hover{
+ background:url(/snort/images/new_tab_menu.png) right 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ color:#ffffff; /* hover over font */
+}
+.newtabmenu a:hover span{
+ background:url(/snort/images/new_tab_menu.png) left 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+}
+
+/* -------------------------------- */
+/* ACTIVE ELEMENTS */
+.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
+ color:#000000; /* active font */
+ background:url(/snort/images/new_tab_menu.png) right 0 no-repeat;
+}
+.newtabmenu_active a span, .newtabmenu_active a:hover span{
+ background:url(/snort/images/new_tab_menu.png) left 0 no-repeat;
+}
diff --git a/config/snort-dev/css/sexybuttons.css b/config/snort-dev/css/sexybuttons.css
new file mode 100644
index 00000000..c3834b44
--- /dev/null
+++ b/config/snort-dev/css/sexybuttons.css
@@ -0,0 +1,342 @@
+/*
+ * Sexy Buttons
+ *
+ * DESCRIPTION:
+ * Sexy, skinnable HTML/CSS buttons with icons.
+ *
+ * PROJECT URL:
+ * http://code.google.com/p/sexybuttons/
+ *
+ * AUTHOR:
+ * Richard Davies
+ * http://www.richarddavies.us
+ * Richard@richarddavies.us
+ *
+ * VERSION:
+ * 1.1
+ *
+ * LICENSE:
+ * Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
+ * Creative Commons 3.0 Attribution (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * CREDITS:
+ * Inspired by, derived from, and thanks to:
+ * http://www.p51labs.com/simply-buttons-v2/
+ * http://www.oscaralexander.com/tutorials/how-to-make-sexy-buttons-with-css.html
+ * http://www.zurb.com/article/266/super-awesome-buttons-with-css3-and-rgba
+ * http://www.elctech.com/snippets/make-your-buttons-look-super-awesome
+ *
+ * USAGE:
+ * Simply add class="sexybutton [skin]" to a <button> or <a> element and wrap the label text with double <span>s.
+ * You can optionally add a "silk" icon to the button text by using a third <span> with class to identify the icon.
+ *
+ * EXAMPLE:
+ * <button id="btn1" class="sexybutton" name="btn1" type="submit" value="Submit">
+ * <span><span><span class="ok">Submit</span></span></span>
+ * </button>
+ */
+
+
+/*
+ * Generic styles for all Sexy Buttons
+ */
+
+.sexybutton {
+ display: inline-block;
+ margin: 0;
+ padding: 0;
+ font: bold 13px "Helvetica Neue", Helvetica, Arial !important;
+ text-decoration: none !important;
+ text-shadow: 1px 1px 2px rgba(0,0,0,0.20);
+ background: none;
+ border: none;
+ white-space: nowrap;
+ cursor: pointer;
+ user-select: none;
+ -moz-user-select: none;
+
+ /* Fix extra width padding in IE */
+ _width: 0;
+ overflow: visible;
+}
+
+.sexybutton span {
+ display: block; /* Prevents :active from working in IE--oh well! */
+ height: 24px;
+ padding-right: 12px;
+ background-repeat: no-repeat;
+ background-position: right top;
+}
+
+.sexybutton span span {
+ padding-right: 0;
+ padding-left: 12px;
+ line-height: 24px;
+ background-position: left top;
+}
+
+.sexybutton span span span {
+ padding-left: 21px;
+ background-image: none;
+ background-repeat: no-repeat;
+ background-position: left center;
+ /* IE6 still requires a PNG transparency fix */
+ /* _background-image: none; Or just hide icons from the undeserving IE6 */
+ /* _padding-left: 0; Or just hide icons from the undeserving IE6 */
+}
+
+.sexybutton span span span.after {
+ padding-left: 0px;
+ padding-right: 21px;
+ background-position: right center;
+ /* IE6 still requires a PNG transparency fix */
+ /* _padding-right: 0; Or just hide icons from the undeserving IE6 */
+}
+
+.sexybutton[disabled],
+.sexybutton[disabled]:hover,
+.sexybutton[disabled]:focus,
+.sexybutton[disabled]:active,
+.sexybutton.disabled,
+.sexybutton.disabled:hover,
+.sexybutton.disabled:focus,
+.sexybutton.disabled:active {
+ color: #333 !important;
+ cursor: inherit;
+ text-shadow: none;
+ opacity: 0.33;
+}
+
+.sexybutton:hover span,
+.sexybutton:focus span {
+ background-position: 100% -24px;
+}
+
+.sexybutton:hover span span,
+.sexybutton:focus span span {
+ background-position: 0% -24px;
+}
+
+.sexybutton:active span {
+ background-position: 100% -48px;
+}
+
+.sexybutton:active span span {
+ background-position: 0% -48px;
+}
+
+.sexybutton[disabled] span,
+.sexybutton.disabled span {
+ background-position: 100% -72px;
+}
+
+.sexybutton[disabled] span span,
+.sexybutton.disabled span span {
+ background-position: 0% -72px;
+}
+
+.sexybutton:hover span span span,
+.sexybutton:focus span span span,
+.sexybutton:active span span span,
+.sexybutton[disabled] span span span,
+.sexybutton.disabled span span span {
+ background-position: left center;
+}
+
+.sexybutton:hover span span span.after,
+.sexybutton:focus span span span.after,
+.sexybutton:active span span span.after,
+.sexybutton[disabled] span span span.after,
+.sexybutton.disabled span span span.after {
+ background-position: right center;
+}
+
+.sexybutton img {
+ margin-right: 5px;
+ vertical-align: text-top;
+ /* IE6 Hack */
+ _margin-top: 4px;
+ _vertical-align: text-bottom;
+ /* IE6 still requires a PNG transparency fix */
+ /* _display: none; Or just hide icons from the undeserving IE6 */
+}
+
+.sexybutton img.after {
+ margin-right: 0;
+ margin-left: 5px;
+ /* IE6 still requires a PNG transparency fix */
+ /* _margin-left: 0; Or just hide icons from the undeserving IE6 */
+}
+
+.sexybutton.sexysmalls { font-size:.8em !important; }
+.sexybutton.sexymedium { font-size: 15px !important; }
+.sexybutton.sexylarge { font-size: 18px !important; }
+
+
+/*
+ * Button Skins
+ *
+ * .PNG background images with alpha transparency are also supplied if you'd rather use them instead of the
+ * default .GIF images. (Just beware of IE6's lack of support.)
+ *
+ * Additional skins can be added below. The images/skins/ButtonTemplate.psd can be used to create new skins.
+ * Prefix the skin name with "sexy" to avoid any potential conflicts with other class names.
+ */
+
+/*
+ * Simple Skin Buttons
+ */
+
+.sexybutton.sexysimple {
+ position: relative;
+ padding: 5px 10px 5px;
+ font: inherit;
+ font-size: .85em !important;
+ font-style: normal !important;
+ font-weight: bold !important;
+ color: #fff !important;
+ line-height: 1;
+ background-image: url(/snort/images//awesome-overlay-sprite.png);
+ background-repeat: repeat-x;
+ background-position: 0 0;
+
+ /* Special effects */
+ text-shadow: 0 -1px 1px rgba(0,0,0,0.25), -2px 0 1px rgba(0,0,0,0.25);
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.5);
+ -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.5);
+
+ /* IE only stuff */
+ border-bottom: 1px solid transparent\9;
+ _background-image: none;
+
+ /* Cross browser inline block hack - http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/ */
+ display: -moz-inline-stack;
+ display: inline-block;
+ vertical-align: middle;
+ *display: inline !important;
+ position: relative;
+
+ /* Force hasLayout in IE */
+ zoom: 1;
+
+ /* Disable text selection (Firefox only)*/
+ -moz-user-select: none;
+}
+
+.sexybutton.sexysimple::selection {
+ background: transparent;
+}
+
+.sexybutton.sexysimple:hover,
+.sexybutton.sexysimple:focus {
+ background-position: 0 -50px;
+ color: #fff !important;
+}
+
+.sexybutton.sexysimple:active {
+ background-position: 0 -100px;
+ -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,0.7);
+ /* Unfortunately, Safari doesn't support inset yet */
+ -webkit-box-shadow: none;
+
+ /* IE only stuff */
+ border-bottom: 0\9;
+ border-top: 1px solid #666\9;
+}
+
+.sexybutton.sexysimple[disabled],
+.sexybutton.sexysimple.disabled {
+ background-position: 0 -150px;
+ color: #333 !important;
+ text-shadow: none;
+}
+
+.sexybutton.sexysimple[disabled]:hover,
+.sexybutton.sexysimple[disabled]:focus,
+.sexybutton.sexysimple[disabled]:active,
+.sexybutton.sexysimple.disabled:hover,
+.sexybutton.sexysimple.disabled:focus,
+.sexybutton.sexysimple.disabled:active {
+ -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.5);
+ -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.5);
+}
+
+.sexybutton.sexysimple span {
+ height: auto;
+ padding-left: 24px;
+ padding-right: 0;
+ background-position: left center;
+ background-repeat: no-repeat;
+ /* IE6 still requires a PNG transparency fix */
+ /* _padding-left: 0; Or just hide icons from the undeserving IE6 */
+}
+
+.sexybutton.sexysimple span.after {
+ padding-left: 0;
+ padding-right: 24px;
+ background-position: right center;
+ /* IE6 still requires a PNG transparency fix */
+ /* _padding-right: 0; Or just hide icons from the undeserving IE6 */
+}
+
+/* Simple button colors */
+.sexybutton.sexysimple { background-color: #333; } /* Default */
+.sexybutton.sexysimple.sexyblack { background-color: #333; }
+.sexybutton.sexysimple.sexyred { background-color: #a90118; }
+.sexybutton.sexysimple.sexyorange { background-color: #ff8a00; }
+.sexybutton.sexysimple.sexyyellow { background-color: #ffb515; }
+.sexybutton.sexysimple.sexygreen { background-color: #59a901; }
+.sexybutton.sexysimple.sexyblue { background-color: #015ea9; }
+.sexybutton.sexysimple.sexyteal { background-color: #2daebf; }
+.sexybutton.sexysimple.sexymagenta { background-color: #a9014b; }
+.sexybutton.sexysimple.sexypurple { background-color: #9d01a9; }
+
+/* Simple button sizes */
+.sexybutton.sexysimple.sexysmall { padding: 4px 7px 5px; font-size: 10px !important; }
+.sexybutton.sexysimple.sexysmall:active { padding: 5px 7px 4px; }
+.sexybutton.sexysimple { /* default */ }
+.sexybutton.sexysimple:active { padding: 6px 10px 4px; }
+.sexybutton.sexysimple.sexymedium { /* default */ }
+.sexybutton.sexysimple.sexymedium:active { padding: 6px 10px 4px; }
+.sexybutton.sexysimple.sexylarge { padding: 8px 14px 8px; font-size: 14px !important; }
+.sexybutton.sexysimple.sexylarge:active { padding: 9px 14px 7px; }
+.sexybutton.sexysimple.sexyxl { padding: 8px 14px 8px; font-size: 16px !important; }
+.sexybutton.sexysimple.sexyxl:active { padding: 9px 14px 7px; }
+.sexybutton.sexysimple.sexyxxl { padding: 8px 14px 8px; font-size: 20px !important; }
+.sexybutton.sexysimple.sexyxxl:active { padding: 9px 14px 7px; }
+.sexybutton.sexysimple.sexyxxxl { padding: 8px 14px 8px; font-size: 26px !important; }
+.sexybutton.sexysimple.sexyxxxl:active { padding: 9px 14px 7px; }
+
+.sexybutton.sexysimple.sexysmall[disabled]:active,
+.sexybutton.sexysimple.sexysmall.disabled:active { padding: 4px 7px 5px; }
+.sexybutton.sexysimple[disabled]:active,
+.sexybutton.sexysimple.disabled:active { padding: 5px 10px 5px; }
+.sexybutton.sexysimple.sexymedium[disabled]:active,
+.sexybutton.sexysimple.sexymedium.disabled:active { padding: 6px 10px 4px; }
+.sexybutton.sexysimple.sexylarge[disabled]:active,
+.sexybutton.sexysimple.sexylarge.disabled:active { padding: 8px 14px 8px; }
+.sexybutton.sexysimple.sexyxl[disabled]:active,
+.sexybutton.sexysimple.sexyxl.disabled:active { padding: 8px 14px 8px; }
+.sexybutton.sexysimple.sexyxxl[disabled]:active,
+.sexybutton.sexysimple.sexyxxl.disabled:active { padding: 8px 14px 8px; }
+.sexybutton.sexysimple.sexyxxxl[disabled]:active,
+.sexybutton.sexysimple.sexyxxxl.disabled:active { padding: 8px 14px 8px; }
+
+
+/*
+ * Icon Definitions
+ */
+
+/* Silk Icons - http://www.famfamfam.com/lab/icons/silk/ */
+/* (Obviously not all Silk icons are defined here. Feel free to define any other icons that you may need.) */
+
+.sexybutton span.ok { background-image: url(/snort/images//tick.png) !important; }
+.sexybutton span.cancel { background-image: url(/snort/images//cross.png) !important; }
+.sexybutton span.add { background-image: url(/snort/images//add.png) !important; }
+.sexybutton span.delete { background-image: url(/snort/images//delete.png) !important; }
+.sexybutton span.download { background-image: url(/snort/images//arrow_down.png) !important; }
+.sexybutton span.pwhitetxt { background-image: url(/snort/images//page_white_text.png) !important; }
+
diff --git a/config/snort-dev/css/style_snort2.css b/config/snort-dev/css/style_snort2.css
new file mode 100644
index 00000000..12f72345
--- /dev/null
+++ b/config/snort-dev/css/style_snort2.css
@@ -0,0 +1,313 @@
+@charset "utf-8";
+
+a {
+ font-size: 11px;
+}
+
+.hiddendownloadlink {
+ visibility:hidden;
+}
+
+#loadingWaiting {
+ display:none;
+ position:fixed;
+ left:0;
+ top:0;
+ width:100%;
+ height:100%;
+ background-image:url("/snort/images/transparentbg.png");
+ z-index: 9999;
+ color: fff;
+}
+
+.loadingWaitingMessage {
+
+ position: absolute;
+ top: 25%;
+ left: 50%;
+ color: #fff;
+ z-index: 9999;
+ text-align: center;
+
+}
+
+
+.alert {
+position:absolute;
+top:10px;
+left:-25px;
+width:100%;
+height:90%;
+z-index:999;
+background:#FCE9C0;
+background-position: 15px;
+border-top:2px solid #DBAC48;
+border-bottom:2px solid #DBAC48;
+padding: 15px 10px 85% 50px;
+}
+
+.formpre {
+font-family:arial;
+font-size: 1.1em;
+}
+
+#download_rules {
+font-family: arial;
+font-size: 13px;
+font-weight: bold;
+text-align: center
+}
+
+#download_rules_td {
+font-family: arial;
+font-size: 13px;
+font-weight: bold;
+text-align: center
+}
+
+/* hack fix the hard coded fbegin link */
+#header-left2 {
+position: absolute;
+background-position: center center;
+height: 67px;
+width: 147px;
+top: -77px;
+left: 8px;
+float: left;
+z-index:999;
+}
+#header-left2 #status-link2 {
+ position: relative;
+ top: 3px;
+ left: 2px;
+}
+/* end of fbegin hack */
+
+.body2 {
+font-family:arial;
+font-size:12px;
+}
+
+.tabcont {
+background-color: #dddddd;
+padding-right: 12px;
+padding-left: 12px;
+padding-top: 12px;
+padding-bottom: 12px;
+}
+
+.tabcont2 {
+background-color: #eeeeee;
+padding-right: 12px;
+padding-left: 12px;
+padding-top: 12px;
+padding-bottom: 12px;
+}
+
+.vncell2 {
+ background-color: #eeeeee;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+
+/* global tab, white lil box */
+.vncell3 {
+ width: 50px;
+ background-color: #eeeeee;
+ padding-right: 2px;
+ padding-left: 2px;
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+ border-bottom-color: #999999;
+ font-size: 11px;
+}
+
+.vncellreq2 {
+background-color: #eeeeee;
+padding-right: 20px;
+padding-left: 8px;
+font-weight: bold;
+border-bottom-width: 1px;
+border-bottom-style: solid;
+border-bottom-color: #999999;
+font-size: 11px;
+}
+
+/* Start of main css Pfsense */
+/* Start of main css Pfsense */
+
+.textstyle {
+ font-family: "Arial", "Helvetica", "sans-serif";
+ font-size: 12px;
+ font-style: normal;
+ background-color: #666;
+ color: #CCC;
+}
+.textstyle p2 a {
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 12px;
+ font-style: normal;
+ color: #CCC;
+}
+
+.textstyle p {
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 24px;
+ font-weight: bold;
+ color: #FFF;
+ text-decoration: underline;
+}
+.textstyle p2 {
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 12px;
+ color: #CCC;
+}
+
+/* Start of main css for table sort */
+/* Start of main css for table sort */
+
+table {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-weight: inherit;
+ font-style: inherit;
+ font-family: Arial, Helvetica, sans-serif;
+ vertical-align: baseline;
+}
+
+/* Tables still need 'cellspacing="0"' in the markup. */
+table { border-collapse: separate; border-spacing: 0; }
+caption, th, td { text-align: left; font-weight:400; }
+
+/* Remove possible quote marks (") from <q>, <blockquote>. */
+blockquote:before, blockquote:after, q:before, q:after { content: ""; }
+blockquote, q { quotes: "" ""; }
+
+#container {
+ width: auto;
+ margin: 0px;
+ padding-top: 10px;
+ padding-bottom: 10px;
+}
+
+
+
+/**************************************************************
+
+ Sortable Table
+ v 1.4
+
+**************************************************************/
+
+
+
+th {
+ background-color: #eee;
+ background: #eee url(/snort/images/icon-table-sort.png) no-repeat 2px 8px;
+ padding: 4px 4px 4px 14px;
+}
+
+.allRow {
+ background-color: #eee;
+ padding: 4px;
+}
+
+tr.altRow {
+ background-color: #fff;
+}
+
+.leftAlign {
+ text-align: left;
+}
+
+.centerAlign {
+ text-align: center;
+}
+
+.rightAlign {
+ text-align: right;
+}
+
+.sortedASC {
+ background: url(/snort/images/icon-table-sort-asc.png) no-repeat 2px 4px #eee;
+}
+
+.sortedDESC {
+ background: url(/snort/images/icon-table-sort-desc.png) no-repeat 2px 10px #eee;
+}
+
+.tableHeaderOver {
+ cursor: pointer;
+ color: #354158;
+}
+
+
+tr.selected {
+ background-color: #9999ff;
+ color: #000000;
+}
+
+tr.over {
+ background-color: #993333;
+ color: #fff;
+ cursor: pointer;
+}
+
+tr.hide {
+ display: none;
+}
+/***************************/
+
+.mainTableFilter {
+ position: absolute;
+ top: 0;
+ left: -10px;
+ width: auto;
+}
+
+.tableFilter {
+ border: 1px solid #ccc;
+ padding: 2px;
+ margin: 5px 0 10px 0;
+}
+
+.tableFilter input {
+ border: 1px solid #ccc;
+}
+
+.tableFilter select {
+ border: 1px solid #ccc;
+}
+
+.listbg2 {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #090;
+ color: #000;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+
+.listbg3 {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #777777;
+ color: #000;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+
+#tdbggrey {
+
+background-color: #ddd;
+
+} \ No newline at end of file
diff --git a/config/snort-dev/images/alert.jpg b/config/snort-dev/images/alert.jpg
new file mode 100644
index 00000000..96c24e35
--- /dev/null
+++ b/config/snort-dev/images/alert.jpg
Binary files differ
diff --git a/config/snort-dev/images/arrow_down.png b/config/snort-dev/images/arrow_down.png
new file mode 100644
index 00000000..2c4e2793
--- /dev/null
+++ b/config/snort-dev/images/arrow_down.png
Binary files differ
diff --git a/config/snort-dev/images/awesome-overlay-sprite.png b/config/snort-dev/images/awesome-overlay-sprite.png
new file mode 100644
index 00000000..c3af7dd9
--- /dev/null
+++ b/config/snort-dev/images/awesome-overlay-sprite.png
Binary files differ
diff --git a/config/snort-dev/images/controls.png b/config/snort-dev/images/controls.png
new file mode 100644
index 00000000..e1e97982
--- /dev/null
+++ b/config/snort-dev/images/controls.png
Binary files differ
diff --git a/config/snort-dev/images/down.gif b/config/snort-dev/images/down.gif
new file mode 100644
index 00000000..2b3c99fc
--- /dev/null
+++ b/config/snort-dev/images/down.gif
Binary files differ
diff --git a/config/snort-dev/images/down2.gif b/config/snort-dev/images/down2.gif
new file mode 100644
index 00000000..71bf92eb
--- /dev/null
+++ b/config/snort-dev/images/down2.gif
Binary files differ
diff --git a/config/snort-dev/images/footer.jpg b/config/snort-dev/images/footer.jpg
new file mode 100644
index 00000000..4af05707
--- /dev/null
+++ b/config/snort-dev/images/footer.jpg
Binary files differ
diff --git a/config/snort-dev/images/footer2.jpg b/config/snort-dev/images/footer2.jpg
new file mode 100644
index 00000000..3332e085
--- /dev/null
+++ b/config/snort-dev/images/footer2.jpg
Binary files differ
diff --git a/config/snort-dev/images/icon-table-sort-asc.png b/config/snort-dev/images/icon-table-sort-asc.png
new file mode 100644
index 00000000..0c127919
--- /dev/null
+++ b/config/snort-dev/images/icon-table-sort-asc.png
Binary files differ
diff --git a/config/snort-dev/images/icon-table-sort-desc.png b/config/snort-dev/images/icon-table-sort-desc.png
new file mode 100644
index 00000000..5c52f2d0
--- /dev/null
+++ b/config/snort-dev/images/icon-table-sort-desc.png
Binary files differ
diff --git a/config/snort-dev/images/icon-table-sort.png b/config/snort-dev/images/icon-table-sort.png
new file mode 100644
index 00000000..3cae604b
--- /dev/null
+++ b/config/snort-dev/images/icon-table-sort.png
Binary files differ
diff --git a/config/snort-dev/images/icon_excli.png b/config/snort-dev/images/icon_excli.png
new file mode 100644
index 00000000..4b54fa31
--- /dev/null
+++ b/config/snort-dev/images/icon_excli.png
Binary files differ
diff --git a/config/snort-dev/images/logo.jpg b/config/snort-dev/images/logo.jpg
new file mode 100644
index 00000000..fa01d818
--- /dev/null
+++ b/config/snort-dev/images/logo.jpg
Binary files differ
diff --git a/config/snort-dev/images/logo22.png b/config/snort-dev/images/logo22.png
new file mode 100644
index 00000000..64ed9d75
--- /dev/null
+++ b/config/snort-dev/images/logo22.png
Binary files differ
diff --git a/config/snort-dev/images/new_tab_menu.png b/config/snort-dev/images/new_tab_menu.png
new file mode 100644
index 00000000..f0e4cbeb
--- /dev/null
+++ b/config/snort-dev/images/new_tab_menu.png
Binary files differ
diff --git a/config/snort-dev/images/page_white_text.png b/config/snort-dev/images/page_white_text.png
new file mode 100644
index 00000000..813f712f
--- /dev/null
+++ b/config/snort-dev/images/page_white_text.png
Binary files differ
diff --git a/config/snort-dev/images/transparent.gif b/config/snort-dev/images/transparent.gif
new file mode 100644
index 00000000..e7ccd741
--- /dev/null
+++ b/config/snort-dev/images/transparent.gif
Binary files differ
diff --git a/config/snort-dev/images/transparentbg.png b/config/snort-dev/images/transparentbg.png
new file mode 100644
index 00000000..86918930
--- /dev/null
+++ b/config/snort-dev/images/transparentbg.png
Binary files differ
diff --git a/config/snort-dev/images/up.gif b/config/snort-dev/images/up.gif
new file mode 100644
index 00000000..89596771
--- /dev/null
+++ b/config/snort-dev/images/up.gif
Binary files differ
diff --git a/config/snort-dev/images/up2.gif b/config/snort-dev/images/up2.gif
new file mode 100644
index 00000000..21c5a254
--- /dev/null
+++ b/config/snort-dev/images/up2.gif
Binary files differ
diff --git a/config/snort-dev/javascript/jquery-1.4.4.min.js b/config/snort-dev/javascript/jquery-1.4.4.min.js
new file mode 100644
index 00000000..8f3ca2e2
--- /dev/null
+++ b/config/snort-dev/javascript/jquery-1.4.4.min.js
@@ -0,0 +1,167 @@
+/*!
+ * jQuery JavaScript Library v1.4.4
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu Nov 11 19:04:53 2010 -0500
+ */
+(function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h=
+h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;k<J.length;k++){h=J[k];h.origType.replace(X,"")===a.type?f.push(h.selector):J.splice(k--,1)}f=c(a.target).closest(f,a.currentTarget);o=0;for(x=f.length;o<x;o++){r=f[o];for(k=0;k<J.length;k++){h=J[k];if(r.selector===h.selector&&(!A||A.test(h.namespace))){l=r.elem;e=null;if(h.preType==="mouseenter"||
+h.preType==="mouseleave"){a.type=h.preType;e=c(a.relatedTarget).closest(h.selector)[0]}if(!e||e!==l)C.push({elem:l,handleObj:h,level:r.level})}}}o=0;for(x=C.length;o<x;o++){f=C[o];if(d&&f.level>d)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La,
+"`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,
+e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,
+"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+
+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j,
+s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,
+j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length},
+toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j===
+-1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false;
+if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K<Q;K++)if((j=arguments[K])!=null)for(s in j){v=G[s];z=j[s];if(G!==z)if(ga&&z&&(b.isPlainObject(z)||(H=b.isArray(z)))){if(H){H=false;v=v&&b.isArray(v)?v:[]}else v=v&&b.isPlainObject(v)?v:{};G[s]=b.extend(ga,v,z)}else if(z!==B)G[s]=z}return G};b.extend({noConflict:function(j){E.$=e;if(j)E.jQuery=d;return b},isReady:false,readyWait:1,ready:function(j){j===true&&b.readyWait--;
+if(!b.readyWait||j!==true&&!b.isReady){if(!t.body)return setTimeout(b.ready,1);b.isReady=true;if(!(j!==true&&--b.readyWait>0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload",
+b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&&
+!F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&&
+l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;H<G;){if(s.apply(j[H++],v)===false)break}else if(K)for(z in j){if(s.call(j[z],
+z,j[z])===false)break}else for(v=j[0];H<G&&s.call(v,H,v)!==false;v=j[++H]);return j},trim:O?function(j){return j==null?"":O.call(j)}:function(j){return j==null?"":j.toString().replace(k,"").replace(o,"")},makeArray:function(j,s){var v=s||[];if(j!=null){var z=b.type(j);j.length==null||z==="string"||z==="function"||z==="regexp"||b.isWindow(j)?M.call(v,j):b.merge(v,j)}return v},inArray:function(j,s){if(s.indexOf)return s.indexOf(j);for(var v=0,z=s.length;v<z;v++)if(s[v]===j)return v;return-1},merge:function(j,
+s){var v=j.length,z=0;if(typeof s.length==="number")for(var H=s.length;z<H;z++)j[v++]=s[z];else for(;s[z]!==B;)j[v++]=s[z++];j.length=v;return j},grep:function(j,s,v){var z=[],H;v=!!v;for(var G=0,K=j.length;G<K;G++){H=!!s(j[G],G);v!==H&&z.push(j[G])}return z},map:function(j,s,v){for(var z=[],H,G=0,K=j.length;G<K;G++){H=s(j[G],G,v);if(H!=null)z[z.length]=H}return z.concat.apply([],z)},guid:1,proxy:function(j,s,v){if(arguments.length===2)if(typeof s==="string"){v=j;j=v[s];s=B}else if(s&&!b.isFunction(s)){v=
+s;s=B}if(!s&&j)s=function(){return j.apply(v||this,arguments)};if(j)s.guid=j.guid=j.guid||s.guid||b.guid++;return s},access:function(j,s,v,z,H,G){var K=j.length;if(typeof s==="object"){for(var Q in s)b.access(j,Q,s[Q],z,H,v);return j}if(v!==B){z=!G&&z&&b.isFunction(v);for(Q=0;Q<K;Q++)H(j[Q],s,z?v.call(j[Q],Q,H(j[Q],s)):v,G);return j}return K?H(j[0],s):B},now:function(){return(new Date).getTime()},uaMatch:function(j){j=j.toLowerCase();j=L.exec(j)||g.exec(j)||i.exec(j)||j.indexOf("compatible")<0&&n.exec(j)||
+[];return{browser:j[1]||"",version:j[2]||"0"}},browser:{}});b.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(j,s){R["[object "+s+"]"]=s.toLowerCase()});m=b.uaMatch(m);if(m.browser){b.browser[m.browser]=true;b.browser.version=m.version}if(b.browser.webkit)b.browser.safari=true;if(D)b.inArray=function(j,s){return D.call(s,j)};if(!/\s/.test("\u00a0")){k=/^[\s\xA0]+/;o=/[\s\xA0]+$/}f=b(t);if(t.addEventListener)u=function(){t.removeEventListener("DOMContentLoaded",u,
+false);b.ready()};else if(t.attachEvent)u=function(){if(t.readyState==="complete"){t.detachEvent("onreadystatechange",u);b.ready()}};return E.jQuery=E.$=b}();(function(){c.support={};var a=t.documentElement,b=t.createElement("script"),d=t.createElement("div"),e="script"+c.now();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"),
+k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false,
+scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent=
+false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom=
+1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="<div style='width:4px;'></div>";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display=
+"none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h=
+c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);
+else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h<l;h++){f=e[h].name;if(f.indexOf("data-")===0){f=f.substr(5);ka(this[0],f,d[f])}}}return d}else if(typeof a==="object")return this.each(function(){c.data(this,
+a)});var k=a.split(".");k[1]=k[1]?"."+k[1]:"";if(b===B){d=this.triggerHandler("getData"+k[1]+"!",[k[0]]);if(d===B&&this.length){d=c.data(this[0],a);d=ka(this[0],a,d)}return d===B&&k[1]?this.data(k[0]):d}else return this.each(function(){var o=c(this),x=[k[0],b];o.triggerHandler("setData"+k[1]+"!",x);c.data(this,a,b);o.triggerHandler("changeData"+k[1]+"!",x)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=
+c.data(a,b);if(!d)return e||[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===B)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,
+a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var sa=/[\n\t]/g,ha=/\s+/,Sa=/\r/g,Ta=/^(?:href|src|style)$/,Ua=/^(?:button|input)$/i,Va=/^(?:button|input|object|select|textarea)$/i,Wa=/^a(?:rea)?$/i,ta=/^(?:radio|checkbox)$/i;c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",
+colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(x){var r=c(this);r.addClass(a.call(this,x,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===
+1)if(f.className){for(var h=" "+f.className+" ",l=f.className,k=0,o=b.length;k<o;k++)if(h.indexOf(" "+b[k]+" ")<0)l+=" "+b[k];f.className=c.trim(l)}else f.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(o){var x=c(this);x.removeClass(a.call(this,o,x.attr("class")))});if(a&&typeof a==="string"||a===B)for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1&&f.className)if(a){for(var h=(" "+f.className+" ").replace(sa," "),
+l=0,k=b.length;l<k;l++)h=h.replace(" "+b[l]+" "," ");f.className=c.trim(h)}else f.className=""}return this},toggleClass:function(a,b){var d=typeof a,e=typeof b==="boolean";if(c.isFunction(a))return this.each(function(f){var h=c(this);h.toggleClass(a.call(this,f,h.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var f,h=0,l=c(this),k=b,o=a.split(ha);f=o[h++];){k=e?k:!l.hasClass(f);l[k?"addClass":"removeClass"](f)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,
+"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(sa," ").indexOf(a)>-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";
+if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h<e;h++){var l=f[h];if(l.selected&&(c.support.optDisabled?!l.disabled:l.getAttribute("disabled")===null)&&(!l.parentNode.disabled||!c.nodeName(l.parentNode,"optgroup"))){a=c(l).val();if(b)return a;d.push(a)}}return d}if(ta.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Sa,"")}return B}var k=c.isFunction(a);return this.each(function(o){var x=c(this),r=a;if(this.nodeType===1){if(k)r=
+a.call(this,o,x.val());if(r==null)r="";else if(typeof r==="number")r+="";else if(c.isArray(r))r=c.map(r,function(C){return C==null?"":C+""});if(c.isArray(r)&&ta.test(this.type))this.checked=c.inArray(x.val(),r)>=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},
+attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&
+b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0};
+c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,
+arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid=
+d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+
+c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h<A.length;h++){C=A[h];if(d.guid===C.guid){if(k||x.test(C.namespace)){e==null&&A.splice(h--,1);r.remove&&r.remove.call(a,C)}if(e!=null)break}}if(A.length===0||e!=null&&A.length===1){if(!r.teardown||r.teardown.call(a,o)===false)c.removeEvent(a,f,w.handle);delete I[f]}}else for(h=0;h<A.length;h++){C=A[h];if(k||x.test(C.namespace)){c.event.remove(a,r,C.handler,h);A.splice(h--,1)}}}if(c.isEmptyObject(I)){if(b=
+w.handle)b.elem=null;delete w.events;delete w.handle;if(typeof w==="function")c.removeData(a,J);else c.isEmptyObject(w)&&c.removeData(a)}}}}},trigger:function(a,b,d,e){var f=a.type||a;if(!e){a=typeof a==="object"?a[c.expando]?a:c.extend(c.Event(f),a):c.Event(f);if(f.indexOf("!")>=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===
+8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k===
+"click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+
+d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f<l;f++){var k=d[f];if(b||e.test(k.namespace)){a.handler=k.handler;a.data=k.data;a.handleObj=k;k=k.handler.apply(this,h);if(k!==B){a.result=k;if(k===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+fix:function(a){if(a[c.expando])return a;var b=a;a=c.Event(b);for(var d=this.props.length,e;d;){e=this.props[--d];a[e]=b[e]}if(!a.target)a.target=a.srcElement||t;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=t.documentElement;d=t.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
+d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(a.which==null&&(a.charCode!=null||a.keyCode!=null))a.which=a.charCode!=null?a.charCode:a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==B)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,Y(a.origType,a.selector),c.extend({},a,{handler:Ka,guid:a.handler.guid}))},remove:function(a){c.event.remove(this,
+Y(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,d){if(c.isWindow(this))this.onbeforeunload=d},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.removeEvent=t.removeEventListener?function(a,b,d){a.removeEventListener&&a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent&&a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=
+c.now();this[c.expando]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ca;var a=this.originalEvent;if(a)if(a.preventDefault)a.preventDefault();else a.returnValue=false},stopPropagation:function(){this.isPropagationStopped=ca;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ca;this.stopPropagation()},isDefaultPrevented:U,isPropagationStopped:U,isImmediatePropagationStopped:U};
+var va=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},wa=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?wa:va,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?wa:va)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!==
+"form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length){a.liveFired=B;return la("submit",this,arguments)}});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13){a.liveFired=B;return la("submit",this,arguments)}})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};if(!c.support.changeBubbles){var V,
+xa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired=
+B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type===
+"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]===
+0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h<k;h++)c.event.add(this[h],d,l,e)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault)for(var d in a)this.unbind(d,
+a[d]);else{d=0;for(var e=this.length;d<e;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,e){return this.live(b,d,e,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var d=c.Event(a);d.preventDefault();d.stopPropagation();c.event.trigger(d,b,this[0]);return d.result}},toggle:function(a){for(var b=arguments,d=
+1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(e){var f=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,f+1);e.preventDefault();return b[f].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var ya={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,e,f,h){var l,k=0,o,x,r=h||this.selector;h=h?this:c(this.context);if(typeof d===
+"object"&&!d.preventDefault){for(l in d)h[b](l,e,d[l],r);return this}if(c.isFunction(e)){f=e;e=B}for(d=(d||"").split(" ");(l=d[k++])!=null;){o=X.exec(l);x="";if(o){x=o[0];l=l.replace(X,"")}if(l==="hover")d.push("mouseenter"+x,"mouseleave"+x);else{o=l;if(l==="focus"||l==="blur"){d.push(ya[l]+x);l+=x}else l=(ya[l]||l)+x;if(b==="live"){x=0;for(var A=h.length;x<A;x++)c.event.add(h[x],"live."+Y(l,r),{data:e,selector:r,handler:f,origType:l,origHandler:f,preType:o})}else h.unbind("live."+Y(l,r),f)}}return this}});
+c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d,e){if(e==null){e=d;d=null}return arguments.length>0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
+(function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1&&!q){y.sizcache=n;y.sizset=p}if(y.nodeName.toLowerCase()===i){F=y;break}y=y[g]}m[p]=F}}}function b(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1){if(!q){y.sizcache=n;y.sizset=p}if(typeof i!=="string"){if(y===i){F=true;break}}else if(k.filter(i,
+[y]).length>0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3];
+break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr,
+q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h=
+l;g.sort(w);if(h)for(var i=1;i<g.length;i++)g[i]===g[i-1]&&g.splice(i--,1)}return g};k.matches=function(g,i){return k(g,null,null,i)};k.matchesSelector=function(g,i){return k(i,null,null,[g]).length>0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p<q;p++){var u,y=o.order[p];if(u=o.leftMatch[y].exec(g)){var F=u[1];u.splice(1,1);if(F.substr(F.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");m=o.find[y](u,i,n);if(m!=null){g=g.replace(o.match[y],"");break}}}}m||(m=i.getElementsByTagName("*"));
+return{set:m,expr:g}};k.filter=function(g,i,n,m){for(var p,q,u=g,y=[],F=i,M=i&&i[0]&&k.isXML(i[0]);g&&i.length;){for(var N in o.filter)if((p=o.leftMatch[N].exec(g))!=null&&p[2]){var O,D,R=o.filter[N];D=p[1];q=false;p.splice(1,1);if(D.substr(D.length-1)!=="\\"){if(F===y)y=[];if(o.preFilter[N])if(p=o.preFilter[N](p,F,n,y,m,M)){if(p===true)continue}else q=O=true;if(p)for(var j=0;(D=F[j])!=null;j++)if(D){O=R(D,p,j,F);var s=m^!!O;if(n&&O!=null)if(s)q=true;else F[j]=false;else if(s){y.push(D);q=true}}if(O!==
+B){n||(F=y);g=g.replace(o.match[N],"");if(!q)return[];break}}}if(g===u)if(q==null)k.error(g);else break;u=g}return F};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var o=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
+POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,i){var n=typeof i==="string",m=n&&!/\W/.test(i);n=n&&!m;if(m)i=i.toLowerCase();m=0;for(var p=g.length,q;m<p;m++)if(q=g[m]){for(;(q=q.previousSibling)&&q.nodeType!==1;);g[m]=n||q&&q.nodeName.toLowerCase()===
+i?q||false:q===i}n&&k.filter(i,g,true)},">":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p<q;p++){if(n=g[p]){n=n.parentNode;g[p]=n.nodeName.toLowerCase()===i?n:false}}else{for(;p<q;p++)if(n=g[p])g[p]=m?n.parentNode:n.parentNode===i;m&&k.filter(i,g,true)}},"":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=i=i.toLowerCase();q=a}q("parentNode",i,p,g,m,n)},"~":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=
+i=i.toLowerCase();q=a}q("previousSibling",i,p,g,m,n)}},find:{ID:function(g,i,n){if(typeof i.getElementById!=="undefined"&&!n)return(g=i.getElementById(g[1]))&&g.parentNode?[g]:[]},NAME:function(g,i){if(typeof i.getElementsByName!=="undefined"){for(var n=[],m=i.getElementsByName(g[1]),p=0,q=m.length;p<q;p++)m[p].getAttribute("name")===g[1]&&n.push(m[p]);return n.length===0?null:n}},TAG:function(g,i){return i.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,i,n,m,p,q){g=" "+g[1].replace(/\\/g,
+"")+" ";if(q)return g;q=0;for(var u;(u=i[q])!=null;q++)if(u)if(p^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n,
+m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===
+true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===
+g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return i<n[3]-0},gt:function(g,i,n){return i>n[3]-0},nth:function(g,i,n){return n[3]-
+0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n<m;n++)if(i[n]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+p)},CHILD:function(g,i){var n=i[1],m=g;switch(n){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(n===
+"first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":n=i[2];var p=i[3];if(n===1&&p===0)return true;var q=i[0],u=g.parentNode;if(u&&(u.sizcache!==q||!g.nodeIndex)){var y=0;for(m=u.firstChild;m;m=m.nextSibling)if(m.nodeType===1)m.nodeIndex=++y;u.sizcache=q}m=g.nodeIndex-p;return n===0?m===0:m%n===0&&m/n>=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===
+i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]];
+if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m,
+g);else if(typeof g.length==="number")for(var p=g.length;n<p;n++)m.push(g[n]);else for(;g[n];n++)m.push(g[n]);return m}}var w,I;if(t.documentElement.compareDocumentPosition)w=function(g,i){if(g===i){h=true;return 0}if(!g.compareDocumentPosition||!i.compareDocumentPosition)return g.compareDocumentPosition?-1:1;return g.compareDocumentPosition(i)&4?-1:1};else{w=function(g,i){var n,m,p=[],q=[];n=g.parentNode;m=i.parentNode;var u=n;if(g===i){h=true;return 0}else if(n===m)return I(g,i);else if(n){if(!m)return 1}else return-1;
+for(;u;){p.unshift(u);u=u.parentNode}for(u=m;u;){q.unshift(u);u=u.parentNode}n=p.length;m=q.length;for(u=0;u<n&&u<m;u++)if(p[u]!==q[u])return I(p[u],q[u]);return u===n?I(g,q[u],-1):I(p[u],i,1)};I=function(g,i,n){if(g===i)return n;for(g=g.nextSibling;g;){if(g===i)return-1;g=g.nextSibling}return 1}}k.getText=function(g){for(var i="",n,m=0;g[m];m++){n=g[m];if(n.nodeType===3||n.nodeType===4)i+=n.nodeValue;else if(n.nodeType!==8)i+=k.getText(n.childNodes)}return i};(function(){var g=t.createElement("div"),
+i="script"+(new Date).getTime(),n=t.documentElement;g.innerHTML="<a name='"+i+"'/>";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g);
+n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&&
+function(){var g=k,i=t.createElement("div");i.innerHTML="<p class='TEST'></p>";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F||
+p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g=
+t.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition?
+function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n<u;n++)k(g,q[n],m);return k.filter(p,m)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=k.getText;c.isXMLDoc=k.isXML;
+c.contains=k.contains})();var Za=/Until$/,$a=/^(?:parents|prevUntil|prevAll)/,ab=/,/,Na=/^.[^:#\[\.,]*$/,bb=Array.prototype.slice,cb=c.expr.match.POS;c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,e=0,f=this.length;e<f;e++){d=b.length;c.find(a,this[e],b);if(e>0)for(var h=d;h<b.length;h++)for(var l=0;l<d;l++)if(b[l]===b[h]){b.splice(h--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,e=b.length;d<e;d++)if(c.contains(this,b[d]))return true})},
+not:function(a){return this.pushStack(ma(this,a,false),"not",a)},filter:function(a){return this.pushStack(ma(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e<f;e++){l=a[e];k[l]||(k[l]=c.expr.match.POS.test(l)?c(l,b||this.context):l)}for(;h&&h.ownerDocument&&h!==b;){for(l in k){e=k[l];if(e.jquery?e.index(h)>-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h=
+h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e<f;e++)for(h=this[e];h;)if(l?l.index(h)>-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):
+c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,
+2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,
+b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&
+e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/<tbody/i,eb=/<|&#?\w+;/,Ca=/<(?:script|object|embed|option|style)/i,Da=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/\=([^="'>\s]+\/)>/g,P={option:[1,
+"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
+c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
+wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
+prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
+this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
+return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null;
+else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1></$2>");try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(e){this.empty().append(a)}}else c.isFunction(a)?this.each(function(f){var h=c(this);h.html(a.call(this,f,h.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=
+c(this),e=d.html();d.replaceWith(a.call(this,b,e))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){var e,f,h,l=a[0],k=[];if(!c.support.checkClone&&arguments.length===3&&typeof l==="string"&&Da.test(l))return this.each(function(){c(this).domManip(a,
+b,d,true)});if(c.isFunction(l))return this.each(function(x){var r=c(this);a[0]=l.call(this,x,b?r.html():B);r.domManip(a,b,d)});if(this[0]){e=l&&l.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:c.buildFragment(a,this,k);h=e.fragment;if(f=h.childNodes.length===1?h=h.firstChild:h.firstChild){b=b&&c.nodeName(f,"tr");f=0;for(var o=this.length;f<o;f++)d.call(b?c.nodeName(this[f],"table")?this[f].getElementsByTagName("tbody")[0]||this[f].appendChild(this[f].ownerDocument.createElement("tbody")):
+this[f]:this[f],f>0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",
+prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f<h;f++){var l=(f>0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument||
+b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1></$2>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]==="<table>"&&!x?r.childNodes:[];for(o=k.length-
+1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));
+d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i,
+jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,
+zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),
+h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b);
+if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=
+d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left;
+e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+ob=/^(?:select|textarea)/i,pb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,qb=/^(?:GET|HEAD)$/,Ra=/\[\]$/,T=/\=\?(&|$)/,ja=/\?/,rb=/([?&])_=[^&]*/,sb=/^(\w+:)?\/\/([^\/?#]+)/,tb=/%20/g,ub=/#.*$/,Ha=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b===
+"object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(l,k){if(k==="success"||k==="notmodified")h.html(f?c("<div>").append(l.responseText.replace(nb,"")).find(f):l.responseText);d&&h.each(d,[l.responseText,k,l])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&
+!this.disabled&&(this.checked||ob.test(this.nodeName)||pb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})},
+getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html",
+script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),l=qb.test(h);b.url=b.url.replace(ub,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ja.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data||
+!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+mb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var k=E[d];E[d]=function(m){if(c.isFunction(k))k(m);else{E[d]=B;try{delete E[d]}catch(p){}}f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);r&&r.removeChild(A)}}if(b.dataType==="script"&&b.cache===null)b.cache=
+false;if(b.cache===false&&l){var o=c.now(),x=b.url.replace(rb,"$1_="+o);b.url=x+(x===b.url?(ja.test(b.url)?"&":"?")+"_="+o:"")}if(b.data&&l)b.url+=(ja.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");o=(o=sb.exec(b.url))&&(o[1]&&o[1].toLowerCase()!==location.protocol||o[2].toLowerCase()!==location.host);if(b.dataType==="script"&&h==="GET"&&o){var r=t.getElementsByTagName("head")[0]||t.documentElement,A=t.createElement("script");if(b.scriptCharset)A.charset=b.scriptCharset;
+A.src=b.url;if(!d){var C=false;A.onload=A.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);A.onload=A.onreadystatechange=null;r&&A.parentNode&&r.removeChild(A)}}}r.insertBefore(A,r.firstChild);return B}var J=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type",
+b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&&
+c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d||
+c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}},param:function(a,b){var d=[],e=function(h,l){l=c.isFunction(l)?l():l;d[d.length]=
+encodeURIComponent(h)+"="+encodeURIComponent(l)};if(b===B)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)da(f,a[f],b,e);return d.join("&").replace(tb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",
+[b,a])},handleComplete:function(a,b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),
+e=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});
+if(E.ActiveXObject)c.ajaxSettings.xhr=function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var ea={},vb=/^(?:toggle|show|hide)$/,wb=/^([+\-]=)?([\d+.\-]+)(.*)$/,ba,pa=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",
+3),a,b,d);else{d=0;for(var e=this.length;d<e;d++){a=this[d];b=a.style.display;if(!c.data(a,"olddisplay")&&b==="none")b=a.style.display="";b===""&&c.css(a,"display")==="none"&&c.data(a,"olddisplay",qa(a.nodeName))}for(d=0;d<e;d++){a=this[d];b=a.style.display;if(b===""||b==="none")a.style.display=c.data(a,"olddisplay")||""}return this}},hide:function(a,b,d){if(a||a===0)return this.animate(S("hide",3),a,b,d);else{a=0;for(b=this.length;a<b;a++){d=c.css(this[a],"display");d!=="none"&&c.data(this[a],"olddisplay",
+d)}for(a=0;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b,d){var e=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||e?this.each(function(){var f=e?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(S("toggle",3),a,b,d);return this},fadeTo:function(a,b,d,e){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d,e)},animate:function(a,b,d,e){var f=c.speed(b,
+d,e);if(c.isEmptyObject(a))return this.each(f.complete);return this[f.queue===false?"each":"queue"](function(){var h=c.extend({},f),l,k=this.nodeType===1,o=k&&c(this).is(":hidden"),x=this;for(l in a){var r=c.camelCase(l);if(l!==r){a[r]=a[l];delete a[l];l=r}if(a[l]==="hide"&&o||a[l]==="show"&&!o)return h.complete.call(this);if(k&&(l==="height"||l==="width")){h.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(c.css(this,"display")==="inline"&&c.css(this,"float")==="none")if(c.support.inlineBlockNeedsLayout)if(qa(this.nodeName)===
+"inline")this.style.display="inline-block";else{this.style.display="inline";this.style.zoom=1}else this.style.display="inline-block"}if(c.isArray(a[l])){(h.specialEasing=h.specialEasing||{})[l]=a[l][1];a[l]=a[l][0]}}if(h.overflow!=null)this.style.overflow="hidden";h.curAnim=c.extend({},a);c.each(a,function(A,C){var J=new c.fx(x,h,A);if(vb.test(C))J[C==="toggle"?o?"show":"hide":C](a);else{var w=wb.exec(C),I=J.cur()||0;if(w){var L=parseFloat(w[2]),g=w[3]||"px";if(g!=="px"){c.style(x,A,(L||1)+g);I=(L||
+1)/J.cur()*I;c.style(x,A,I+g)}if(w[1])L=(w[1]==="-="?-1:1)*L+I;J.custom(I,L,g)}else J.custom(I,C,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var e=d.length-1;e>=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b,
+d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a*
+Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(l){return f.step(l)}
+var f=this,h=c.fx;this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;e.elem=this.elem;if(e()&&c.timers.push(e)&&!ba)ba=setInterval(h.tick,h.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;
+this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(k,o){f.style["overflow"+o]=h.overflow[k]})}this.options.hide&&c(this.elem).hide();if(this.options.hide||
+this.options.show)for(var l in this.options.curAnim)c.style(this.elem,l,this.options.orig[l]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=
+c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},interval:13,stop:function(){clearInterval(ba);ba=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===
+b.elem}).length};var xb=/^t(?:able|d|h)$/i,Ia=/^(?:body|html)$/i;c.fn.offset="getBoundingClientRect"in t.documentElement?function(a){var b=this[0],d;if(a)return this.each(function(l){c.offset.setOffset(this,a,l)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);try{d=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,h=f.documentElement;if(!d||!c.contains(h,b))return d||{top:0,left:0};b=f.body;f=fa(f);return{top:d.top+(f.pageYOffset||c.support.boxModel&&
+h.scrollTop||b.scrollTop)-(h.clientTop||b.clientTop||0),left:d.left+(f.pageXOffset||c.support.boxModel&&h.scrollLeft||b.scrollLeft)-(h.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(x){c.offset.setOffset(this,a,x)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d,e=b.offsetParent,f=b.ownerDocument,h=f.documentElement,l=f.body;d=(f=f.defaultView)?f.getComputedStyle(b,null):b.currentStyle;
+for(var k=b.offsetTop,o=b.offsetLeft;(b=b.parentNode)&&b!==l&&b!==h;){if(c.offset.supportsFixedPosition&&d.position==="fixed")break;d=f?f.getComputedStyle(b,null):b.currentStyle;k-=b.scrollTop;o-=b.scrollLeft;if(b===e){k+=b.offsetTop;o+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&xb.test(b.nodeName))){k+=parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}e=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"){k+=
+parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}d=d}if(d.position==="relative"||d.position==="static"){k+=l.offsetTop;o+=l.offsetLeft}if(c.offset.supportsFixedPosition&&d.position==="fixed"){k+=Math.max(h.scrollTop,l.scrollTop);o+=Math.max(h.scrollLeft,l.scrollLeft)}return{top:k,left:o}};c.offset={initialize:function(){var a=t.body,b=t.createElement("div"),d,e,f,h=parseFloat(c.css(a,"marginTop"))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",
+height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);d=b.firstChild;e=d.firstChild;f=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=e.offsetTop!==5;this.doesAddBorderForTableAndCells=
+f.offsetTop===5;e.style.position="fixed";e.style.top="20px";this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15;e.style.position=e.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==h;a.removeChild(b);c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.css(a,
+"marginTop"))||0;d+=parseFloat(c.css(a,"marginLeft"))||0}return{top:b,left:d}},setOffset:function(a,b,d){var e=c.css(a,"position");if(e==="static")a.style.position="relative";var f=c(a),h=f.offset(),l=c.css(a,"top"),k=c.css(a,"left"),o=e==="absolute"&&c.inArray("auto",[l,k])>-1;e={};var x={};if(o)x=f.position();l=o?x.top:parseInt(l,10)||0;k=o?x.left:parseInt(k,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+l;if(b.left!=null)e.left=b.left-h.left+k;"using"in b?b.using.call(a,
+e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Ia.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||t.body;a&&!Ia.test(a.nodeName)&&
+c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==B)return this.each(function(){if(h=fa(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=fa(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();
+c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(l){var k=c(this);k[d](e.call(this,l,k[d]()))});if(c.isWindow(f))return f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b];else if(f.nodeType===9)return Math.max(f.documentElement["client"+
+b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]);else if(e===B){f=c.css(f,d);var h=parseFloat(f);return c.isNaN(h)?f:h}else return this.css(d,typeof e==="string"?e:e+"px")}})})(window);
diff --git a/config/snort-dev/javascript/jquery.colorbox-min.js b/config/snort-dev/javascript/jquery.colorbox-min.js
new file mode 100644
index 00000000..9b5e030a
--- /dev/null
+++ b/config/snort-dev/javascript/jquery.colorbox-min.js
@@ -0,0 +1,4 @@
+// ColorBox v1.3.14 - a full featured, light-weight, customizable lightbox based on jQuery 1.3+
+// Copyright (c) 2010 Jack Moore - jack@colorpowered.com
+// Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
+(function(b,ib){var t="none",M="LoadedContent",c=false,v="resize.",o="y",q="auto",e=true,L="nofollow",m="x";function f(a,c){a=a?' id="'+i+a+'"':"";c=c?' style="'+c+'"':"";return b("<div"+a+c+"/>")}function p(a,b){b=b===m?n.width():n.height();return typeof a==="string"?Math.round(/%/.test(a)?b/100*parseInt(a,10):parseInt(a,10)):a}function U(b){return a.photo||/\.(gif|png|jpg|jpeg|bmp)(?:\?([^#]*))?(?:#(\.*))?$/i.test(b)}function cb(a){for(var c in a)if(b.isFunction(a[c])&&c.substring(0,2)!=="on")a[c]=a[c].call(l);a.rel=a.rel||l.rel||L;a.href=a.href||b(l).attr("href");a.title=a.title||l.title;return a}function w(c,a){a&&a.call(l);b.event.trigger(c)}function jb(){var b,e=i+"Slideshow_",c="click."+i,f,k;if(a.slideshow&&h[1]){f=function(){F.text(a.slideshowStop).unbind(c).bind(V,function(){if(g<h.length-1||a.loop)b=setTimeout(d.next,a.slideshowSpeed)}).bind(W,function(){clearTimeout(b)}).one(c+" "+N,k);j.removeClass(e+"off").addClass(e+"on");b=setTimeout(d.next,a.slideshowSpeed)};k=function(){clearTimeout(b);F.text(a.slideshowStart).unbind([V,W,N,c].join(" ")).one(c,f);j.removeClass(e+"on").addClass(e+"off")};a.slideshowAuto?f():k()}}function db(c){if(!O){l=c;a=cb(b.extend({},b.data(l,r)));h=b(l);g=0;if(a.rel!==L){h=b("."+G).filter(function(){return (b.data(this,r).rel||this.rel)===a.rel});g=h.index(l);if(g===-1){h=h.add(l);g=h.length-1}}if(!u){u=E=e;j.show();if(a.returnFocus)try{l.blur();b(l).one(eb,function(){try{this.focus()}catch(a){}})}catch(f){}x.css({opacity:+a.opacity,cursor:a.overlayClose?"pointer":q}).show();a.w=p(a.initialWidth,m);a.h=p(a.initialHeight,o);d.position(0);X&&n.bind(v+P+" scroll."+P,function(){x.css({width:n.width(),height:n.height(),top:n.scrollTop(),left:n.scrollLeft()})}).trigger("scroll."+P);w(fb,a.onOpen);Y.add(H).add(I).add(F).add(Z).hide();ab.html(a.close).show()}d.load(e)}}var gb={transition:"elastic",speed:300,width:c,initialWidth:"600",innerWidth:c,maxWidth:c,height:c,initialHeight:"450",innerHeight:c,maxHeight:c,scalePhotos:e,scrolling:e,inline:c,html:c,iframe:c,photo:c,href:c,title:c,rel:c,opacity:.9,preloading:e,current:"image {current} of {total}",previous:"previous",next:"next",close:"close",open:c,returnFocus:e,loop:e,slideshow:c,slideshowAuto:e,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",onOpen:c,onLoad:c,onComplete:c,onCleanup:c,onClosed:c,overlayClose:e,escKey:e,arrowKey:e},r="colorbox",i="cbox",fb=i+"_open",W=i+"_load",V=i+"_complete",N=i+"_cleanup",eb=i+"_closed",Q=i+"_purge",hb=i+"_loaded",A=b.browser.msie&&!b.support.opacity,X=A&&b.browser.version<7,P=i+"_IE6",x,j,B,s,bb,T,R,S,h,n,k,J,K,Z,Y,F,I,H,ab,C,D,y,z,l,g,a,u,E,O=c,d,G=i+"Element";d=b.fn[r]=b[r]=function(c,f){var a=this,d;if(!a[0]&&a.selector)return a;c=c||{};if(f)c.onComplete=f;if(!a[0]||a.selector===undefined){a=b("<a/>");c.open=e}a.each(function(){b.data(this,r,b.extend({},b.data(this,r)||gb,c));b(this).addClass(G)});d=c.open;if(b.isFunction(d))d=d.call(a);d&&db(a[0]);return a};d.init=function(){var l="hover",m="clear:left";n=b(ib);j=f().attr({id:r,"class":A?i+"IE":""});x=f("Overlay",X?"position:absolute":"").hide();B=f("Wrapper");s=f("Content").append(k=f(M,"width:0; height:0; overflow:hidden"),K=f("LoadingOverlay").add(f("LoadingGraphic")),Z=f("Title"),Y=f("Current"),I=f("Next"),H=f("Previous"),F=f("Slideshow").bind(fb,jb),ab=f("Close"));B.append(f().append(f("TopLeft"),bb=f("TopCenter"),f("TopRight")),f(c,m).append(T=f("MiddleLeft"),s,R=f("MiddleRight")),f(c,m).append(f("BottomLeft"),S=f("BottomCenter"),f("BottomRight"))).children().children().css({"float":"left"});J=f(c,"position:absolute; width:9999px; visibility:hidden; display:none");b("body").prepend(x,j.append(B,J));s.children().hover(function(){b(this).addClass(l)},function(){b(this).removeClass(l)}).addClass(l);C=bb.height()+S.height()+s.outerHeight(e)-s.height();D=T.width()+R.width()+s.outerWidth(e)-s.width();y=k.outerHeight(e);z=k.outerWidth(e);j.css({"padding-bottom":C,"padding-right":D}).hide();I.click(d.next);H.click(d.prev);ab.click(d.close);s.children().removeClass(l);b("."+G).live("click",function(a){if(!(a.button!==0&&typeof a.button!=="undefined"||a.ctrlKey||a.shiftKey||a.altKey)){a.preventDefault();db(this)}});x.click(function(){a.overlayClose&&d.close()});b(document).bind("keydown",function(b){if(u&&a.escKey&&b.keyCode===27){b.preventDefault();d.close()}if(u&&a.arrowKey&&!E&&h[1])if(b.keyCode===37&&(g||a.loop)){b.preventDefault();H.click()}else if(b.keyCode===39&&(g<h.length-1||a.loop)){b.preventDefault();I.click()}})};d.remove=function(){j.add(x).remove();b("."+G).die("click").removeData(r).removeClass(G)};d.position=function(f,d){function b(a){bb[0].style.width=S[0].style.width=s[0].style.width=a.style.width;K[0].style.height=K[1].style.height=s[0].style.height=T[0].style.height=R[0].style.height=a.style.height}var e,h=Math.max(document.documentElement.clientHeight-a.h-y-C,0)/2+n.scrollTop(),g=Math.max(n.width()-a.w-z-D,0)/2+n.scrollLeft();e=j.width()===a.w+z&&j.height()===a.h+y?0:f;B[0].style.width=B[0].style.height="9999px";j.dequeue().animate({width:a.w+z,height:a.h+y,top:h,left:g},{duration:e,complete:function(){b(this);E=c;B[0].style.width=a.w+z+D+"px";B[0].style.height=a.h+y+C+"px";d&&d()},step:function(){b(this)}})};d.resize=function(b){if(u){b=b||{};if(b.width)a.w=p(b.width,m)-z-D;if(b.innerWidth)a.w=p(b.innerWidth,m);k.css({width:a.w});if(b.height)a.h=p(b.height,o)-y-C;if(b.innerHeight)a.h=p(b.innerHeight,o);if(!b.innerHeight&&!b.height){b=k.wrapInner("<div style='overflow:auto'></div>").children();a.h=b.height();b.replaceWith(b.children())}k.css({height:a.h});d.position(a.transition===t?0:a.speed)}};d.prep=function(o){var e="hidden";function m(t){var q,f,o,e,m=h.length,s=a.loop;d.position(t,function(){if(u){A&&p&&k.fadeIn(100);k.show();w(hb);Z.show().html(a.title);if(m>1){typeof a.current==="string"&&Y.html(a.current.replace(/\{current\}/,g+1).replace(/\{total\}/,m)).show();I[s||g<m-1?"show":"hide"]().html(a.next);H[s||g?"show":"hide"]().html(a.previous);q=g?h[g-1]:h[m-1];o=g<m-1?h[g+1]:h[0];a.slideshow&&F.show();if(a.preloading){e=b.data(o,r).href||o.href;f=b.data(q,r).href||q.href;e=b.isFunction(e)?e.call(o):e;f=b.isFunction(f)?f.call(q):f;if(U(e))b("<img/>")[0].src=e;if(U(f))b("<img/>")[0].src=f}}K.hide();if(a.transition==="fade")j.fadeTo(l,1,function(){if(A)j[0].style.filter=c});else if(A)j[0].style.filter=c;n.bind(v+i,function(){d.position(0)});w(V,a.onComplete)}})}if(u){var p,l=a.transition===t?0:a.speed;n.unbind(v+i);k.remove();k=f(M).html(o);k.hide().appendTo(J.show()).css({width:function(){a.w=a.w||k.width();a.w=a.mw&&a.mw<a.w?a.mw:a.w;return a.w}(),overflow:a.scrolling?q:e}).css({height:function(){a.h=a.h||k.height();a.h=a.mh&&a.mh<a.h?a.mh:a.h;return a.h}()}).prependTo(s);J.hide();b("#"+i+"Photo").css({cssFloat:t,marginLeft:q,marginRight:q});X&&b("select").not(j.find("select")).filter(function(){return this.style.visibility!==e}).css({visibility:e}).one(N,function(){this.style.visibility="inherit"});a.transition==="fade"?j.fadeTo(l,0,function(){m(0)}):m(l)}};d.load=function(u){var n,c,s,q=d.prep;E=e;l=h[g];u||(a=cb(b.extend({},b.data(l,r))));w(Q);w(W,a.onLoad);a.h=a.height?p(a.height,o)-y-C:a.innerHeight&&p(a.innerHeight,o);a.w=a.width?p(a.width,m)-z-D:a.innerWidth&&p(a.innerWidth,m);a.mw=a.w;a.mh=a.h;if(a.maxWidth){a.mw=p(a.maxWidth,m)-z-D;a.mw=a.w&&a.w<a.mw?a.w:a.mw}if(a.maxHeight){a.mh=p(a.maxHeight,o)-y-C;a.mh=a.h&&a.h<a.mh?a.h:a.mh}n=a.href;K.show();if(a.inline){f().hide().insertBefore(b(n)[0]).one(Q,function(){b(this).replaceWith(k.children())});q(b(n))}else if(a.iframe){j.one(hb,function(){var c=b("<iframe name='"+(new Date).getTime()+"' frameborder=0"+(a.scrolling?"":" scrolling='no'")+(A?" allowtransparency='true'":"")+" style='width:100%; height:100%; border:0; display:block;'/>");c[0].src=a.href;c.appendTo(k).one(Q,function(){c[0].src='//about:blank'})});q(" ")}else if(a.html)q(a.html);else if(U(n)){c=new Image;c.onload=function(){var e;c.onload=null;c.id=i+"Photo";b(c).css({border:t,display:"block",cssFloat:"left"});if(a.scalePhotos){s=function(){c.height-=c.height*e;c.width-=c.width*e};if(a.mw&&c.width>a.mw){e=(c.width-a.mw)/c.width;s()}if(a.mh&&c.height>a.mh){e=(c.height-a.mh)/c.height;s()}}if(a.h)c.style.marginTop=Math.max(a.h-c.height,0)/2+"px";h[1]&&(g<h.length-1||a.loop)&&b(c).css({cursor:"pointer"}).click(d.next);if(A)c.style.msInterpolationMode="bicubic";setTimeout(function(){q(c)},1)};setTimeout(function(){c.src=n},1)}else n&&J.load(n,function(d,c,a){q(c==="error"?"Request unsuccessful: "+a.statusText:b(this).children())})};d.next=function(){if(!E){g=g<h.length-1?g+1:0;d.load()}};d.prev=function(){if(!E){g=g?g-1:h.length-1;d.load()}};d.close=function(){if(u&&!O){O=e;u=c;w(N,a.onCleanup);n.unbind("."+i+" ."+P);x.fadeTo("fast",0);j.stop().fadeTo("fast",0,function(){w(Q);k.remove();j.add(x).css({opacity:1,cursor:q}).hide();setTimeout(function(){O=c;w(eb,a.onClosed)},1)})}};d.element=function(){return b(l)};d.settings=gb;b(d.init)})(jQuery,this) \ No newline at end of file
diff --git a/config/snort-dev/javascript/jquery.form.js b/config/snort-dev/javascript/jquery.form.js
new file mode 100644
index 00000000..2b853df4
--- /dev/null
+++ b/config/snort-dev/javascript/jquery.form.js
@@ -0,0 +1,785 @@
+/*!
+ * jQuery Form Plugin
+ * version: 2.49 (18-OCT-2010)
+ * @requires jQuery v1.3.2 or later
+ *
+ * Examples and documentation at: http://malsup.com/jquery/form/
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+;(function($) {
+
+/*
+ Usage Note:
+ -----------
+ Do not use both ajaxSubmit and ajaxForm on the same form. These
+ functions are intended to be exclusive. Use ajaxSubmit if you want
+ to bind your own submit handler to the form. For example,
+
+ $(document).ready(function() {
+ $('#myForm').bind('submit', function(e) {
+ e.preventDefault(); // <-- important
+ $(this).ajaxSubmit({
+ target: '#output'
+ });
+ });
+ });
+
+ Use ajaxForm when you want the plugin to manage all the event binding
+ for you. For example,
+
+ $(document).ready(function() {
+ $('#myForm').ajaxForm({
+ target: '#output'
+ });
+ });
+
+ When using ajaxForm, the ajaxSubmit function will be invoked for you
+ at the appropriate time.
+*/
+
+/**
+ * ajaxSubmit() provides a mechanism for immediately submitting
+ * an HTML form using AJAX.
+ */
+$.fn.ajaxSubmit = function(options) {
+ // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
+ if (!this.length) {
+ log('ajaxSubmit: skipping submit process - no element selected');
+ return this;
+ }
+
+ if (typeof options == 'function') {
+ options = { success: options };
+ }
+
+ var url = $.trim(this.attr('action'));
+ if (url) {
+ // clean url (don't include hash vaue)
+ url = (url.match(/^([^#]+)/)||[])[1];
+ }
+ url = url || window.location.href || '';
+
+ options = $.extend(true, {
+ url: url,
+ type: this.attr('method') || 'GET',
+ iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
+ }, options);
+
+ // hook for manipulating the form data before it is extracted;
+ // convenient for use with rich editors like tinyMCE or FCKEditor
+ var veto = {};
+ this.trigger('form-pre-serialize', [this, options, veto]);
+ if (veto.veto) {
+ log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
+ return this;
+ }
+
+ // provide opportunity to alter form data before it is serialized
+ if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
+ log('ajaxSubmit: submit aborted via beforeSerialize callback');
+ return this;
+ }
+
+ var n,v,a = this.formToArray(options.semantic);
+ if (options.data) {
+ options.extraData = options.data;
+ for (n in options.data) {
+ if(options.data[n] instanceof Array) {
+ for (var k in options.data[n]) {
+ a.push( { name: n, value: options.data[n][k] } );
+ }
+ }
+ else {
+ v = options.data[n];
+ v = $.isFunction(v) ? v() : v; // if value is fn, invoke it
+ a.push( { name: n, value: v } );
+ }
+ }
+ }
+
+ // give pre-submit callback an opportunity to abort the submit
+ if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
+ log('ajaxSubmit: submit aborted via beforeSubmit callback');
+ return this;
+ }
+
+ // fire vetoable 'validate' event
+ this.trigger('form-submit-validate', [a, this, options, veto]);
+ if (veto.veto) {
+ log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
+ return this;
+ }
+
+ var q = $.param(a);
+
+ if (options.type.toUpperCase() == 'GET') {
+ options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
+ options.data = null; // data is null for 'get'
+ }
+ else {
+ options.data = q; // data is the query string for 'post'
+ }
+
+ var $form = this, callbacks = [];
+ if (options.resetForm) {
+ callbacks.push(function() { $form.resetForm(); });
+ }
+ if (options.clearForm) {
+ callbacks.push(function() { $form.clearForm(); });
+ }
+
+ // perform a load on the target only if dataType is not provided
+ if (!options.dataType && options.target) {
+ var oldSuccess = options.success || function(){};
+ callbacks.push(function(data) {
+ var fn = options.replaceTarget ? 'replaceWith' : 'html';
+ $(options.target)[fn](data).each(oldSuccess, arguments);
+ });
+ }
+ else if (options.success) {
+ callbacks.push(options.success);
+ }
+
+ options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
+ var context = options.context || options; // jQuery 1.4+ supports scope context
+ for (var i=0, max=callbacks.length; i < max; i++) {
+ callbacks[i].apply(context, [data, status, xhr || $form, $form]);
+ }
+ };
+
+ // are there files to upload?
+ var fileInputs = $('input:file', this).length > 0;
+ var mp = 'multipart/form-data';
+ var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);
+
+ // options.iframe allows user to force iframe mode
+ // 06-NOV-09: now defaulting to iframe mode if file input is detected
+ if (options.iframe !== false && (fileInputs || options.iframe || multipart)) {
+ // hack to fix Safari hang (thanks to Tim Molendijk for this)
+ // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
+ if (options.closeKeepAlive) {
+ $.get(options.closeKeepAlive, fileUpload);
+ }
+ else {
+ fileUpload();
+ }
+ }
+ else {
+ $.ajax(options);
+ }
+
+ // fire 'notify' event
+ this.trigger('form-submit-notify', [this, options]);
+ return this;
+
+
+ // private function for handling file uploads (hat tip to YAHOO!)
+ function fileUpload() {
+ var form = $form[0];
+
+ if ($(':input[name=submit],:input[id=submit]', form).length) {
+ // if there is an input with a name or id of 'submit' then we won't be
+ // able to invoke the submit fn on the form (at least not x-browser)
+ alert('Error: Form elements must not have name or id of "submit".');
+ return;
+ }
+
+ var s = $.extend(true, {}, $.ajaxSettings, options);
+ s.context = s.context || s;
+ var id = 'jqFormIO' + (new Date().getTime()), fn = '_'+id;
+ window[fn] = function() {
+ var f = $io.data('form-plugin-onload');
+ if (f) {
+ f();
+ window[fn] = undefined;
+ try { delete window[fn]; } catch(e){}
+ }
+ }
+ var $io = $('<iframe id="' + id + '" name="' + id + '" src="'+ s.iframeSrc +'" onload="window[\'_\'+this.id]()" />');
+ var io = $io[0];
+
+ $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
+
+ var xhr = { // mock object
+ aborted: 0,
+ responseText: null,
+ responseXML: null,
+ status: 0,
+ statusText: 'n/a',
+ getAllResponseHeaders: function() {},
+ getResponseHeader: function() {},
+ setRequestHeader: function() {},
+ abort: function() {
+ this.aborted = 1;
+ $io.attr('src', s.iframeSrc); // abort op in progress
+ }
+ };
+
+ var g = s.global;
+ // trigger ajax global events so that activity/block indicators work like normal
+ if (g && ! $.active++) {
+ $.event.trigger("ajaxStart");
+ }
+ if (g) {
+ $.event.trigger("ajaxSend", [xhr, s]);
+ }
+
+ if (s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false) {
+ if (s.global) {
+ $.active--;
+ }
+ return;
+ }
+ if (xhr.aborted) {
+ return;
+ }
+
+ var cbInvoked = false;
+ var timedOut = 0;
+
+ // add submitting element to data if we know it
+ var sub = form.clk;
+ if (sub) {
+ var n = sub.name;
+ if (n && !sub.disabled) {
+ s.extraData = s.extraData || {};
+ s.extraData[n] = sub.value;
+ if (sub.type == "image") {
+ s.extraData[n+'.x'] = form.clk_x;
+ s.extraData[n+'.y'] = form.clk_y;
+ }
+ }
+ }
+
+ // take a breath so that pending repaints get some cpu time before the upload starts
+ function doSubmit() {
+ // make sure form attrs are set
+ var t = $form.attr('target'), a = $form.attr('action');
+
+ // update form attrs in IE friendly way
+ form.setAttribute('target',id);
+ if (form.getAttribute('method') != 'POST') {
+ form.setAttribute('method', 'POST');
+ }
+ if (form.getAttribute('action') != s.url) {
+ form.setAttribute('action', s.url);
+ }
+
+ // ie borks in some cases when setting encoding
+ if (! s.skipEncodingOverride) {
+ $form.attr({
+ encoding: 'multipart/form-data',
+ enctype: 'multipart/form-data'
+ });
+ }
+
+ // support timout
+ if (s.timeout) {
+ setTimeout(function() { timedOut = true; cb(); }, s.timeout);
+ }
+
+ // add "extra" data to form if provided in options
+ var extraInputs = [];
+ try {
+ if (s.extraData) {
+ for (var n in s.extraData) {
+ extraInputs.push(
+ $('<input type="hidden" name="'+n+'" value="'+s.extraData[n]+'" />')
+ .appendTo(form)[0]);
+ }
+ }
+
+ // add iframe to doc and submit the form
+ $io.appendTo('body');
+ $io.data('form-plugin-onload', cb);
+ form.submit();
+ }
+ finally {
+ // reset attrs and remove "extra" input elements
+ form.setAttribute('action',a);
+ if(t) {
+ form.setAttribute('target', t);
+ } else {
+ $form.removeAttr('target');
+ }
+ $(extraInputs).remove();
+ }
+ }
+
+ if (s.forceSync) {
+ doSubmit();
+ }
+ else {
+ setTimeout(doSubmit, 10); // this lets dom updates render
+ }
+
+ var data, doc, domCheckCount = 50;
+
+ function cb() {
+ if (cbInvoked) {
+ return;
+ }
+
+ $io.removeData('form-plugin-onload');
+
+ var ok = true;
+ try {
+ if (timedOut) {
+ throw 'timeout';
+ }
+ // extract the server response from the iframe
+ doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
+
+ var isXml = s.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
+ log('isXml='+isXml);
+ if (!isXml && window.opera && (doc.body == null || doc.body.innerHTML == '')) {
+ if (--domCheckCount) {
+ // in some browsers (Opera) the iframe DOM is not always traversable when
+ // the onload callback fires, so we loop a bit to accommodate
+ log('requeing onLoad callback, DOM not available');
+ setTimeout(cb, 250);
+ return;
+ }
+ // let this fall through because server response could be an empty document
+ //log('Could not access iframe DOM after mutiple tries.');
+ //throw 'DOMException: not available';
+ }
+
+ //log('response detected');
+ cbInvoked = true;
+ xhr.responseText = doc.documentElement ? doc.documentElement.innerHTML : null;
+ xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
+ xhr.getResponseHeader = function(header){
+ var headers = {'content-type': s.dataType};
+ return headers[header];
+ };
+
+ var scr = /(json|script)/.test(s.dataType);
+ if (scr || s.textarea) {
+ // see if user embedded response in textarea
+ var ta = doc.getElementsByTagName('textarea')[0];
+ if (ta) {
+ xhr.responseText = ta.value;
+ }
+ else if (scr) {
+ // account for browsers injecting pre around json response
+ var pre = doc.getElementsByTagName('pre')[0];
+ var b = doc.getElementsByTagName('body')[0];
+ if (pre) {
+ xhr.responseText = pre.innerHTML;
+ }
+ else if (b) {
+ xhr.responseText = b.innerHTML;
+ }
+ }
+ }
+ else if (s.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
+ xhr.responseXML = toXml(xhr.responseText);
+ }
+ data = $.httpData(xhr, s.dataType);
+ }
+ catch(e){
+ log('error caught:',e);
+ ok = false;
+ xhr.error = e;
+ $.handleError(s, xhr, 'error', e);
+ }
+
+ // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
+ if (ok) {
+ s.success.call(s.context, data, 'success', xhr);
+ if (g) {
+ $.event.trigger("ajaxSuccess", [xhr, s]);
+ }
+ }
+ if (g) {
+ $.event.trigger("ajaxComplete", [xhr, s]);
+ }
+ if (g && ! --$.active) {
+ $.event.trigger("ajaxStop");
+ }
+ if (s.complete) {
+ s.complete.call(s.context, xhr, ok ? 'success' : 'error');
+ }
+
+ // clean up
+ setTimeout(function() {
+ $io.removeData('form-plugin-onload');
+ $io.remove();
+ xhr.responseXML = null;
+ }, 100);
+ }
+
+ function toXml(s, doc) {
+ if (window.ActiveXObject) {
+ doc = new ActiveXObject('Microsoft.XMLDOM');
+ doc.async = 'false';
+ doc.loadXML(s);
+ }
+ else {
+ doc = (new DOMParser()).parseFromString(s, 'text/xml');
+ }
+ return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null;
+ }
+ }
+};
+
+/**
+ * ajaxForm() provides a mechanism for fully automating form submission.
+ *
+ * The advantages of using this method instead of ajaxSubmit() are:
+ *
+ * 1: This method will include coordinates for <input type="image" /> elements (if the element
+ * is used to submit the form).
+ * 2. This method will include the submit element's name/value data (for the element that was
+ * used to submit the form).
+ * 3. This method binds the submit() method to the form for you.
+ *
+ * The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely
+ * passes the options argument along after properly binding events for submit elements and
+ * the form itself.
+ */
+$.fn.ajaxForm = function(options) {
+ // in jQuery 1.3+ we can fix mistakes with the ready state
+ if (this.length === 0) {
+ var o = { s: this.selector, c: this.context };
+ if (!$.isReady && o.s) {
+ log('DOM not ready, queuing ajaxForm');
+ $(function() {
+ $(o.s,o.c).ajaxForm(options);
+ });
+ return this;
+ }
+ // is your DOM ready? http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
+ log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
+ return this;
+ }
+
+ return this.ajaxFormUnbind().bind('submit.form-plugin', function(e) {
+ if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
+ e.preventDefault();
+ $(this).ajaxSubmit(options);
+ }
+ }).bind('click.form-plugin', function(e) {
+ var target = e.target;
+ var $el = $(target);
+ if (!($el.is(":submit,input:image"))) {
+ // is this a child element of the submit el? (ex: a span within a button)
+ var t = $el.closest(':submit');
+ if (t.length == 0) {
+ return;
+ }
+ target = t[0];
+ }
+ var form = this;
+ form.clk = target;
+ if (target.type == 'image') {
+ if (e.offsetX != undefined) {
+ form.clk_x = e.offsetX;
+ form.clk_y = e.offsetY;
+ } else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
+ var offset = $el.offset();
+ form.clk_x = e.pageX - offset.left;
+ form.clk_y = e.pageY - offset.top;
+ } else {
+ form.clk_x = e.pageX - target.offsetLeft;
+ form.clk_y = e.pageY - target.offsetTop;
+ }
+ }
+ // clear form vars
+ setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
+ });
+};
+
+// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
+$.fn.ajaxFormUnbind = function() {
+ return this.unbind('submit.form-plugin click.form-plugin');
+};
+
+/**
+ * formToArray() gathers form element data into an array of objects that can
+ * be passed to any of the following ajax functions: $.get, $.post, or load.
+ * Each object in the array has both a 'name' and 'value' property. An example of
+ * an array for a simple login form might be:
+ *
+ * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
+ *
+ * It is this array that is passed to pre-submit callback functions provided to the
+ * ajaxSubmit() and ajaxForm() methods.
+ */
+$.fn.formToArray = function(semantic) {
+ var a = [];
+ if (this.length === 0) {
+ return a;
+ }
+
+ var form = this[0];
+ var els = semantic ? form.getElementsByTagName('*') : form.elements;
+ if (!els) {
+ return a;
+ }
+
+ var i,j,n,v,el,max,jmax;
+ for(i=0, max=els.length; i < max; i++) {
+ el = els[i];
+ n = el.name;
+ if (!n) {
+ continue;
+ }
+
+ if (semantic && form.clk && el.type == "image") {
+ // handle image inputs on the fly when semantic == true
+ if(!el.disabled && form.clk == el) {
+ a.push({name: n, value: $(el).val()});
+ a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
+ }
+ continue;
+ }
+
+ v = $.fieldValue(el, true);
+ if (v && v.constructor == Array) {
+ for(j=0, jmax=v.length; j < jmax; j++) {
+ a.push({name: n, value: v[j]});
+ }
+ }
+ else if (v !== null && typeof v != 'undefined') {
+ a.push({name: n, value: v});
+ }
+ }
+
+ if (!semantic && form.clk) {
+ // input type=='image' are not found in elements array! handle it here
+ var $input = $(form.clk), input = $input[0];
+ n = input.name;
+ if (n && !input.disabled && input.type == 'image') {
+ a.push({name: n, value: $input.val()});
+ a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
+ }
+ }
+ return a;
+};
+
+/**
+ * Serializes form data into a 'submittable' string. This method will return a string
+ * in the format: name1=value1&amp;name2=value2
+ */
+$.fn.formSerialize = function(semantic) {
+ //hand off to jQuery.param for proper encoding
+ return $.param(this.formToArray(semantic));
+};
+
+/**
+ * Serializes all field elements in the jQuery object into a query string.
+ * This method will return a string in the format: name1=value1&amp;name2=value2
+ */
+$.fn.fieldSerialize = function(successful) {
+ var a = [];
+ this.each(function() {
+ var n = this.name;
+ if (!n) {
+ return;
+ }
+ var v = $.fieldValue(this, successful);
+ if (v && v.constructor == Array) {
+ for (var i=0,max=v.length; i < max; i++) {
+ a.push({name: n, value: v[i]});
+ }
+ }
+ else if (v !== null && typeof v != 'undefined') {
+ a.push({name: this.name, value: v});
+ }
+ });
+ //hand off to jQuery.param for proper encoding
+ return $.param(a);
+};
+
+/**
+ * Returns the value(s) of the element in the matched set. For example, consider the following form:
+ *
+ * <form><fieldset>
+ * <input name="A" type="text" />
+ * <input name="A" type="text" />
+ * <input name="B" type="checkbox" value="B1" />
+ * <input name="B" type="checkbox" value="B2"/>
+ * <input name="C" type="radio" value="C1" />
+ * <input name="C" type="radio" value="C2" />
+ * </fieldset></form>
+ *
+ * var v = $(':text').fieldValue();
+ * // if no values are entered into the text inputs
+ * v == ['','']
+ * // if values entered into the text inputs are 'foo' and 'bar'
+ * v == ['foo','bar']
+ *
+ * var v = $(':checkbox').fieldValue();
+ * // if neither checkbox is checked
+ * v === undefined
+ * // if both checkboxes are checked
+ * v == ['B1', 'B2']
+ *
+ * var v = $(':radio').fieldValue();
+ * // if neither radio is checked
+ * v === undefined
+ * // if first radio is checked
+ * v == ['C1']
+ *
+ * The successful argument controls whether or not the field element must be 'successful'
+ * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
+ * The default value of the successful argument is true. If this value is false the value(s)
+ * for each element is returned.
+ *
+ * Note: This method *always* returns an array. If no valid value can be determined the
+ * array will be empty, otherwise it will contain one or more values.
+ */
+$.fn.fieldValue = function(successful) {
+ for (var val=[], i=0, max=this.length; i < max; i++) {
+ var el = this[i];
+ var v = $.fieldValue(el, successful);
+ if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) {
+ continue;
+ }
+ v.constructor == Array ? $.merge(val, v) : val.push(v);
+ }
+ return val;
+};
+
+/**
+ * Returns the value of the field element.
+ */
+$.fieldValue = function(el, successful) {
+ var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
+ if (successful === undefined) {
+ successful = true;
+ }
+
+ if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
+ (t == 'checkbox' || t == 'radio') && !el.checked ||
+ (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
+ tag == 'select' && el.selectedIndex == -1)) {
+ return null;
+ }
+
+ if (tag == 'select') {
+ var index = el.selectedIndex;
+ if (index < 0) {
+ return null;
+ }
+ var a = [], ops = el.options;
+ var one = (t == 'select-one');
+ var max = (one ? index+1 : ops.length);
+ for(var i=(one ? index : 0); i < max; i++) {
+ var op = ops[i];
+ if (op.selected) {
+ var v = op.value;
+ if (!v) { // extra pain for IE...
+ v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
+ }
+ if (one) {
+ return v;
+ }
+ a.push(v);
+ }
+ }
+ return a;
+ }
+ return $(el).val();
+};
+
+/**
+ * Clears the form data. Takes the following actions on the form's input fields:
+ * - input text fields will have their 'value' property set to the empty string
+ * - select elements will have their 'selectedIndex' property set to -1
+ * - checkbox and radio inputs will have their 'checked' property set to false
+ * - inputs of type submit, button, reset, and hidden will *not* be effected
+ * - button elements will *not* be effected
+ */
+$.fn.clearForm = function() {
+ return this.each(function() {
+ $('input,select,textarea', this).clearFields();
+ });
+};
+
+/**
+ * Clears the selected form elements.
+ */
+$.fn.clearFields = $.fn.clearInputs = function() {
+ return this.each(function() {
+ var t = this.type, tag = this.tagName.toLowerCase();
+ if (t == 'text' || t == 'password' || tag == 'textarea') {
+ this.value = '';
+ }
+ else if (t == 'checkbox' || t == 'radio') {
+ this.checked = false;
+ }
+ else if (tag == 'select') {
+ this.selectedIndex = -1;
+ }
+ });
+};
+
+/**
+ * Resets the form data. Causes all form elements to be reset to their original value.
+ */
+$.fn.resetForm = function() {
+ return this.each(function() {
+ // guard against an input with the name of 'reset'
+ // note that IE reports the reset function as an 'object'
+ if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) {
+ this.reset();
+ }
+ });
+};
+
+/**
+ * Enables or disables any matching elements.
+ */
+$.fn.enable = function(b) {
+ if (b === undefined) {
+ b = true;
+ }
+ return this.each(function() {
+ this.disabled = !b;
+ });
+};
+
+/**
+ * Checks/unchecks any matching checkboxes or radio buttons and
+ * selects/deselects and matching option elements.
+ */
+$.fn.selected = function(select) {
+ if (select === undefined) {
+ select = true;
+ }
+ return this.each(function() {
+ var t = this.type;
+ if (t == 'checkbox' || t == 'radio') {
+ this.checked = select;
+ }
+ else if (this.tagName.toLowerCase() == 'option') {
+ var $sel = $(this).parent('select');
+ if (select && $sel[0] && $sel[0].type == 'select-one') {
+ // deselect all other options
+ $sel.find('option').selected(false);
+ }
+ this.selected = select;
+ }
+ });
+};
+
+// helper fn for console logging
+// set $.fn.ajaxSubmit.debug to true to enable debug logging
+function log() {
+ if ($.fn.ajaxSubmit.debug) {
+ var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
+ if (window.console && window.console.log) {
+ window.console.log(msg);
+ }
+ else if (window.opera && window.opera.postError) {
+ window.opera.postError(msg);
+ }
+ }
+};
+
+})(jQuery);
diff --git a/config/snort-dev/javascript/row_helper.js b/config/snort-dev/javascript/row_helper.js
new file mode 100644
index 00000000..905dba7b
--- /dev/null
+++ b/config/snort-dev/javascript/row_helper.js
@@ -0,0 +1,77 @@
+/*
+
+for the snort package sept01,2010
+TODO: redo code myself.......
+
+*/
+
+
+// Global Variables
+var rowname = new Array(500);
+var rowtype = new Array(500);
+var newrow = new Array(500);
+var rowsize = new Array(500);
+
+for (i = 0; i < 500; i++) {
+ rowname[i] = '';
+ rowtype[i] = '';
+ newrow[i] = '';
+ rowsize[i] = '25';
+}
+
+var field_counter_js = 0;
+var loaded = 0;
+var is_streaming_progress_bar = 0;
+var temp_streaming_text = "";
+
+var addRowTo = (function() {
+ return (function (tableId) {
+ var d, tbody, tr, td, bgc, i, ii, j;
+ d = document;
+ tbody = d.getElementById(tableId).getElementsByTagName("tbody").item(0);
+ tr = d.createElement("tr");
+ totalrows++;
+ for (i = 0; i < field_counter_js; i++) {
+ td = d.createElement("td");
+ if(rowtype[i] == 'textbox') {
+ td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><input size='" + rowsize[i] + "' name='" + rowname[i] + totalrows + "'></input> ";
+ } else if(rowtype[i] == 'select') {
+ td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><select size='" + rowsize[i] + "' name='" + rowname[i] + totalrows + "'><option value=\"32\" selected>32</option><option value=\"31\" >31</option><option value=\"30\" >30</option><option value=\"29\" >29</option><option value=\"28\" >28</option><option value=\"27\" >27</option><option value=\"26\" >26</option><option value=\"25\" >25</option><option value=\"24\" >24</option><option value=\"23\" >23</option><option value=\"22\" >22</option><option value=\"21\" >21</option><option value=\"20\" >20</option><option value=\"19\" >19</option><option value=\"18\" >18</option><option value=\"17\" >17</option><option value=\"16\" >16</option><option value=\"15\" >15</option><option value=\"14\" >14</option><option value=\"13\" >13</option><option value=\"12\" >12</option><option value=\"11\" >11</option><option value=\"10\" >10</option><option value=\"9\" >9</option><option value=\"8\" >8</option><option value=\"7\" >7</option><option value=\"6\" >6</option><option value=\"5\" >5</option><option value=\"4\" >4</option><option value=\"3\" >3</option><option value=\"2\" >2</option><option value=\"1\" >1</option></select> ";
+ } else {
+ td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><input type='checkbox' name='" + rowname[i] + totalrows + "'></input> ";
+ }
+ tr.appendChild(td);
+ }
+ td = d.createElement("td");
+ td.rowSpan = "1";
+
+ td.innerHTML = '<input type="image" src="/themes/' + theme + '/images/icons/icon_x.gif" onclick="removeRow(this); return false;" value="Delete">';
+ tr.appendChild(td);
+ tbody.appendChild(tr);
+ });
+})();
+
+function removeRow(el) {
+ var cel;
+ while (el && el.nodeName.toLowerCase() != "tr")
+ el = el.parentNode;
+
+ if (el && el.parentNode) {
+ cel = el.getElementsByTagName("td").item(0);
+ el.parentNode.removeChild(el);
+ }
+}
+
+function find_unique_field_name(field_name) {
+ // loop through field_name and strip off -NUMBER
+ var last_found_dash = 0;
+ for (var i = 0; i < field_name.length; i++) {
+ // is this a dash, if so, update
+ // last_found_dash
+ if (field_name.substr(i,1) == "-" )
+ last_found_dash = i;
+ }
+ if (last_found_dash < 1)
+ return field_name;
+ return(field_name.substr(0,last_found_dash));
+}
diff --git a/config/snort-dev/javascript/snort_globalsend.js b/config/snort-dev/javascript/snort_globalsend.js
new file mode 100644
index 00000000..60968670
--- /dev/null
+++ b/config/snort-dev/javascript/snort_globalsend.js
@@ -0,0 +1,227 @@
+jQuery.noConflict();
+
+//prepare the form when the DOM is ready
+jQuery(document).ready(function() {
+
+ jQuery(".icon_click").live('mouseover', function() {
+ jQuery(this).css('cursor', 'pointer');
+ });
+
+ // -------------------------- START cancel form code -------------------------------------------
+ //jQuery('#cancel').click(function() {
+ jQuery('#cancel').live('click', function() {
+
+ location.reload();
+
+ });
+
+
+// ------------------------------- START remove row element ------------------------------------------
+ jQuery(".icon_x").live('click', function() {
+
+ var elem = getBaseElement(this.id); // this.id gets id of .icon_x
+
+ window.RemoveRow_UUID = jQuery("#rowlist_" + elem.index).data("options").rowuuid;
+ window.RemoveRow_Table = jQuery("#maintable").data("options").pagetable;
+ window.RemoveRow_POST = jQuery("#maintable").data("options").DoPOST;
+
+ if (RemoveRow_Table == 'SnortWhitelist') // snort_interfaces_whitelist
+ {
+ if(confirm('Do you really want to delete this whitelist? (e.g. snort rules will fall back to the default whitelist)!')) {
+
+ jQuery("#rowlist_" + elem.index).fadeOut("fast");
+ function removeRow()
+ {
+ jQuery("#rowlist_" + elem.index).remove();
+ }
+
+ setTimeout(removeRow, 600);
+ jQuery(this).ajaxSubmit(optionsWhitelist); // call POST
+ return false;
+ }
+ }
+
+ if (RemoveRow_Table == 'SnortWhitelistips')
+ { // editing snort_interfaces_whitelist_edit
+
+ jQuery("#rowlist_" + elem.index).fadeOut("fast");
+ function removeRow()
+ {
+ jQuery("#rowlist_" + elem.index).remove();
+ }
+
+ setTimeout(removeRow, 600);
+ return false;
+ }
+
+ });
+
+ // declare variable for whitelist delete
+ var optionsWhitelist = {
+ beforeSubmit: showRequestWhitelist,
+ dataType: 'json',
+ success: showResponseWhitelist,
+ type: 'POST',
+ data: { WhitelistDelRow: '1', WhitelistTable: WhitelistTableDelCall, WhitelistUuid: WhitelistUuidDelCall },
+ url: './snort_json_post.php'
+ };
+
+ function WhitelistTableDelCall() {
+ return RemoveRow_Table;
+ }
+
+ function WhitelistUuidDelCall() {
+ return RemoveRow_UUID;
+ }
+
+ // pre-submit callback
+ function showRequestWhitelist(formData, jqForm, optionsWhitelist) {
+
+ var queryString = jQuery.param(formData);
+
+ alert('About to submit: \n\n' + queryString);
+
+ // call false to prevent the form
+ return true;
+ }
+
+ // pre-submit callback
+ function showResponseWhitelist(data) {
+
+
+ }
+
+ function getBaseElement(elem)
+ {
+ elem = elem + "";
+ var len = elem.length;
+ var lPos = elem.lastIndexOf("_") * 1;
+ var baseElem = elem.substr(0, lPos);
+ var index = elem.substr(lPos+1, len);
+
+ //alert(index);
+
+ if (checkNumeric(index))
+ {
+ return {"base": baseElem, "index": index};
+ }else{
+ return {"base": null, "index": null};
+ };
+
+ function checkNumeric(value)
+ {
+ if(isNaN(value)) {
+ return false;
+ }else{
+ return true;
+ };
+ };
+
+ };
+ // STOP remove row element
+
+// ------------------- START iform Submit/RETURN code ---------------------------------------------
+
+ /* general form */
+ jQuery('#iform').submit(function() {
+
+ jQuery(this).ajaxSubmit(options);
+
+ return false;
+ });
+
+ /* general form2 */
+ jQuery('#iform2').submit(function() {
+
+ jQuery(this).ajaxSubmit(options);
+
+ return false;
+ });
+
+ /* general form3 */
+ jQuery('#iform3').submit(function() {
+
+ jQuery(this).ajaxSubmit(options);
+
+ return false;
+ });
+
+ // declare variable for iform
+ var options = {
+ beforeSubmit: showRequest,
+ dataType: 'json',
+ success: showResponse
+ };
+
+});
+
+// pre-submit callback
+function showRequest(formData, jqForm, options) {
+
+ var queryString = jQuery.param(formData);
+
+ // Please wait code
+ function showLoading() {
+ jQuery("#loadingWaiting").show();
+ }
+ // call to please wait
+ showLoading();
+
+ alert('About to submit: \n\n' + queryString);
+
+ // call false to prevent the form
+ return true;
+}
+
+// post-submit callback
+function showResponse(data, responseText, statusText, xhr, $form) {
+
+
+ function hideLoading() {
+ jQuery("#loadingWaiting").hide();
+ };
+
+ // START of fill call to user
+ if (responseText == 'success') {
+
+ // snort logs download success
+ if (data.downloadfilename != '' && data.snortdownload == 'success') {
+ function downloadsnortlogs(){
+ jQuery('.hiddendownloadlink').append('<iframe width="1" height="1" frameborder="0" src="./snort_json_get.php?snortlogdownload=1&snortlogfilename=' + data.downloadfilename + '></iframe>');
+ var appendElem = jQuery('<br> <span>success...<span>');
+ appendElem.appendTo('.loadingWaitingMessage');
+ setTimeout(hideLoading, 3000);
+ }
+ downloadsnortlogs();
+ }
+
+ // succsess display
+ if (data.snortgeneralsettings == 'success' || data.snortdelete == 'success' || data.snortreset == 'success') {
+ var appendElem = jQuery('<br> <span>success...<span>');
+ appendElem.appendTo('.loadingWaitingMessage');
+
+ // remove display
+ function finnish() {
+ hideLoading();
+ appendElem.remove();
+ updatestarted = 1;
+ };
+ setTimeout(finnish, 2000);
+ if (data.snortreset) {location.reload();}; // hard refresh
+
+ };
+
+ // END of fill call to user
+ }else{
+ // On FAIL get some info back
+ alert('responseText: \n' + data.responseText + 'FAIL');
+ }
+}
+// END iform code
+
+
+
+
+
+
+
diff --git a/config/snort-dev/javascript/sortableTable.js b/config/snort-dev/javascript/sortableTable.js
new file mode 100644
index 00000000..096f8d4c
--- /dev/null
+++ b/config/snort-dev/javascript/sortableTable.js
@@ -0,0 +1,288 @@
+
+
+/**************************************************************
+
+ Script : Sortable Table
+ Version : 1.4
+ Authors : Samuel Birch
+ Desc : Sorts and filters table elements
+ Licence : Open Source MIT Licence
+
+**************************************************************/
+
+var sortableTable = new Class({
+
+ getOptions: function(){
+ return {
+ overCls: false,
+ onClick: false,
+ sortOn: 0,
+ sortBy: 'ASC',
+ filterHide: true,
+ filterHideCls: 'hide',
+ filterSelectedCls: 'selected'
+ };
+ },
+
+ initialize: function(table, options){
+ this.setOptions(this.getOptions(), options);
+ this.table = $(table);
+ this.tHead = this.table.getElement('thead');
+ this.tBody = this.table.getElement('tbody');
+ this.tFoot = this.table.getElement('tfoot');
+ this.elements = this.tBody.getElements('tr');
+ this.filtered = false;
+
+ /*for(i=0;i<10;i++){
+ this.elements.clone().injectInside(this.tBody);
+ }
+ this.elements = this.tBody.getElements('tr');*/
+
+ this.elements.each(function(el,i){
+ if(this.options.overCls){
+ el.addEvent('mouseover', function(){
+ el.addClass(options.overCls);
+ }, this);
+ el.addEvent('mouseout', function(){
+ el.removeClass(options.overCls);
+ });
+ }
+ if(this.options.onClick){
+ el.addEvent('click', options.onClick);
+ }
+ }, this);
+
+ //setup header
+ this.tHead.getElements('th').each(function(el,i){
+ if(el.axis){
+ el.addEvent('click', this.sort.bind(this,i));
+ el.addEvent('mouseover', function(){
+ el.addClass('tableHeaderOver');
+ });
+ el.addEvent('mouseout', function(){
+ el.removeClass('tableHeaderOver');
+ });
+ el.getdate = function(str){
+ // inner util function to convert 2-digit years to 4
+ function fixYear(yr) {
+ yr = +yr;
+ if (yr<50) { yr += 2000; }
+ else if (yr<100) { yr += 1900; }
+ return yr;
+ };
+ var ret;
+ //
+ if (str.length>12){
+ strtime = str.substring(str.lastIndexOf(' ')+1);
+ strtime = strtime.substring(0,2)+strtime.substr(-2)
+ }else{
+ strtime = '0000';
+ }
+ //
+ // YYYY-MM-DD
+ if (ret=str.match(/(\d{2,4})-(\d{1,2})-(\d{1,2})/)) {
+ return (fixYear(ret[1])*10000) + (ret[2]*100) + (+ret[3]) + strtime;
+ }
+ // DD/MM/YY[YY] or DD-MM-YY[YY]
+ if (ret=str.match(/(\d{1,2})[\/-](\d{1,2})[\/-](\d{2,4})/)) {
+ return (fixYear(ret[3])*10000) + (ret[2]*100) + (+ret[1]) + strtime;
+ }
+ return 999999990000; // So non-parsed dates will be last, not first
+ };
+ //
+ el.findData = function(elem){
+ var child = elem.getFirst();
+ if(child){
+ return el.findData(child);
+ }else{
+ return elem.innerHTML.trim();
+ }
+ };
+ //
+ el.compare = function(a,b){
+ var1 = el.findData(a.getChildren()[i]);
+ var2 = el.findData(b.getChildren()[i]);
+ //var1 = a.getChildren()[i].firstChild.data;
+ //var2 = b.getChildren()[i].firstChild.data;
+
+ if(el.axis == 'number'){
+ var1 = parseFloat(var1);
+ var2 = parseFloat(var2);
+
+ if(el.sortBy == 'ASC'){
+ return var1-var2;
+ }else{
+ return var2-var1;
+ }
+
+ }else if(el.axis == 'string'){
+ var1 = var1.toUpperCase();
+ var2 = var2.toUpperCase();
+
+ if(var1==var2){return 0};
+ if(el.sortBy == 'ASC'){
+ if(var1<var2){return -1};
+ }else{
+ if(var1>var2){return -1};
+ }
+ return 1;
+
+ }else if(el.axis == 'date'){
+ var1 = parseFloat(el.getdate(var1));
+ var2 = parseFloat(el.getdate(var2));
+
+ if(el.sortBy == 'ASC'){
+ return var1-var2;
+ }else{
+ return var2-var1;
+ }
+
+ }else if(el.axis == 'currency'){
+ var1 = parseFloat(var1.substr(1).replace(',',''));
+ var2 = parseFloat(var2.substr(1).replace(',',''));
+
+ if(el.sortBy == 'ASC'){
+ return var1-var2;
+ }else{
+ return var2-var1;
+ }
+
+ }
+
+ }
+
+ if(i == this.options.sortOn){
+ el.fireEvent('click');
+ }
+ }
+ }, this);
+ },
+
+ sort: function(index){
+ if(this.options.onStart){
+ this.fireEvent('onStart');
+ }
+ //
+ this.options.sortOn = index;
+ var header = this.tHead.getElements('th');
+ var el = header[index];
+
+ header.each(function(e,i){
+ if(i != index){
+ e.removeClass('sortedASC');
+ e.removeClass('sortedDESC');
+ }
+ });
+
+ if(el.hasClass('sortedASC')){
+ el.removeClass('sortedASC');
+ el.addClass('sortedDESC');
+ el.sortBy = 'DESC';
+ }else if(el.hasClass('sortedDESC')){
+ el.removeClass('sortedDESC');
+ el.addClass('sortedASC');
+ el.sortBy = 'ASC';
+ }else{
+ if(this.options.sortBy == 'ASC'){
+ el.addClass('sortedASC');
+ el.sortBy = 'ASC';
+ }else if(this.options.sortBy == 'DESC'){
+ el.addClass('sortedDESC');
+ el.sortBy = 'DESC';
+ }
+ }
+ //
+ this.elements.sort(el.compare);
+ this.elements.injectInside(this.tBody);
+ //
+ if(this.filtered){
+ this.filteredAltRow();
+ }else{
+ this.altRow();
+ }
+
+ //
+ if(this.options.onComplete){
+ this.fireEvent('onComplete');
+ }
+ },
+
+ altRow: function(){
+ this.elements.each(function(el,i){
+ if(i % 2){
+ el.removeClass('altRow');
+ }else{
+ el.addClass('altRow');
+ }
+ });
+ },
+
+ filteredAltRow: function(){
+ this.table.getElements('.'+this.options.filterSelectedCls).each(function(el,i){
+ if(i % 2){
+ el.removeClass('altRow');
+ }else{
+ el.addClass('altRow');
+ }
+ });
+ },
+
+ filter: function(form){
+ var form = $(form);
+ var col = 0;
+ var key = '';
+
+ form.getChildren().each(function(el,i){
+ if(el.id == 'column'){
+ col = Number(el.value);
+ }
+ if(el.id == 'keyword'){
+ key = el.value.toLowerCase();
+ }
+ if(el.type == 'reset'){
+ el.addEvent('click',this.clearFilter.bind(this));
+ }
+ }, this);
+
+ if(key){
+ this.elements.each(function(el,i){
+ if(this.options.filterHide){
+ el.removeClass('altRow');
+ }
+ if(el.getChildren()[col].firstChild.data.toLowerCase().indexOf(key) > -1){
+ el.addClass(this.options.filterSelectedCls);
+ if(this.options.filterHide){
+ el.removeClass(this.options.filterHideCls);
+ }
+ }else{
+ el.removeClass(this.options.filterSelectedCls);
+ if(this.options.filterHide){
+ el.addClass(this.options.filterHideCls);
+ }
+ }
+ }, this);
+ if(this.options.filterHide){
+ this.filteredAltRow();
+ this.filtered = true;
+ }
+ }
+ },
+
+ clearFilter: function(){
+ this.elements.each(function(el,i){
+ el.removeClass(this.options.filterSelectedCls);
+ if(this.options.filterHide){
+ el.removeClass(this.options.filterHideCls);
+ }
+ }, this);
+ if(this.options.filterHide){
+ this.altRow();
+ this.filtered = false;
+ }
+ }
+
+});
+sortableTable.implement(new Events);
+sortableTable.implement(new Options);
+
+/*************************************************************/
diff --git a/config/snort-dev/snort_alerts.php b/config/snort-dev/snort_alerts.php
new file mode 100644
index 00000000..f79a4249
--- /dev/null
+++ b/config/snort-dev/snort_alerts.php
@@ -0,0 +1,181 @@
+<?php
+/* $Id$ */
+/*
+ snort_interfaces.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2008-2009 Robert Zelaya.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ */
+
+require_once("guiconfig.inc");
+require_once("/usr/local/pkg/snort/snort_new.inc");
+require_once("/usr/local/pkg/snort/snort_gui.inc");
+
+$generalSettings = snortSql_fetchAllSettings('SnortSettings', 'id', '1');
+
+$alertnumber = $generalSettings['alertnumber'];
+
+$arefresh_on = ($generalSettings['arefresh'] == 'on' ? 'checked' : '');
+
+ $pgtitle = "Services: Snort: Alerts";
+ include("/usr/local/pkg/snort/snort_head.inc");
+
+?>
+
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<script type="text/javascript">
+
+ // set the page resets watchThis
+ function resetSnortDefaults(general0) {
+
+ jQuery("#alertnumber").val(general0.alertnumber);
+
+ if (general0.arefresh == 'on') {
+ jQuery("#arefresh").attr("checked", "checked");
+ }else{
+ jQuery("#arefresh").removeAttr('checked');
+ }
+
+ }
+
+</script>
+
+<div id="loadingWaiting">
+ <p class="loadingWaitingMessage"><img src="./images/loading.gif" /> <br>Please Wait...</p>
+</div>
+
+<?php include("fbegin.inc"); ?>
+<!-- hack to fix the hardcoed fbegin link in header -->
+<div id="header-left2">
+<a href="../index.php" id="status-link2">
+<img src="./images/transparent.gif" border="0"></img>
+</a>
+</div>
+
+<div class="body2"><!-- hack to fix the hardcoed fbegin link in header -->
+<div id="header-left2"><a href="../index.php" id="status-link2"><img src="./images/transparent.gif" border="0"></img></a></div>
+
+<? //if($pfsense_stable == 'yes'){echo '<p class="pgtitle">' . $pgtitle . '</p>';}
+echo '<p class="pgtitle">' . $pgtitle . '</p>';
+?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+
+ <div class="newtabmenu" style="margin: 1px 0px; width: 775px;"><!-- Tabbed bar code-->
+ <ul class="newtabmenu">
+ <li><a href="/snort/snort_interfaces.php"><span>Snort Interfaces</span></a></li>
+ <li><a href="/snort/snort_interfaces_global.php"><span>Global Settings</span></a></li>
+ <li><a href="/snort/snort_download_updates.php"><span>Updates</span></a></li>
+ <li class="newtabmenu_active"><a href="/snort/snort_alerts.php"><span>Alerts</span></a></li>
+ <li><a href="/snort/snort_blocked.php"><span>Blocked</span></a></li>
+ <li><a href="/snort/snort_interfaces_whitelist.php"><span>Whitelists</span></a></li>
+ <li><a href="/snort/snort_interfaces_suppress.php"><span>Suppress</span></a></li>
+ <li><a href="/snort/snort_help_info.php"><span>Help</span></a></li>
+ </li>
+ </ul>
+ </div>
+
+ </td>
+ </tr>
+ <tr>
+ <td id="tdbggrey">
+ <table width="100%" border="0" cellpadding="10px" cellspacing="0">
+ <tr>
+ <td class="tabnavtbl">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <!-- START MAIN AREA -->
+
+ <tr id="maintable" data-options='{"pagetable":"SnortSettings"}'> <!-- db to lookup -->
+ <td colspan="2" valign="top" class="listtopic" width="21%">Last 255 Alert Entries</td>
+ <td colspan="2" valign="top" class="listtopic">Latest Alert Entries Are Listed First</td>
+ </tr>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td class="vncell2" valign="center" width="21%"><span class="vexpl">Save or Remove Logs</span></td>
+ <td class="vtable" width="40%">
+ <form id="iform" action="./snort_json_post.php" method="post">
+ <input name="snortlogsdownload" type="submit" class="formbtn" value="Download" >
+ <input type="hidden" name="snortlogsdownload" value="1" />
+ <span class="vexpl">Save All Log Files.</span>
+ </form>
+ </td>
+ <td class="vtable">
+ <form id="iform2" action="./snort_json_post.php" method="post">
+ <input name="snortlogsdelete" type="submit" class="formbtn" value="Clear" onclick="return confirm('Do you really want to remove all your logs ? All Snort Logs will be removed !')" >
+ <input type="hidden" name="snortlogsdelete" value="1" />
+ <span class="vexpl red"><strong>Warning:</strong></span><span class="vexpl"> all logs will be deleted.</span>
+ </form>
+ </td>
+ <div class="hiddendownloadlink"></div>
+ </tr>
+ <tr>
+ <td class="vncell2" valign="center"><span class="vexpl">Auto Refresh and Log View</span></td>
+ <td class="vtable">
+ <form id="iform3" action="./snort_json_post.php" method="post">
+ <input name="save" type="submit" class="formbtn" value="Save">
+ <input id="cancel" type="button" class="formbtn" value="Cancel">
+ <input name="arefresh" id="arefresh" type="checkbox" value="on" <?=htmlspecialchars($arefresh_on);?> >
+ <span class="vexpl">Auto Refresh</span>
+ <span class="vexpl"><strong>Default ON</strong>.</span>
+ </td>
+ <td class="vtable">
+ <input name="alertnumber" type="text" class="formfld" id="alertnumber" size="5" value="<?=htmlspecialchars($alertnumber);?>" >
+ <span class="vexpl">Limit entries to view. <strong>Default 250</strong>.</span>
+
+ <input type="hidden" name="snortSaveSettings" value="1" /> <!-- what to do, save -->
+ <input type="hidden" name="dbTable" value="SnortSettings" /> <!-- what db-->
+ <input type="hidden" name="ifaceTab" value="snort_alerts_blocked" /> <!-- what interface tab -->
+
+ </form>
+ </td>
+ </tr>
+ </table>
+
+
+ <!-- STOP MAIN AREA -->
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</div>
+
+
+<!-- footer do not touch below -->
+<?php
+include("fend.inc");
+echo $snort_custom_rnd_box;
+?>
+
+
+</body>
+</html>
diff --git a/config/snort-dev/snort_blocked.php b/config/snort-dev/snort_blocked.php
new file mode 100644
index 00000000..06d0c5f2
--- /dev/null
+++ b/config/snort-dev/snort_blocked.php
@@ -0,0 +1,181 @@
+<?php
+/* $Id$ */
+/*
+ snort_interfaces.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2008-2009 Robert Zelaya.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ */
+
+require_once("guiconfig.inc");
+require_once("/usr/local/pkg/snort/snort_new.inc");
+require_once("/usr/local/pkg/snort/snort_gui.inc");
+
+
+$generalSettings = snortSql_fetchAllSettings('SnortSettings', 'id', '1');
+
+$blertnumber = $generalSettings['blertnumber'];
+
+$brefresh_on = ($generalSettings['brefresh'] == 'on' ? 'checked' : '');
+
+ $pgtitle = "Services: Snort Blocked Hosts";
+ include("/usr/local/pkg/snort/snort_head.inc");
+
+?>
+
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<script type="text/javascript">
+
+ // set the page resets watchThis
+ function resetSnortDefaults(data) {
+
+ jQuery("#blertnumber").val(data.blertnumber);
+
+ if (data.brefresh == 'on') {
+ jQuery("#brefresh").attr("checked", "checked");
+ }else{
+ jQuery("#brefresh").removeAttr('checked');
+ }
+
+ }
+
+</script>
+
+<div id="loadingWaiting">
+ <p class="loadingWaitingMessage"><img src="./images/loading.gif" /> <br>Please Wait...</p>
+</div>
+
+<?php include("fbegin.inc"); ?>
+<!-- hack to fix the hardcoed fbegin link in header -->
+<div id="header-left2">
+<a href="../index.php" id="status-link2">
+<img src="./images/transparent.gif" border="0"></img>
+</a>
+</div>
+
+<div class="body2"><!-- hack to fix the hardcoed fbegin link in header -->
+<div id="header-left2"><a href="../index.php" id="status-link2"><img src="./images/transparent.gif" border="0"></img></a></div>
+
+<? //if($pfsense_stable == 'yes'){echo '<p class="pgtitle">' . $pgtitle . '</p>';}
+echo '<p class="pgtitle">' . $pgtitle . '</p>';
+?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+
+ <div class="newtabmenu" style="margin: 1px 0px; width: 775px;"><!-- Tabbed bar code-->
+ <ul class="newtabmenu">
+ <li><a href="/snort/snort_interfaces.php"><span>Snort Interfaces</span></a></li>
+ <li><a href="/snort/snort_interfaces_global.php"><span>Global Settings</span></a></li>
+ <li><a href="/snort/snort_download_updates.php"><span>Updates</span></a></li>
+ <li><a href="/snort/snort_alerts.php"><span>Alerts</span></a></li>
+ <li class="newtabmenu_active"><a href="/snort/snort_blocked.php"><span>Blocked</span></a></li>
+ <li><a href="/snort/snort_interfaces_whitelist.php"><span>Whitelists</span></a></li>
+ <li><a href="/snort/snort_interfaces_suppress.php"><span>Suppress</span></a></li>
+ <li><a href="/snort/snort_help_info.php"><span>Help</span></a></li>
+ </li>
+ </ul>
+ </div>
+
+ </td>
+ </tr>
+ <tr>
+ <td id="tdbggrey">
+ <table width="100%" border="0" cellpadding="10px" cellspacing="0">
+ <tr>
+ <td class="tabnavtbl">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <!-- START MAIN AREA -->
+
+ <tr id="maintable" data-options='{"pagetable":"SnortSettings"}'> <!-- db to lookup -->
+ <td width="22%" colspan="0" class="listtopic">Last 500 Blocked.</td>
+ <td class="listtopic">This page lists hosts that have been blocked by Snort.&nbsp;&nbsp;Hosts are removed every <strong>hour</strong>.</td>
+ </tr>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td class="vncell2" valign="center" width="22%"><span class="vexpl">Save or Remove Hosts</span></td>
+ <td width="40%" class="vtable">
+ <form id="iform" action="./snort_json_post.php" method="post">
+ <input name="snortblockedlogsdownload" type="submit" class="formbtn" value="Download" >
+ <input type="hidden" name="snortblockedlogsdownload" value="1" />
+ <span class="vexpl">Save All Blocked Hosts</span>
+ </form>
+ </td>
+ <td class="vtable">
+ <form id="iform2" action="./snort_json_post.php" method="post">
+ <input name="remove" type="submit" class="formbtn" value="Clear" onclick="return confirm('Do you really want to remove all blocked hosts ? All Blocked Hosts will be removed !')" >
+ <input type="hidden" name="snortflushpftable" value="1" />
+ <span class="vexpl red"><strong>Warning:</strong></span><span class="vexpl"> all hosts will be removed.</span>
+ </form>
+ </td>
+ <div class="hiddendownloadlink"></div>
+ </tr>
+ <tr>
+ <td class="vncell2" valign="center"><span class="vexpl">Auto Refresh and Log View</span></td>
+ <td class="vtable">
+ <form id="iform3" action="./snort_json_post.php" method="post">
+ <input name="save" type="submit" class="formbtn" value="Save">
+ <input id="cancel" type="button" class="formbtn" value="Cancel">
+ <span class="vexpl">Auto Refresh</span>
+ <input name="brefresh" id="brefresh" type="checkbox" value="on" <?=$brefresh_on; ?> >
+ <span class="vexpl"><strong>Default ON</strong>.</span>
+ </td>
+ <td class="vtable">
+ <input name="blertnumber" type="text" class="formfld" id="blertnumber" size="5" value="<?=$blertnumber;?>" >
+ <span class="vexpl">Limit entries to view. <strong>Default 500</strong>.</span>
+
+ <input type="hidden" name="snortSaveSettings" value="1" /> <!-- what to do, save -->
+ <input type="hidden" name="dbTable" value="SnortSettings" /> <!-- what db-->
+ <input type="hidden" name="ifaceTab" value="snort_alerts_blocked" /> <!-- what interface tab -->
+
+ </form>
+ </td>
+ </tr>
+ </table>
+
+ <!-- STOP MAIN AREA -->
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</div>
+
+
+<!-- footer do not touch below -->
+<?php
+include("fend.inc");
+echo $snort_custom_rnd_box;
+?>
+
+
+</body>
+</html>
diff --git a/config/snort-dev/snort_gui.inc b/config/snort-dev/snort_gui.inc
new file mode 100644
index 00000000..88debbc6
--- /dev/null
+++ b/config/snort-dev/snort_gui.inc
@@ -0,0 +1,71 @@
+<?php
+/* $Id$ */
+/*
+ snort.inc
+ Copyright (C) 2006 Scott Ullrich
+ Copyright (C) 2006 Robert Zelaya
+ part of pfSense
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ */
+
+//include_once("/usr/local/pkg/snort/snort.inc");
+
+function print_info_box_np2($msg) {
+ global $config, $g;
+
+ echo "<table height=\"32\" width=\"100%\">\n";
+ echo " <tr>\n";
+ echo " <td>\n";
+ echo " <div style='background-color:#990000' id='redbox'>\n";
+ echo " <table width='100%'><tr><td width='8%'>\n";
+ echo " &nbsp;&nbsp;&nbsp;<img style='vertical-align:middle' src=\"/snort/images/alert.jpg\" width=\"32\" height=\"28\">\n";
+ echo " </td>\n";
+ echo " <td width='70%'><font color='white'><b>{$msg}</b></font>\n";
+ echo " </td>";
+ if(stristr($msg, "apply") == true) {
+ echo " <td>";
+ echo " <input name=\"apply\" type=\"submit\" class=\"formbtn\" id=\"apply\" value=\"Apply changes\">\n";
+ echo " </td>";
+ }
+ echo " </tr></table>\n";
+ echo " </div>\n";
+ echo " </td>\n";
+ echo "</table>\n";
+ echo "<script type=\"text/javascript\">\n";
+ echo "NiftyCheck();\n";
+ echo "Rounded(\"div#redbox\",\"all\",\"#FFF\",\"#990000\",\"smooth\");\n";
+ echo "Rounded(\"td#blackbox\",\"all\",\"#FFF\",\"#000000\",\"smooth\");\n";
+ echo "</script>\n";
+ echo "\n<br>\n";
+
+
+}
+
+if ($config['version'] >= 6) {
+ $helplink = '<li><a href="/snort/help_and_info.php"><span>Help</span></a>';
+}else{
+ $helplink = ' <li><a class="example8" href="/snort/help_and_info.php"><span>Help</span></a></li>';
+}
+
+?>
diff --git a/config/snort-dev/snort_head.inc b/config/snort-dev/snort_head.inc
new file mode 100644
index 00000000..6e58cc1e
--- /dev/null
+++ b/config/snort-dev/snort_head.inc
@@ -0,0 +1,69 @@
+<?php
+/*
+ * if user has selected a custom template, use it.
+ * otherwise default to pfsense tempalte
+ */
+if($config['theme'] <> "")
+ $g['theme'] = $config['theme'];
+else
+ $g['theme'] = "pfsense";
+
+$apple_ua = array("iPhone","iPod");
+foreach($apple_ua as $useragent)
+ if(strstr($_SERVER['HTTP_USER_AGENT'], $useragent))
+ $g['theme'] = "pfsense";
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+ <title><?=gentitle($pgtitle);?></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+ <link rel=”apple-touch-icon” href=”/themes/<?php echo $g['theme']; ?>/apple-touch-icon.png”/>
+
+<!-- snort custom javascript and css -->
+<?php include('/usr/local/pkg/snort/snort_headbase.inc'); ?>
+
+<!-- remove Only used to test conflicts -->
+
+ <?php
+ if (strpos($_SERVER["SCRIPT_FILENAME"], "wizard.php") !== false &&
+ file_exists("{$g['www_path']}/themes/{$g['theme']}/wizard.css")):
+ ?>
+ <link rel="stylesheet" href="/themes/<?php echo $g['theme']; ?>/wizard.css" media="all" />
+ <?php else: ?>
+ <link rel="stylesheet" href="/themes/<?php echo $g['theme']; ?>/all.css" media="all" />
+ <?php endif; ?>
+ <link rel="stylesheet" type="text/css" href="/niftycssprintCode.css" media="print" />
+ <script type="text/javascript">var theme = "<?php echo $g['theme']; ?>"</script>
+ <script type="text/javascript" src="/themes/<?php echo $g['theme']; ?>/loader.js"></script>
+
+<?
+ /*
+ * Find all javascript files that need to be included
+ * for this page ... from the arrays ... :)
+ * Coded by: Erik Kristensen
+ */
+
+ $dir = trim(basename($_SERVER["SCRIPT_FILENAME"]), '.php');
+ $path = "/usr/local/www/javascript/" . $dir . "/";
+ if (is_dir($path)) {
+ if ($dh = opendir($path)) {
+ while (($file = readdir($dh)) !== false) {
+ if (is_dir($file)) continue;
+ echo "\t".'<script type="text/javascript" src="/javascript/'.$dir.'/'.$file.'"></script>'."\n";
+ }
+ closedir($dh);
+ }
+ }
+
+ if ($oSajax):
+?>
+ <script language="javascript" type="text/javascript">
+ <?php $oSajax->sajax_show_javascript(); ?>
+ </script>
+<? endif; ?>
+
+<?php if (!isset($closehead)){ ?>
+</head>
+<?php } ?>
diff --git a/config/snort-dev/snort_headbase.inc b/config/snort-dev/snort_headbase.inc
new file mode 100644
index 00000000..429545ae
--- /dev/null
+++ b/config/snort-dev/snort_headbase.inc
@@ -0,0 +1,38 @@
+<?php if ($config['version'] >= 6): ?>
+<link rel="stylesheet" type="text/css" href="/themes/<?php echo $g['theme']; ?>/new_tab_menu.css"media="all">
+<?php else: ?>
+<link rel="stylesheet" type="text/css" href="./css/new_tab_menu.css" media="all">
+<?php endif; ?>
+
+<link rel="stylesheet" type="text/css" href="./css/sexybuttons.css" media="all" />
+<link rel="stylesheet" type="text/css" href="./css/style_snort2.css" media="all" />
+
+<?php
+
+
+echo "\t<script type=\"text/javascript\" src=\"./javascript/jquery-1.4.4.min.js\"></script>\n";
+
+echo "\t<script type=\"text/javascript\" src=\"./javascript/jquery.form.js\"></script>\n";
+
+echo "\t<script type=\"text/javascript\" src=\"./javascript/jquery.dataTables.min.js\"></script>\n";
+
+echo "\t<script type=\"text/javascript\" src=\"./javascript/snort_globalsend.js\"></script>\n";
+
+
+?>
+
+<?php
+// this has to be loaded at the bottom
+$snort_custom_rnd_box = '
+<script>
+ /* makes boxes round */
+ /* load at bottom */
+ NiftyCheck();
+ Rounded("div#mainarea2","bl br tr","#FFF","#dddddd","smooth");
+ Rounded("div#mainarea3","bl br tr","#FFF","#dddddd","smooth");
+ Rounded("td#tdbggrey","bl br tr","#FFF","#dddddd","smooth");
+ Rounded("div#mainarea4","all","#FFF","#dddddd","smooth");
+ Rounded("div#mainarea5","all","#eeeeee","#dddddd","smooth");
+</script>
+';
+?> \ No newline at end of file
diff --git a/config/snort-dev/snort_help_info.php b/config/snort-dev/snort_help_info.php
new file mode 100644
index 00000000..0eff6309
--- /dev/null
+++ b/config/snort-dev/snort_help_info.php
@@ -0,0 +1,340 @@
+<?php
+/* $Id$ */
+/*
+ snort_interfaces.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2008-2009 Robert Zelaya.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ */
+
+require_once("guiconfig.inc");
+require_once("/usr/local/pkg/snort/snort_gui.inc");
+
+ $pgtitle = 'Snort: Help and Info';
+ include("/usr/local/pkg/snort/snort_head.inc");
+
+?>
+
+<style type="text/css">
+
+h1 {
+font-size: 3em;
+margin: 20px 0;
+}
+
+.container2 {
+width: 765px;
+margin: 0px auto;
+}
+ul.tabs {
+ margin: 0;
+ padding: 0;
+ float: left;
+ list-style: none;
+ height: 25px;
+ border-bottom: 1px solid #999;
+ border-left: 1px solid #999;
+ width: 100%;
+}
+ul.tabs li {
+ float: left;
+ margin: 0;
+ padding: 0;
+ height: 24px;
+ line-height: 24px;
+ border: 1px solid #000000;
+ border-left: none;
+ margin-bottom: -1px;
+ background: #ffffff;
+ overflow: hidden;
+ position: relative;
+}
+ul.tabs li a {
+ text-decoration: none;
+ color: #000000;
+ display: block;
+ font-size: 1.2em;
+ padding: 0 20px;
+ border: 1px solid #fff;
+ outline: none;
+}
+ul.tabs li a:hover {
+ background: #eeeeee;
+}
+
+html ul.tabs li.active, html ul.tabs li.active a:hover {
+ background: #fff;
+ border-bottom: 1px solid #fff;
+ color: #000000;
+}
+.tab_container {
+ border: 1px solid #999;
+ border-top: none;
+ clear: both;
+ float: left;
+ width: 100%;
+ background: #fff;
+ -moz-border-radius-bottomright: 5px;
+ -khtml-border-radius-bottomright: 5px;
+ -webkit-border-bottom-right-radius: 5px;
+ -moz-border-radius-bottomleft: 5px;
+ -khtml-border-radius-bottomleft: 5px;
+ -webkit-border-bottom-left-radius: 5px;
+}
+.tab_content {
+ padding: 0px 20px;
+ font-size: 1.2em;
+}
+.tab_content h2 {
+ font-weight: normal;
+ padding-bottom: 10px;
+ border-bottom: 1px dashed #ddd;
+ font-size: 1.8em;
+}
+.tab_content h3 a{
+ color: #254588;
+}
+.tab_content img {
+ position:relative;
+ left:-19px;
+ margin: 0 0px 0px 0;
+ border: 1px solid #ddd;
+ padding: 5px;
+}
+</style>
+
+<script type="text/javascript">
+
+jQuery(document).ready(function() {
+
+ //Default Action
+ jQuery(".tab_content").hide(); //Hide all content
+ jQuery("ul.tabs li:first").addClass("active").show(); //Activate first tab
+ jQuery(".tab_content:first").show(); //Show first tab content
+
+ //On Click Event
+ jQuery("ul.tabs li").click(function() {
+ jQuery("ul.tabs li").removeClass("active"); //Remove any "active" class
+ jQuery(this).addClass("active"); //Add "active" class to selected tab
+ jQuery(".tab_content").hide(); //Hide all tab content
+ var activeTab = jQuery(this).find("a").attr("href"); //Find the rel attribute value to identify the active tab + content
+ jQuery(activeTab).fadeIn(); //Fade in the active content
+ return false;
+ });
+
+});
+
+</script>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+
+<noscript>
+<div class="alert" ALIGN=CENTER><img src="../themes/<?php echo $g['theme']; ?>/images/icons/icon_alert.gif" /><strong> Please enable JavaScript to view this content</strong></div>
+</noscript>
+
+<!-- hack to fix the hardcoed fbegin link in header -->
+<div id="header-left2"><a href="../index.php" id="status-link2"><img src="./images/transparent.gif" border="0"></img></a></div>
+
+<div class="body2"><!-- hack to fix the hardcoed fbegin link in header -->
+<div id="header-left2"><a href="../index.php" id="status-link2"><img src="./images/transparent.gif" border="0"></img></a></div>
+
+<? //if($pfsense_stable == 'yes'){echo '<p class="pgtitle">' . $pgtitle . '</p>';}
+echo '<p class="pgtitle">' . $pgtitle . '</p>';
+?>
+
+
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td class="tabnavtbl">
+
+ <div class="newtabmenu" style="margin: 1px 0px; width: 775px;"><!-- Tabbed bar code-->
+ <ul class="newtabmenu">
+ <li><a href="/snort/snort_interfaces.php"><span>Snort Interfaces</span></a></li>
+ <li><a href="/snort/snort_interfaces_global.php"><span>Global Settings</span></a></li>
+ <li><a href="/snort/snort_download_updates.php"><span>Updates</span></a></li>
+ <li><a href="/snort/snort_alerts.php"><span>Alerts</span></a></li>
+ <li><a href="/snort/snort_blocked.php"><span>Blocked</span></a></li>
+ <li><a href="/snort/snort_interfaces_whitelist.php"><span>Whitelists</span></a></li>
+ <li><a href="/snort/snort_interfaces_suppress.php"><span>Suppress</span></a></li>
+ <li class="newtabmenu_active"><a href="/snort/snort_help_info.php"><span>Help</span></a></li>
+ </ul>
+ </div>
+
+ </td>
+ </tr>
+ <tr>
+ <td id="tdbggrey">
+ <table width="100%" border="0" cellpadding="10px" cellspacing="0">
+ <tr>
+ <td class="tabnavtbl">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <!-- START MAIN AREA -->
+
+ <div class="container2">
+ <ul class="tabs">
+ <li><a href="#tab1">Home</a></li>
+ <li><a href="#tab2">Change Log</a></li>
+ <li><a href="#tab3">Getting Help</a></li>
+ <li><a href="#tab4">Heros</a></li>
+
+ </ul>
+ <div class="tab_container">
+ <div id="tab1" class="tab_content">
+ <h2><a href="#"> <img src="./images/logo.jpg" width="750px" height="76" ALT="Snort Package" /></a></h2>
+
+ <p>
+ <font size="5"><strong>Snort Package</strong></font> is a GUI based front-end for Sourcefire's Snort ® IDS/IPS software. The Snort Package goal is to be
+ the best open-source GUI to manage multiple snort sensors and multiple rule snapshots. The project other goal is to be a highly competitive GUI for
+ network monitoring for both private and enterprise use. Lastly, this project software development should bring programmers and users together to create
+ software.
+ </p>
+ <p>
+
+ <font size="5"><strong>What is Snort ?</strong></font> Used by fortune 500 companies and goverments Snort is the most widely deployed IDS/IPS technology worldwide. It features rules based logging and
+ can perform content searching/matching in addition to being used to detect a variety of other attacks and probes, such as buffer overflows, stealth port
+ scans, CGI attacks, SMB probes, and much more.
+ </p>
+ <p>
+ <font size="5"><strong>Requirements :</strong></font><br>
+ Minimum requirement 256 mb ram, 500 MHz CPU.<br>
+ Recommended 500 mb ram, 1 Ghz CPU.<br>
+ The more rules you run the more memory you need.<br>
+
+ The more interfaces you select the more memory you need.<br><br>
+ Development is done on a Alix 2D3 system (500 MHz AMD Geode LX800 CPU 256MB DDR DRAM).
+ </p>
+
+ </div>
+
+ <div id="tab2" class="tab_content">
+ <h2><a href="#"> <img src="./images/logo.jpg" width="750px" height="76" ALT="Snort Package" /></a></h2>
+
+ <p><font size="5"><strong>Change Log</strong></font></p>
+
+ <p>Changes to this package can be viwed by following <a href="https://rcs.pfsense.org/projects/pfsense-packages" target="_blank"><font size="2" color="#990000"><strong>pfSense packages repository</strong></font></a></p>
+
+ </div>
+
+ <div id="tab3" class="tab_content">
+ <h2><a href="#"> <img src="./images/logo.jpg" width="750px" height="76" ALT="Snort Package" /></a></h2>
+
+ <p><font size="5"><strong>Getting Help</strong></font></p>
+
+<p>
+<font size="2"><strong>Obtaining Support</strong></font><br>
+
+We provide several means of obtaining support for pfSense.
+</p>
+
+<p>
+<font color="#990000" size="4"><strong>Free Options</strong></font><br>
+Our free options include our <a href="http://forum.pfsense.org/" target="_blank"><font color="#990000"><strong>forum</strong></font></a>, <a href="http://www.pfsense.org/index.php?option=com_content&task=view&id=66&Itemid=71" target="_blank"><font color="#990000"><strong>mailing list</strong></font></a> , and <a href="http://www.pfsense.org/index.php?option=com_content&task=view&id=64&Itemid=72" target="_blank"><font color="#990000"><strong>IRC channel</strong></font></a>. Before using any of these resources, please review the Project Rules below.
+</p>
+
+<p>
+<font color="#990000" size="4"><strong>Commercial Support</strong></font><br>
+
+<a href="https://portal.pfsense.org/index.php/support-subscription" target="_blank"><font color="#990000"><strong>Commercial support</strong></font></a> is available from the company founded by the founders of the pfSense project, <a href="http://www.bsdperimeter.com/" target="_blank"><font color="#990000"><strong>BSD Perimeter</strong></font></a>. Phone and email support is available for <a href="https://portal.pfsense.org/index.php/support-subscription" target="_blank"><font color="#990000"><strong>support subscribers</strong></font></a> only.
+</p>
+
+<p>
+<font color="#990000" size="4"><strong>Project Rules</strong></font><br>
+To keep things orderly, and be fair to everyone, we must enforce these rules.
+</p>
+
+<p>
+Please do not post support questions to the blog comments. The comments are for discussion of the post, and letting people ask questions there would make a mess of the purpose of those comments. Any support questions will not be moderator approved.
+</p>
+
+<p>
+Please do not cross post questions between the forum and mailing list, unless your inquiry has gone unanswered for at least 24 hours. Do not bump your mailing list or forum posts for at least 24 hours. If you have not received a reply after more than 24 hours, you are welcome to bump your thread.
+</p>
+
+<p>
+Please do not email individuals, the coreteam address, or private message people on the forum to ask questions. We provide a wide variety of means for obtaining help in a public forum, where it helps others who have the same questions in the future. We don't have enough time to answer all the questions our users post in the public forums, much less via email and private messages. Since we cannot possibly reply to everyone's email and private messages, to be fair we will not reply to anyone. Individual attention via phone and email support is available for commercial support customers.
+</p>
+ </div>
+
+ <div id="tab4" class="tab_content">
+ <h2><a href="#"> <img src="./images/logo.jpg" width="750px" height="76" ALT="Snort Package" /></a></h2>
+
+
+ <p><font size="5"><strong>Heros</strong></font></p>
+
+ <p>Pfsense Snort Package users who have cared enough to donate to this project. I can't thank you enough for all your help. With-out your support I would have stoped long time ago.</p>
+
+ <p>If your not on this list PM me and I will add you. If you would like to be removed pm me and I will remove you.</p>
+
+ <p><font size="5"><strong>Names</strong></font></p>
+
+ <p>sandro tavella</p>
+ <p>João Kemp Filho</p>
+
+ <p>Julio Fumoso</p>
+ <p>Rolland Hart</p>
+ <p>DiMarco Technology Solutions Inc.</p>
+ <p>Brett Burley</p>
+ <p>Tomasz Iskra</p>
+ <p>Bruno Buchschacher</p>
+
+ <p>Marco Pannetto</p>
+ <p>Christopher Weakland</p>
+ <p>Antonio Riveros</p>
+ <p>DigitalJer</p>
+ <p>Serialdie</p>
+ <p>Dlawley</p>
+
+ <p>Onhel</p>
+ <p>Jerrygoldsmith</p>
+
+
+ </div>
+ </div>
+</div>
+
+ <!-- STOP MAIN AREA -->
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+
+</div>
+
+
+<!-- footer do not touch below -->
+<?php
+include("fend.inc");
+echo $snort_custom_rnd_box;
+?>
+
+
+</body>
+</html>
diff --git a/config/snort-dev/snort_interfaces_global.php b/config/snort-dev/snort_interfaces_global.php
new file mode 100644
index 00000000..6e1d015f
--- /dev/null
+++ b/config/snort-dev/snort_interfaces_global.php
@@ -0,0 +1,343 @@
+<?php
+/* $Id$ */
+/*
+ snort_interfaces.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2008-2009 Robert Zelaya.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ */
+
+require_once("guiconfig.inc");
+require_once("/usr/local/pkg/snort/snort_new.inc");
+require_once("/usr/local/pkg/snort/snort_gui.inc");
+
+// set page vars
+
+$generalSettings = snortSql_fetchAllSettings('SnortSettings', 'id', '1');
+
+$snortdownload_off = ($generalSettings['snortdownload'] == 'off' ? 'checked' : '');
+$snortdownload_on = ($generalSettings['snortdownload'] == 'on' ? 'checked' : '');
+
+$emergingthreats_on = ($generalSettings['emergingthreats'] == 'on' ? 'checked' : '');
+
+$updaterules = $generalSettings['updaterules'];
+
+$oinkmastercode = $generalSettings['oinkmastercode'];
+
+$rm_blocked = $generalSettings['rm_blocked'];
+
+$snortloglimit_off = ($generalSettings['snortloglimit'] == 'off' ? 'checked' : '');
+$snortloglimit_on = ($generalSettings['snortloglimit'] == 'on' ? 'checked' : '');
+
+$snortloglimitsize = $generalSettings['snortloglimitsize'];
+
+$snortalertlogtype = $generalSettings['snortalertlogtype'];
+
+$forcekeepsettings_on = ($generalSettings['forcekeepsettings'] == 'on' ? 'checked' : '');
+
+$snortlogCurrentDSKsize = round(exec('df -k /var | grep -v "Filesystem" | awk \'{print $4}\'') / 1024);
+
+
+ $pgtitle = "Services: Snort: Global Settings";
+ include("/usr/local/pkg/snort/snort_head.inc");
+
+?>
+
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<script type="text/javascript">
+
+ // set the page resets watchThis
+ function resetSnortDefaults(general0) {
+
+ if (general0.snortdownload == 'on') {
+ jQuery("#snortdownloadon").attr("checked", "checked");
+ }else{
+ jQuery("#snortdownloadoff").attr("checked", "checked");
+ }
+
+ jQuery("#oinkmastercode").val(general0.oinkmastercode);
+
+ if (general0.emergingthreats == 'on') {
+ jQuery("#emergingthreats").attr("checked", "checked");
+ }else{
+ jQuery("#emergingthreats").removeAttr('checked');
+ }
+
+ jQuery("#updaterules").val(general0.updaterules);
+
+ if (general0.snortloglimit == 'on') {
+ jQuery("#snortloglimiton").attr("checked", "checked");
+ }else{
+ jQuery("#snortloglimitoff").attr("checked", "checked");
+ }
+
+ jQuery("#snortloglimitsize").val(general0.snortloglimitsize);
+
+ jQuery("#rm_blocked").val(general0.rm_blocked);
+
+ jQuery("#snortalertlogtype").val(general0.snortalertlogtype);
+
+ if (general0.forcekeepsettings == 'on') {
+ jQuery("#forcekeepsettings").attr("checked", "checked");
+ }else{
+ jQuery("#forcekeepsettings").removeAttr('checked');
+ }
+
+ }
+
+</script>
+
+<div id="loadingWaiting">
+ <p class="loadingWaitingMessage"><img src="./images/loading.gif" /> <br>Please Wait...</p>
+</div>
+
+<?php include("fbegin.inc"); ?>
+<!-- hack to fix the hardcoed fbegin link in header -->
+<div id="header-left2">
+<a href="../index.php" id="status-link2">
+<img src="./images/transparent.gif" border="0"></img>
+</a>
+</div>
+
+<div class="body2"><!-- hack to fix the hardcoed fbegin link in header -->
+<div id="header-left2"><a href="../index.php" id="status-link2"><img src="./images/transparent.gif" border="0"></img></a></div>
+
+<? //if($pfsense_stable == 'yes'){echo '<p class="pgtitle">' . $pgtitle . '</p>';}
+echo '<p class="pgtitle">' . $pgtitle . '</p>';
+?>
+
+<form id="iform" action="./snort_json_post.php" method="post">
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+
+ <div class="newtabmenu" style="margin: 1px 0px; width: 775px;"><!-- Tabbed bar code-->
+ <ul class="newtabmenu">
+ <li><a href="/snort/snort_interfaces.php"><span>Snort Interfaces</span></a></li>
+ <li class="newtabmenu_active"><a href="/snort/snort_interfaces_global.php"><span>Global Settings</span></a></li>
+ <li><a href="/snort/snort_download_updates.php"><span>Updates</span></a></li>
+ <li><a href="/snort/snort_alerts.php"><span>Alerts</span></a></li>
+ <li><a href="/snort/snort_blocked.php"><span>Blocked</span></a></li>
+ <li><a href="/snort/snort_interfaces_whitelist.php"><span>Whitelists</span></a></li>
+ <li><a href="/snort/snort_interfaces_suppress.php"><span>Suppress</span></a></li>
+ <li><a href="/snort/snort_help_info.php"><span>Help</span></a></li>
+ </li>
+ </ul>
+ </div>
+
+ </td>
+ </tr>
+ <tr>
+ <td id="tdbggrey">
+ <table width="100%" border="0" cellpadding="10px" cellspacing="0">
+ <tr>
+ <td class="tabnavtbl">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <!-- START MAIN AREA -->
+
+ <input type="hidden" name="snortSaveSettings" value="1" /> <!-- what to do, save -->
+ <input type="hidden" name="dbTable" value="SnortSettings" /> <!-- what db-->
+ <input type="hidden" name="ifaceTab" value="snort_interfaces_global" /> <!-- what interface tab -->
+
+ <tr id="maintable" data-options='{"pagetable":"SnortSettings"}'> <!-- db to lookup -->
+ <td colspan="2" valign="top" class="listtopic">Please Choose The Type Of Rules You Wish To Download</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell2">Install Snort.org rules</td>
+ <td width="78%" class="vtable">
+ <table cellpadding="0" cellspacing="0">
+ <tr>
+ <td colspan="2">
+ <input name="snortdownload" type="radio" id="snortdownloadoff" value="off" <?=$snortdownload_off;?> >
+ <span class="vexpl">Do <strong>NOT</strong> Install</span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <input name="snortdownload" type="radio" id="snortdownloadon" value="on" <?=$snortdownload_on;?> >
+ <span class="vexpl">Install Basic Rules or Premium rules</span> <br>
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <a href="https://www.snort.org/signup" target="_blank">
+ Sign Up for a Basic Rule Account
+ </a><br>
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <a href="http://www.snort.org/vrt/buy-a-subscription" target="_blank">
+ Sign Up for Sourcefire VRT Certified Premium Rules. This Is Highly Recommended
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ </table>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td colspan="2" valign="top"><span class="vexpl">Oinkmaster code</span></td>
+ </tr>
+ <tr>
+ <td class="vncell2" valign="top"><span class="vexpl">Code</span></td>
+ <td class="vtable">
+ <input name="oinkmastercode" type="text"class="formfld" id="oinkmastercode" size="52" value="<?=$oinkmastercode;?>" > <br>
+ <span class="vexpl">Obtain a snort.org Oinkmaster code and paste here.</span>
+ </td>
+ </table>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell2"><span>Install <strong>Emergingthreats</strong> rules</span></td>
+ <td width="78%" class="vtable">
+ <input name="emergingthreats" id="emergingthreats" type="checkbox" value="on" <?=$emergingthreats_on; ?>> <br>
+ <span class="vexpl">Emerging Threats is an open source community that produces fastest moving and diverse Snort Rules.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell2"><span>Update rules automatically</span></td>
+ <td width="78%" class="vtable">
+ <select name="updaterules" class="formfld" id="updaterules">
+ <?php
+ $updateDaysList = array('never' => 'NEVER', '6h_up' => '6 HOURS', '12h_up' => '12 HOURS', '1d_up' => '1 DAY', '4d_up' => '4 DAYS', '7d_up' => '7 DAYS', '28d_up' => '28 DAYS');
+ snortDropDownList($updateDaysList, $updaterules);
+ ?>
+ </select><br>
+ <span class="vexpl">
+ Please select the update times for rules.<br> Hint: in most cases, every 12 hours is a good choice.
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><span>General Settings</span></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell2"><span>Log Directory SizeLimit</span><br>
+ <br><br><br><br><br>
+ <span class="red"><strong>Note:</strong><br>Available space is <strong><?=$snortlogCurrentDSKsize; ?>MB</strong></span>
+ </td>
+ <td width="78%" class="vtable">
+ <table cellpadding="0" cellspacing="0">
+ <tr>
+ <td colspan="2">
+ <input name="snortloglimit" type="radio" id="snortloglimiton" value="on" <?=$snortloglimit_on;?> >
+ <span class="vexpl"><strong>Enable</strong> directory size limit (Default)</span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <input name="snortloglimit" type="radio" id="snortloglimitoff" value="off" <?=$snortloglimit_off ?> >
+ <span class="vexpl"><strong>Disable </strong>directory size limit</span><br><br>
+ <span class="vexpl red"><strong>Warning:</strong> Pfsense Nanobsd should use no more than 10MB of space.</span>
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ </table>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td class="vncell3"><span>Size in <strong>MB</strong></span></td>
+ <td class="vtable">
+ <input name="snortloglimitsize" type="text" class="formfld" id="snortloglimitsize" size="7" value="<?=$snortloglimitsize;?>">
+ <span class="vexpl">Default is <strong>20%</strong> of available space.</span>
+ </td>
+ </table>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell2"><span>Remove blocked hosts every</span></td>
+ <td width="78%" class="vtable">
+ <select name="rm_blocked" class="formfld" id="rm_blocked">
+ <?php
+ $BlockTimeReset = array('never' => 'NEVER', '1h_b' => '1 HOUR', '3h_b' => '3 HOURS', '6h_b' => '6 HOURS', '12h_b' => '12 HOURS', '1d_b' => '1 DAY', '4d_b' => '4 DAYS', '7d_b' => '7 DAYS', '28d_b' => '28 DAYS');
+ snortDropDownList($BlockTimeReset, $rm_blocked);
+ ?>
+ </select><br>
+ <span class="vexpl">Please select the amount of time you would likehosts to be blocked for.<br>Hint: in most cases, 1 hour is a good choice.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell2"><span>Alerts file descriptiontype</span></td>
+ <td width="78%" class="vtable">
+ <select name="snortalertlogtype" class="formfld" id="snortalertlogtype">
+ <?php
+ // TODO: make this option a check box with all log types
+ $alertLogTypeList = array('full' => 'FULL', 'fast' => 'SHORT');
+ snortDropDownList($alertLogTypeList, $snortalertlogtype)
+ ?>
+ </select><br>
+ <span class="vexpl">Please choose the type of Alert logging you will like see in your alert file.<br> Hint: Best pratice is to chose full logging.</span>&nbsp;
+ <span class="red"><strong>WARNING:</strong></span>&nbsp;<strong>On change, alert file will be cleared.</strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell2"><span>Keep snort settings after deinstall</span></td>
+ <td width="22%" class="vtable">
+ <input name="forcekeepsettings" id="forcekeepsettings" type="checkbox" value="on" <?=$forcekeepsettings_on;?> >
+ <span class="vexpl">Settings will not be removed during deinstall.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell2"><span>Save Settings</span></td>
+ <td width="30%" class="vtable">
+ <input name="Submit" type="submit" class="formbtn" value="Save">
+ <input id="cancel" type="button" class="formbtn" value="Cancel">
+ </form>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell2">
+ <form id="iform2" action="./snort_json_post.php" method="post">
+ <input name="Reset" type="submit" class="formbtn" value="Reset" onclick="return confirm('Do you really want to remove all your settings ? All Snort Settings will be reset !')" >
+ <input type="hidden" name="reset_snortgeneralsettings" value="1" />
+ <span class="vexpl red"><strong>&nbsp;WARNING:</strong><br> This will reset all global and interface settings.</span>
+ </form>
+ </td>
+ <td class="vtable">
+ <span class="vexpl red"><strong>Note:</strong></span><br>
+ <span class="vexpl">Changing any settings on this page will affect all interfaces. Please, double check if your oink code is correct and the type of snort.org account you hold.</span>
+ </td>
+ </tr>
+
+
+ <!-- STOP MAIN AREA -->
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</div>
+
+
+<!-- footer do not touch below -->
+<?php
+include("fend.inc");
+echo $snort_custom_rnd_box;
+?>
+
+
+</body>
+</html>
diff --git a/config/snort-dev/snort_interfaces_whitelist.php b/config/snort-dev/snort_interfaces_whitelist.php
new file mode 100644
index 00000000..189770f2
--- /dev/null
+++ b/config/snort-dev/snort_interfaces_whitelist.php
@@ -0,0 +1,194 @@
+<?php
+/* $Id$ */
+/*
+ snort_interfaces.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Modified for the Snaort Package By
+ Copyright (C) 2008-2011 Robert Zelaya.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ */
+
+require_once("guiconfig.inc");
+require_once("/usr/local/pkg/snort/snort_new.inc");
+require_once("/usr/local/pkg/snort/snort_gui.inc");
+
+
+$a_whitelist = snortSql_fetchAllWhitelistTypes('SnortWhitelist');
+
+ if ($a_whitelist == 'Error') {
+ echo 'Error';
+ exit(0);
+ }
+
+ $pgtitle = "Services: Snort: Whitelist";
+ include("/usr/local/pkg/snort/snort_head.inc");
+
+?>
+
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<div id="loadingWaiting">
+ <p class="loadingWaitingMessage"><img src="./images/loading.gif" /> <br>Please Wait...</p>
+</div>
+
+<?php include("fbegin.inc"); ?>
+<!-- hack to fix the hardcoed fbegin link in header -->
+<div id="header-left2">
+<a href="../index.php" id="status-link2">
+<img src="./images/transparent.gif" border="0"></img>
+</a>
+</div>
+
+<div class="body2"><!-- hack to fix the hardcoed fbegin link in header -->
+<div id="header-left2"><a href="../index.php" id="status-link2"><img src="./images/transparent.gif" border="0"></img></a></div>
+
+<? //if($pfsense_stable == 'yes'){echo '<p class="pgtitle">' . $pgtitle . '</p>';}
+echo '<p class="pgtitle">' . $pgtitle . '</p>';
+?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+
+ <div class="newtabmenu" style="margin: 1px 0px; width: 775px;"><!-- Tabbed bar code-->
+ <ul class="newtabmenu">
+ <li><a href="/snort/snort_interfaces.php"><span>Snort Interfaces</span></a></li>
+ <li><a href="/snort/snort_interfaces_global.php"><span>Global Settings</span></a></li>
+ <li><a href="/snort/snort_download_updates.php"><span>Updates</span></a></li>
+ <li><a href="/snort/snort_alerts.php"><span>Alerts</span></a></li>
+ <li><a href="/snort/snort_blocked.php"><span>Blocked</span></a></li>
+ <li class="newtabmenu_active"><a href="/snort/snort_interfaces_whitelist.php"><span>Whitelists</span></a></li>
+ <li><a href="/snort/snort_interfaces_suppress.php"><span>Suppress</span></a></li>
+ <li><a href="/snort/snort_help_info.php"><span>Help</span></a></li>
+ </li>
+ </ul>
+ </div>
+
+ </td>
+ </tr>
+ <tr>
+ <td id="tdbggrey">
+ <table width="100%" border="0" cellpadding="10px" cellspacing="0">
+ <tr>
+ <td class="tabnavtbl">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <!-- START MAIN AREA -->
+
+ <tr id="maintable" data-options='{"pagetable":"SnortWhitelist"}'> <!-- db to lookup -->
+ <td width="20%" class="listhdrr">File Name</td>
+ <td width="45%" class="listhdrr">Values</td>
+ <td width="35%" class="listhdr">Description</td>
+ <td width="10%" class="list"></td>
+ </tr>
+ <?php $i = 1; foreach ($a_whitelist as $list): ?>
+ <tr id="rowlist_<?=$i;?>" class="icon_xrow" data-options='{"rowuuid":"<?=$list['uuid'];?>"}' >
+ <td id="rowfilename<?=$i;?>" class="listlr" ondblclick="document.location='snort_interfaces_whitelist_edit.php?id=<?=$i;?>';"><?=$list['filename'];?></td>
+ <td class="listr" ondblclick="document.location='snort_interfaces_whitelist_edit.php?id=<?=$i;?>';">
+ <?php
+ $a = 0;
+ $countList = count($list['list']);
+ foreach ($list['list'] as $value)
+ {
+
+ $a++;
+
+ if ($a != $countList || $countList == 1)
+ {
+ echo $value['ip'];
+ }
+
+ if ($a > 0 && $a != $countList)
+ {
+ echo ',' . ' ';
+ }else{
+ echo ' ';
+ }
+
+ } // end foreach
+
+ if ($a > 3)
+ {
+ echo '...';
+ }
+ ?>
+ </td>
+ <td class="listbg" ondblclick="document.location='snort_interfaces_whitelist_edit.php?id=<?=$i;?>';">
+ <font color="#FFFFFF"> <?=htmlspecialchars($list['description']);?>&nbsp;
+ </td>
+ <td valign="middle" nowrap class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle">
+ <a href="snort_interfaces_whitelist_edit.php?uuid=<?=$list['uuid'];?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif"width="17" height="17" border="0" title="edit whitelist"></a>
+ </td>
+ <td>
+ <img id="icon_x_<?=$i;?>" class="icon_click icon_x" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="delete list" >
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php $i++; endforeach; ?>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle" width="17">&nbsp;</td>
+ <td valign="middle"><a href="snort_interfaces_whitelist_edit.php?uuid=<?=genAlphaNumMixFast(28, 28);?> "><img src="/themes/nervecenter/images/icons/icon_plus.gif" width="17" height="17" border="0" title="add a new list"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+
+ <!-- STOP MAIN AREA -->
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</div>
+
+
+<!-- footer do not touch below -->
+<?php
+include("fend.inc");
+echo $snort_custom_rnd_box;
+?>
+
+
+</body>
+</html>
diff --git a/config/snort-dev/snort_interfaces_whitelist_edit.php b/config/snort-dev/snort_interfaces_whitelist_edit.php
new file mode 100644
index 00000000..5313edc6
--- /dev/null
+++ b/config/snort-dev/snort_interfaces_whitelist_edit.php
@@ -0,0 +1,387 @@
+<?php
+/* $Id$ */
+/*
+ snort_interfaces.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2008-2009 Robert Zelaya.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ */
+
+require_once('guiconfig.inc');
+require_once('/usr/local/pkg/snort/snort_new.inc');
+require_once('/usr/local/pkg/snort/snort_gui.inc');
+
+$uuid = $_GET['uuid'];
+if (isset($_POST['uuid']))
+$uuid = $_POST['uuid'];
+
+if ($uuid == '') {
+ echo 'error: no uuid';
+ exit(0);
+}
+
+$a_list = snortSql_fetchAllSettings('SnortWhitelist', 'uuid', $uuid);
+
+// $a_list returns empty use defaults
+if ($a_list == '')
+{
+
+ $a_list = array(
+ 'id' => '',
+ 'date' => date(U),
+ 'uuid' => $uuid,
+ 'filename' => '',
+ 'snortlisttype' => 'whitelist',
+ 'description' => '',
+ 'wanips' => 'on',
+ 'wangateips' => 'on',
+ 'wandnsips' => 'on',
+ 'vips' => 'on',
+ 'vpnips' => 'on'
+ );
+
+}
+
+$listFilename = $a_list['filename'];
+
+$a_list['list'] = snortSql_fetchAllSettingsList('SnortWhitelistips', $listFilename);
+
+$wanips_chk = $a_list['wanips'];
+$wanips_on = ($wanips_chk == 'on' ? 'checked' : '');
+
+$wangateips_chk = $a_list['wangateips'];
+$wangateips_on = ($wangateips_chk == 'on' ? 'checked' : '');
+
+$wandnsips_chk = $a_list['wandnsips'];
+$wandnsips_on = ($wandnsips_chk == 'on' ? 'checked' : '');
+
+$vips_chk = $a_list['vips'];
+$vips_on = ($vips_chk == 'on' ? 'checked' : '');
+
+$vpnips_chk = $a_list['vpnips'];
+$vpnips_on = ($vpnips_chk == 'on' ? 'checked' : '');
+
+
+
+ $pgtitle = "Services: Snort: Whitelist";
+ include("/usr/local/pkg/snort/snort_head.inc");
+
+?>
+
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<script type="text/javascript">
+
+ // set the page resets watchThis
+ function resetSnortDefaults(general0) {
+
+ jQuery("#name").val(general0.filename);
+ jQuery("#descr").val(general0.description);
+ jQuery("#snortlisttype").val(general0.snortlisttype);
+
+ if (general0.wanips == 'on') {
+ jQuery("#wanips").attr("checked", "checked");
+ }else{
+ jQuery("#wanips").removeAttr('checked');
+ }
+
+ if (general0.wangateips == 'on') {
+ jQuery("#wangateips").attr("checked", "checked");
+ }else{
+ jQuery("#wangateips").removeAttr('checked');
+ }
+
+ if (general0.wandnsips == 'on') {
+ jQuery("#wandnsips").attr("checked", "checked");
+ }else{
+ jQuery("#wandnsips").removeAttr('checked');
+ }
+
+ if (general0.vips == 'on') {
+ jQuery("#vips").attr("checked", "checked");
+ }else{
+ jQuery("#vips").removeAttr('checked');
+ }
+
+ if (general0.vpnips == 'on') {
+ jQuery("#vpnips").attr("checked", "checked");
+ }else{
+ jQuery("#vpnips").removeAttr('checked');
+ }
+
+ }
+
+ function resetSnortDefaultsList1(list1) {
+
+ jQuery('.icon_xrow').remove();
+
+ var rowNumCount = 0;
+
+ jQuery.each(list1, function() {
+
+ //alert(this.ip);
+
+ jQuery('#listloopblock').append(
+ "\n" + "<tr id=\"rowlist_" + rowNumCount + '" ' + 'class="icon_xrow" ' + "data-options='{\"rowuuid\":\"" + this.uuid + "\"}'>" + "\n" +
+ '<td>' + "\n" +
+ '<input class="formfld" name="list[' + rowNumCount + '][ip]" type="text" id="address" size="30" value="' + this.ip + '" />' + "\n" +
+ '</td>' + "\n" +
+ '<td>' + "\n" +
+ '<input class="formfld" name="list[' + rowNumCount + '][description]" type="text" id="detail" size="50" value="' + this.description + '" />' + "\n" +
+ '</td>' + "\n" +
+ '<td>' + "\n" +
+ '<img id="icon_x_' + rowNumCount + '" class="icon_click icon_x" src="/themes/nervecenter/images/icons/icon_x.gif" width="17" height="17" border="0" title="delete list" >' + "\n" +
+ '</td>' + "\n" +
+ '<input name="list[' + rowNumCount + '][uuid]" value="' + this.uuid + '" type="hidden">' + "\n" +
+ '</tr>' + "\n"
+ );
+
+ rowNumCount++;
+
+ });
+
+ }
+
+</script>
+
+<div id="loadingWaiting">
+ <p class="loadingWaitingMessage"><img src="/snort/images/loading.gif" /> <br>Please Wait...</p>
+</div>
+
+<?php include("fbegin.inc"); ?>
+<!-- hack to fix the hardcoed fbegin link in header -->
+<div id="header-left2">
+<a href="../index.php" id="status-link2">
+<img src="./images/transparent.gif" border="0"></img>
+</a>
+</div>
+
+<div class="body2"><!-- hack to fix the hardcoed fbegin link in header -->
+<div id="header-left2"><a href="../index.php" id="status-link2"><img src="./images/transparent.gif" border="0"></img></a></div>
+
+<? //if($pfsense_stable == 'yes'){echo '<p class="pgtitle">' . $pgtitle . '</p>';}
+echo '<p class="pgtitle">' . $pgtitle . '</p>';
+?>
+
+<form id="iform" action="./snort_json_post.php" method="post">
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+
+ <div class="newtabmenu" style="margin: 1px 0px; width: 775px;"><!-- Tabbed bar code-->
+ <ul class="newtabmenu">
+ <li><a href="/snort/snort_interfaces.php"><span>Snort Interfaces</span></a></li>
+ <li><a href="/snort/snort_interfaces_global.php"><span>Global Settings</span></a></li>
+ <li><a href="/snort/snort_download_updates.php"><span>Updates</span></a></li>
+ <li><a href="/snort/snort_alerts.php"><span>Alerts</span></a></li>
+ <li><a href="/snort/snort_blocked.php"><span>Blocked</span></a></li>
+ <li class="newtabmenu_active"><a href="/snort/snort_interfaces_whitelist.php"><span>Whitelists</span></a></li>
+ <li><a href="/snort/snort_interfaces_suppress.php"><span>Suppress</span></a></li>
+ <li><a href="/snort/snort_help_info.php"><span>Help</span></a></li>
+ </li>
+ </ul>
+ </div>
+
+ </td>
+ </tr>
+ <tr>
+ <td id="tdbggrey">
+ <table width="100%" border="0" cellpadding="10px" cellspacing="0">
+ <tr>
+ <td class="tabnavtbl">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <!-- START MAIN AREA -->
+
+ <!-- table point -->
+ <input name="snortSaveWhitelist" type="hidden" value="1" />
+ <input name="ifaceTab" type="hidden" value="snort_interfaces_whitelist_edit" />
+ <input name="dbTable" type="hidden" value="SnortWhitelist" />
+ <input name="date" type="hidden" value="<?=$a_list['date'];?>" />
+ <input name="uuid" type="hidden" value="<?=$a_list['uuid'];?>" />
+
+ <tr>
+ <td colspan="2" valign="top" class="listtopic">Add the name and description of the file.</td>
+
+ </tr>
+ <tr id="filename" data-options='{"filename":"<?=$listFilename; ?>"}' >
+ <td valign="top" class="vncellreq2">Name</td>
+ <td class="vtable">
+ <input class="formfld" name="filename" type="text" id="name" size="40" value="<?=$listFilename; ?>" /> <br />
+ <span class="vexpl"> The list name may only consist of the characters a-z, A-Z and 0-9. <span class="red">Note: </span> No Spaces. </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell2">Description</td>
+ <td width="78%" class="vtable">
+ <input class="formfld" name="description" type="text" id="descr" size="40" value="<?=$a_list['description']; ?>" /> <br />
+ <span class="vexpl"> You may enter a description here for your reference (not parsed). </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell2">List Type</td>
+ <td width="78%" class="vtable">
+ <div style="padding: 5px; margin-top: 16px; margin-bottom: 16px; border: 1px dashed #ff3333; background-color: #eee; color: #000; font-size: 8pt;"id="itemhelp">
+ <strong>WHITELIST:</strong>&nbsp;&nbsp;&nbsp;This list specifies addresses that Snort Package should not block.<br><br>
+ <strong>NETLIST:</strong>&nbsp;&nbsp;&nbsp;This list is for defining addresses as $HOME_NET or $EXTERNAL_NET in the snort.conf file.
+ </div>
+ <select name="snortlisttype" class="formfld" id="snortlisttype">
+ <?php
+ $updateDaysList = array('whitelist' => 'WHITELIST', 'netlist' => 'NETLIST');
+ snortDropDownList($updateDaysList, $a_list['snortlisttype']);
+ ?>
+ </select>
+ <span class="vexpl"> &nbsp;&nbsp;&nbsp;Choose the type of list you will like see in your <span class="red">Interface Edit Tab</span>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic">Add auto generated ips.</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell2">WAN IPs</td>
+ <td width="78%" class="vtable">
+ <input name="wanips" type="checkbox" id="wanips" size="40" value="on" <?=$wanips_on; ?> />
+ <span class="vexpl"> Add WAN IPs to the list. </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell2">Wan Gateways</td>
+ <td width="78%" class="vtable">
+ <input name="wangateips" type="checkbox" id="wangateips" size="40" value="on" <?=$wangateips_on; ?> />
+ <span class="vexpl"> Add WAN Gateways to the list. </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell2">Wan DNS servers</td>
+ <td width="78%" class="vtable">
+ <input name="wandnsips" type="checkbox" id="wandnsips" size="40" value="on" <?=$wandnsips_on; ?> />
+ <span class="vexpl"> Add WAN DNS servers to the list. </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell2">Virtual IP Addresses</td>
+ <td width="78%" class="vtable">
+ <input name="vips" type="checkbox" id="vips" size="40" value="on" <?=$vips_on; ?> />
+ <span class="vexpl"> Add Virtual IP Addresses to the list. </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell2">VPNs</td>
+ <td width="78%" class="vtable">
+ <input name="vpnips" type="checkbox" id="vpnips" size="40" value="on" <?=$vpnips_on; ?> />
+ <span class="vexpl"> Add VPN Addresses to the list. </span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic">Add your own custom ips.</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq2">
+ <div id="addressnetworkport">IP or CIDR items</div>
+ </td>
+ <td width="78%" class="vtable">
+ <table id="maintable" data-options='{"pagetable":"SnortWhitelistips"}' > <!-- table name in db -->
+ <tbody class="insertrow">
+ <tr>
+ <td colspan="4">
+ <div style="width:550px; padding: 5px; margin-top: 16px; margin-bottom: 16px; border: 1px dashed #ff3333; background-color: #eee; color: #000; font-size: 8pt;"id="itemhelp">
+ For <strong>WHITELIST's</strong> enter <strong>ONLY IPs not CIDRs</strong>. Example: 192.168.4.1<br><br>
+ For <strong>NETLIST's</strong> you may enter <strong>IPs and CIDRs</strong>. Example: 192.168.4.1 or 192.168.4.0/24
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="onecolumn" style="width:175px;"><span class="vexpl">IP or CIDR</span></div>
+ </td>
+ <td>
+ <div id="threecolumn"><span class="vexpl">Add a Description or leave blank and a date will be added.</span></div>
+ </td>
+ </tr>
+ </tbody>
+ <!-- Start of js loop -->
+ <tbody id="listloopblock" class="insertrow">
+ <?php echo "\r"; $i = 0; foreach ($a_list['list'] as $list): ?>
+ <tr id="rowlist_<?=$i;?>" class="icon_xrow" data-options='{"rowuuid":"<?=$list['uuid'];?>"}'>
+ <td>
+ <input class="formfld" name="list[<?=$i; ?>][ip]" type="text" id="address" size="30" value="<?=$list['ip']; ?>" />
+ </td>
+ <td>
+ <input class="formfld" name="list[<?=$i; ?>][description]" type="text" id="detail" size="50" value="<?=$list['description'] ?>" />
+ </td>
+ <td>
+ <img id="icon_x_<?=$i;?>" class="icon_click icon_x" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="delete list" >
+ </td>
+ <input name="list[<?=$i; ?>][uuid]" type="hidden" value="<?=$list['uuid'];?>" />
+ </tr>
+ <?php echo "\r"; $i++; endforeach; ?>
+ </tbody>
+ <!-- End of js loop -->
+ <tbody>
+ <tr>
+ <td>
+ </td>
+ <td>
+ </td>
+ <td>
+ <img id="iconplus_<?=$i;?>" class="icon_click icon_plus" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="add list" >
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="submit" type="submit" class="formbtn" value="Save" />
+ <input id="cancel" name="cancel" type="button" class="formbtn" value="Cancel">
+ </td>
+ </tr>
+ </form>
+
+
+ <!-- STOP MAIN AREA -->
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</div>
+
+
+<!-- footer do not touch below -->
+<?php
+include("fend.inc");
+echo $snort_custom_rnd_box;
+?>
+
+
+</body>
+</html>
diff --git a/config/snort-dev/snort_json_get.php b/config/snort-dev/snort_json_get.php
new file mode 100644
index 00000000..f991f10b
--- /dev/null
+++ b/config/snort-dev/snort_json_get.php
@@ -0,0 +1,37 @@
+<?php
+
+require_once("guiconfig.inc");
+require_once("/usr/local/pkg/snort/snort_new.inc");
+
+
+
+
+
+
+
+// upload created log tar to user
+if ($_GET['snortlogdownload'] == 1)
+{
+
+ sendFileSnortLogDownload();
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+?> \ No newline at end of file
diff --git a/config/snort-dev/snort_json_post.php b/config/snort-dev/snort_json_post.php
new file mode 100644
index 00000000..3d54e0d2
--- /dev/null
+++ b/config/snort-dev/snort_json_post.php
@@ -0,0 +1,204 @@
+<?php
+
+
+require_once("guiconfig.inc");
+require_once("/usr/local/pkg/snort/snort_new.inc");
+
+// unset crsf checks
+if(isset($_POST['__csrf_magic']))
+{
+ unset($_POST['__csrf_magic']);
+}
+
+// Cancel echo back
+if ($_POST['Cancel'] == 1) {
+
+ if ($_POST['CancelType'] == '') {
+ echo '
+ {
+ "snortpost": "fail"
+ }
+ ';
+ return false;
+ }
+
+
+ if ($_POST['CancelType'] == 'SnortSettings') {
+ snortSql_fetchSettingsAllToJson($_POST['CancelType'], '');
+ return true;
+ }
+
+ if ($_POST['CancelType'] == 'SnortWhitelist' || $_POST['CancelType'] == 'SnortWhitelistips') {
+ snortSql_fetchSettingsAllToJson($_POST['CancelType'], $_POST['CancelName']);
+ return true;
+ }
+
+
+}
+
+
+// general settings save
+if ($_POST['snortSaveSettings'] == 1)
+{
+
+ if ($_POST['dbTable'] == 'SnortSettings')
+ {
+
+ if ($_POST['ifaceTab'] == 'snort_interfaces_global')
+ {
+ // checkboxes when set to off never get included in POST thus this code
+ $_POST['emergingthreats'] = ($_POST['emergingthreats'] == '' ? off : $_POST['emergingthreats']);
+ $_POST['forcekeepsettings'] = ($_POST['forcekeepsettings'] == '' ? off : $_POST['forcekeepsettings']);
+
+ }
+
+ if ($_POST['ifaceTab'] == 'snort_alerts_blocked')
+ {
+
+ if (isset($_POST['alertnumber']))
+ $_POST['arefresh'] = ($_POST['arefresh'] == '' ? off : $_POST['arefresh']);
+
+ if (isset($_POST['blertnumber']))
+ $_POST['brefresh'] = ($_POST['brefresh'] == '' ? off : $_POST['brefresh']);
+
+ }
+
+ // unset POSTs that are markers not in db
+ unset($_POST['snortSaveSettings']);
+ unset($_POST['ifaceTab']);
+
+ // update date on every save
+ $_POST['date'] = date(U);
+
+
+ //print_r($_POST);
+ //return true;
+
+ conf_mount_rw();
+ snortSql_updateSettings($_POST, 'id', '1');
+ conf_mount_ro();
+
+ } // end of dbTable SnortSettings
+
+ echo '
+ {
+ "snortgeneralsettings": "success"
+ }
+ ';
+ return true;
+
+}
+
+// Whitelist settings save
+if ($_POST['snortSaveWhitelist'] == 1)
+{
+
+ if ($_POST['ifaceTab'] == 'snort_interfaces_whitelist_edit') {
+
+ if ($_POST['filename'] == '')
+ {
+ echo 'Error: No FileName';
+ return false;
+ }
+
+ $_POST['wanips'] = ($_POST['wanips'] == '' ? off : $_POST['wanips']);
+ $_POST['wangateips'] = ($_POST['wangateips'] == '' ? off : $_POST['wangateips']);
+ $_POST['wandnsips'] = ($_POST['wandnsips'] == '' ? off : $_POST['wandnsips']);
+ $_POST['vips'] = ($_POST['vips'] == '' ? off : $_POST['vips']);
+ $_POST['vpnips'] = ($_POST['vpnips'] == '' ? off : $_POST['vpnips']);
+
+ }
+
+ // unset POSTs that are markers not in db
+ unset($_POST['snortSaveWhitelist']);
+ unset($_POST['ifaceTab']);
+
+ $genSettings = $_POST;
+ unset($genSettings['list']);
+
+ $genSettings['date'] = date(U);
+
+ //conf_mount_rw();
+ snortSql_updateSettings($genSettings, 'uuid', $genSettings['uuid']);
+ if ($_POST['list'] != '')
+ {
+ snortSql_updateWhitelistIps($_POST['dbTable'], $_POST['list'], $genSettings['filename']);
+ }
+ //conf_mount_ro();
+
+ echo '
+ {
+ "snortgeneralsettings": "success"
+ }
+ ';
+ return true;
+
+}
+
+// Whitelist settings delete
+if ($_POST['WhitelistDelRow'] == 1)
+{
+ //conf_mount_rw();
+ snortSql_updateWhitelistDelete($_POST['WhitelistTable'], $_POST['WhitelistUuid']);
+ //conf_mount_ro();
+}
+
+// download code for alerts page
+if ($_POST['snortlogsdownload'] == 1)
+{
+ conf_mount_rw();
+ snort_downloadAllLogs();
+ conf_mount_ro();
+
+}
+
+// download code for alerts page
+if ($_POST['snortblockedlogsdownload'] == 1)
+{
+ conf_mount_rw();
+ snort_downloadBlockedIPs();
+ conf_mount_ro();
+
+}
+
+
+// code neeed to be worked on when finnished rules code
+if ($_POST['snortlogsdelete'] == 1)
+{
+
+ conf_mount_rw();
+ snortDeleteLogs();
+ conf_mount_ro();
+}
+
+// flushes snort2c table
+if ($_POST['snortflushpftable'] == 1)
+{
+
+ conf_mount_rw();
+ snortRemoveBlockedIPs();
+ conf_mount_ro();
+}
+
+// reset db reset_snortgeneralsettings
+if ($_POST['reset_snortgeneralsettings'] == 1)
+{
+
+ conf_mount_rw();
+ reset_snortgeneralsettings();
+ conf_mount_ro();
+
+}
+
+
+?>
+
+
+
+
+
+
+
+
+
+
diff --git a/config/snort-dev/snort_new.inc b/config/snort-dev/snort_new.inc
new file mode 100644
index 00000000..59186ec2
--- /dev/null
+++ b/config/snort-dev/snort_new.inc
@@ -0,0 +1,438 @@
+<?php
+
+// unset crsf checks
+if(isset($_POST['__csrf_magic']))
+{
+ unset($_POST['__csrf_magic']);
+}
+
+// fetch db Settings NONE Json
+function snortSql_fetchAllSettings($table, $type, $id_uuid)
+{
+
+ if ($table == '')
+ {
+ return false;
+ }
+
+ $db = sqlite_open('/usr/local/pkg/snort/snortDB');
+
+ if ($type == 'id')
+ {
+ $result = sqlite_query($db,
+ "SELECT * FROM {$table} where id = '{$id_uuid}';
+ ");
+ }
+
+ if ($type == 'uuid')
+ {
+ $result = sqlite_query($db,
+ "SELECT * FROM {$table} where uuid = '{$id_uuid}';
+ ");
+ }
+
+ $chktable = sqlite_fetch_array($result, SQLITE_ASSOC);
+
+ sqlite_close($db);
+
+ return $chktable;
+
+
+} // end func
+
+// fetch db list settings NONE Json
+function snortSql_fetchAllSettingsList($table, $listFilename)
+{
+
+ $db = sqlite_open('/usr/local/pkg/snort/snortDB');
+
+ $result = sqlite_query($db,
+ "SELECT * FROM {$table} WHERE filename = \"{$listFilename}\";
+ ");
+
+ $chktable = sqlite_fetch_all($result, SQLITE_ASSOC);
+
+ sqlite_close($db);
+
+ return $chktable;
+
+}
+
+// Update settings to database
+function snortSql_updateSettings($settings, $type, $id_uuid) {
+
+ $db = '/usr/local/pkg/snort/snortDB';
+ $mydb = sqlite_open("$db");
+ $table = $settings['dbTable'];
+
+ // unset POSTs that are markers not in db
+ unset($settings['dbTable']);
+
+ // START add new row if not set
+ if ($type == 'uuid')
+ {
+
+ $query_ck = sqlite_query($mydb, // @ supress warnings usonly in production
+ "SELECT * FROM {$table} WHERE uuid = '{$id_uuid}';
+ ");
+
+ $query_ckFinal = sqlite_fetch_all($query_ck, SQLITE_ASSOC);
+
+ if (empty($query_ckFinal))
+ {
+
+ $query_ck = sqlite_query($mydb, // @ supress warnings usonly in production
+ "INSERT INTO {$table} (date, uuid) VALUES ('{$settings['date']}', '{$settings['uuid']}');
+ ");
+
+ if (sqlite_changes($mydb) < 1)
+ {
+ sqlite_close($mydb);
+ return 'Error in query';
+ }
+
+ }
+
+ }
+
+ // START add values to row
+ $kv = array();
+ foreach ($settings as $key => $value)
+ {
+ $kv[] = $key;
+ $val[] = $value;
+ }
+
+ $countKv = count($kv);
+
+ $i = -1;
+ while ($i < $countKv)
+ {
+
+ $i++;
+
+ if ($kv[$i] != '' && $val[$i] != '')
+ {
+
+ if ($type == 'id')
+ {
+ $query = sqlite_query($mydb, // @ supress warnings usonly in production
+ "UPDATE {$table} SET {$kv[$i]} = '{$val[$i]}' WHERE id = '{$id_uuid}';
+ ");
+ }
+
+ if ($type == 'uuid')
+ {
+ $query = sqlite_query($mydb, // @ supress warnings usonly in production
+ "UPDATE {$table} SET {$kv[$i]} = '{$val[$i]}' WHERE uuid = '{$id_uuid}';
+ ");
+ }
+
+ if (sqlite_changes($mydb) < 1)
+ {
+ sqlite_close($mydb);
+ return 'Error in query';
+ }
+
+ }
+ } // end while
+
+ sqlite_close($mydb);
+ return true;
+
+}
+
+
+// fetch for snort_interfaces_whitelist.php NONE Json
+// use sqlite_fetch_array for single and sqlite_fetch_all for lists
+function snortSql_fetchAllWhitelistTypes($table)
+{
+
+ if ($table == '')
+ {
+ return false;
+ }
+
+ $db = sqlite_open('/usr/local/pkg/snort/snortDB');
+
+
+ $result = sqlite_query($db,
+ "SELECT description, filename, uuid, id FROM {$table} where id > 0;
+ ");
+
+ $chktable = sqlite_fetch_all($result, SQLITE_ASSOC);
+
+ if ($chktable == '')
+ {
+ return false;
+ }
+
+ foreach ($chktable as $value)
+ {
+
+ $filename2 = $value['filename'];
+
+ $result2 = sqlite_query($db,
+ "SELECT ip FROM {$table}ips WHERE filename = \"{$filename2}\" LIMIT 4;
+ ");
+
+ $chktable2 = sqlite_fetch_all($result2, SQLITE_ASSOC);
+
+ $final2 = array('id' => $value['id']);
+ $final2['date'] = $value['date'];
+ $final2['uuid'] = $value['uuid'];
+ $final2['filename'] = $value['filename'];
+ $final2['description'] = $value['description'];
+
+ $final2['list'] = $chktable2;
+
+ $final[] = $final2;
+
+ } // end foreach
+
+ sqlite_close($db);
+
+ return $final;
+
+
+} // end func
+
+
+// Save Whitelistips Settings
+function snortSql_updateWhitelistIps($table, $newPostListips, $filename)
+{
+
+ $db = '/usr/local/pkg/snort/snortDB';
+ $mydb = sqlite_open("$db");
+ $tableips = $table . 'ips';
+ $date = date(U);
+
+ // remove list array that has nul ip
+ foreach ($newPostListips as $ipsListEmpty)
+ {
+ if (!empty($ipsListEmpty['ip']))
+ {
+ $genList[] = $ipsListEmpty;
+ }
+ }
+ unset($newPostListips);
+
+ // remove everything if nothing is in the post
+ if (empty($genList))
+ {
+
+ $query = sqlite_query($mydb, // @ supress warnings use only in production
+ "DELETE FROM {$tableips} WHERE filename = '{$filename}';
+ ");
+
+ sqlite_close($mydb);
+ return true;
+
+ }
+
+ // START Remove entries from DB
+ $resultUuid = sqlite_query($mydb,
+ "SELECT uuid FROM {$tableips} WHERE filename = '{$filename}';
+ ");
+
+ $resultUuidFinal = sqlite_fetch_all($resultUuid, SQLITE_ASSOC);
+
+ if (!empty($genList) && !empty($resultUuidFinal))
+ {
+
+ foreach ($resultUuidFinal as $list3)
+ {
+ $uuidListDB[] = $list3['uuid'];
+ }
+
+ foreach ($genList as $list2)
+ {
+ $uuidListPOST[] = $list2['uuid'];
+ }
+
+ // create diff array
+ $uuidDiff = array_diff($uuidListDB, $uuidListPOST);
+
+ // delet diff list objs
+ if ($uuidDiff != '')
+ {
+ foreach ($uuidDiff as $list4)
+ {
+
+ // remove everything
+ $query = sqlite_query($mydb, // @ supress warnings use only in production
+ "DELETE FROM {$tableips} WHERE uuid = '{$list4}';
+ ");
+
+ } // end foreach
+ }
+ }
+
+ // START add entries/updates to DB
+ foreach ($genList as $list)
+ {
+
+ if ($list['uuid'] == 'EmptyUUID')
+ {
+
+ $uuid = genAlphaNumMixFast(28, 28);
+ $list['uuid'] = $uuid;
+
+ $query = sqlite_query($mydb, // @ supress warnings use only in production
+ "INSERT INTO {$tableips} (date, uuid, filename) VALUES ('{$date}', '{$uuid}', '{$filename}');
+ ");
+
+ if (sqlite_changes($mydb) < 1)
+ {
+ sqlite_close($mydb);
+ return 'Error in query';
+ }
+
+ foreach ($list as $key => $value)
+ {
+
+ if ($key != '')
+ {
+
+ $query = sqlite_query($mydb, // @ supress warnings usonly in production
+ "UPDATE {$tableips} SET {$key} ='{$value}' WHERE uuid = '{$uuid}';
+ ");
+
+ if (sqlite_changes($mydb) < 1)
+ {
+ sqlite_close($mydb);
+ return 'Error in query';
+ }
+
+ }
+
+ } // end foreach
+
+ }else{
+
+ $uuid = $list['uuid'];
+
+ foreach ($list as $key => $value)
+ {
+
+ $query = sqlite_query($mydb, // @ supress warnings usonly in production
+ "UPDATE {$tableips} SET {$key} ='{$value}', date = '{$date}' WHERE uuid = '{$uuid}';
+ ");
+
+ if (sqlite_changes($mydb) < 1)
+ {
+ sqlite_close($mydb);
+ return 'Error in query';
+ }
+
+ } // end foreach
+
+ } // end main if
+
+ } // end Main foreach
+
+ sqlite_close($mydb);
+ return true;
+
+} // end of func
+
+// Whitelist Delete
+function snortSql_updateWhitelistDelete($table, $uuid)
+{
+
+ $db = '/usr/local/pkg/snort/snortDB';
+ $mydb = sqlite_open("$db");
+
+ $query = sqlite_query($mydb, // @ supress warnings usonly in production
+ "SELECT filename FROM {$table} WHERE uuid = '{$uuid}';
+ ");
+
+ $query_ck_filename = sqlite_fetch_array($query, SQLITE_ASSOC);
+
+ if (!empty($query_ck_filename['filename']))
+ {
+
+ $query2 = sqlite_query($mydb, // @ supress warnings usonly in production
+ "DELETE FROM {$table} WHERE uuid = '{$uuid}';
+ ");
+
+ if (sqlite_changes($mydb) < 1)
+ {
+ sqlite_close($mydb);
+ return 'Error in query';
+ }
+
+ $query3 = sqlite_query($mydb, // @ supress warnings usonly in production
+ "SELECT ip FROM {$table}ips WHERE filename = '{$query_ck_filename['filename']}';
+ ");
+
+ $query_rm_ips_ck = sqlite_fetch_array($query3, SQLITE_ASSOC);
+
+ if (!empty($query_rm_ips_ck))
+ {
+
+ $query = sqlite_query($mydb, // @ supress warnings usonly in production
+ "DELETE FROM {$table}ips WHERE filename = '{$query_ck_filename['filename']}';
+ ");
+
+ if (sqlite_changes($mydb) < 1)
+ {
+ sqlite_close($mydb);
+ return 'Error in query';
+ }
+
+ }
+
+ }
+
+ sqlite_close($mydb);
+ return true;
+
+} // END main func
+
+// create dropdown list
+function snortDropDownList($list, $setting) {
+ foreach ($list as $iday => $iday2) {
+
+ echo "\n" . "<option value=\"{$iday}\""; if($iday == $setting) echo " selected "; echo '>' . htmlspecialchars($iday2) . '</option>' . "\r";
+
+ }
+}
+
+
+/* gen Alpha Num Mix for uuids or anything random, NEVER USE rand() */
+/* mt_rand/mt_srand is insecure way to gen random nums and strings, when posible use /dev/random or /dev/urandom */
+function genAlphaNumMixFast($min = 14, $max = 28)
+{
+
+ // gen random lenth
+ mt_srand(crc32(microtime()));
+ $num = mt_rand($min, $max);
+ // reseed
+ mt_srand();
+
+ // Gen random string
+ $num = $num > 36 ? 30 : $num;
+
+ $pool = array_merge(range('A', 'Z'), range(0, 9), range('a', 'z'));
+
+ $rand_keys = array_rand($pool, $num);
+
+ $randAlpaNum = '';
+
+ if (is_array($rand_keys))
+ {
+ foreach ($rand_keys as $key)
+ {
+ $randAlpaNum .= $pool[$key];
+ }
+ }else{
+ $randAlpaNum .= $pool[$rand_keys];
+ }
+
+ return str_shuffle($randAlpaNum);
+
+}
+
+
+?> \ No newline at end of file
diff --git a/config/snort-dev/testing.php b/config/snort-dev/testing.php
new file mode 100644
index 00000000..87d98e26
--- /dev/null
+++ b/config/snort-dev/testing.php
@@ -0,0 +1,27 @@
+<?php
+
+require_once('/usr/local/pkg/snort/snort_new.inc');
+
+$uuid = '2565656';
+
+$a_list = snortSql_fetchAllWhitelistTypes('SnortWhitelist');
+
+
+
+ echo '<pre>' . "\n\n";
+
+
+ print_r($a_list);
+
+
+
+ echo "\n" . '</pre>';
+
+
+
+
+?>
+
+
+
+