[damned-lies] Added missing directory from staticfiles migration



commit 9b21995464d43280660f0f3f8e88a35b536ab978
Author: Claude Paroz <claude 2xlibre net>
Date:   Mon Oct 1 11:14:17 2012 +0200

    Added missing directory from staticfiles migration

 .gitignore                                 |    2 +-
 common/static/css/difflib.css              |   18 +
 common/static/css/fonts.css                |    9 +
 common/static/css/login.css                |    8 +
 common/static/css/overlays.css             |   57 +
 common/static/css/reset.css                |    1 +
 common/static/css/rtl.css                  |   85 ++
 common/static/css/template.css             |  957 ++++++++++++++++
 common/static/css/text.css                 |  108 ++
 common/static/img/asc.gif                  |  Bin 0 -> 54 bytes
 common/static/img/bg.gif                   |  Bin 0 -> 64 bytes
 common/static/img/bug.png                  |  Bin 0 -> 844 bytes
 common/static/img/close.png                |  Bin 0 -> 1996 bytes
 common/static/img/closed.png               |  Bin 0 -> 276 bytes
 common/static/img/desc.gif                 |  Bin 0 -> 54 bytes
 common/static/img/download-icon.png        |  Bin 0 -> 426 bytes
 common/static/img/download.png             |  Bin 0 -> 426 bytes
 common/static/img/edit.png                 |  Bin 0 -> 1215 bytes
 common/static/img/edit_small.png           |  Bin 0 -> 855 bytes
 common/static/img/emptyimg.png             |  Bin 0 -> 6978 bytes
 common/static/img/favicon.png              |  Bin 0 -> 895 bytes
 common/static/img/feed-icon-10x10.png      |  Bin 0 -> 469 bytes
 common/static/img/figure.png               |  Bin 0 -> 540 bytes
 common/static/img/foot-16.png              |  Bin 0 -> 650 bytes
 common/static/img/foot.png                 |  Bin 0 -> 4414 bytes
 common/static/img/footer_arts/l10n.png     |  Bin 0 -> 6668 bytes
 common/static/img/grass.png                |  Bin 0 -> 10178 bytes
 common/static/img/help.png                 |  Bin 0 -> 435 bytes
 common/static/img/hr-shadow.png            |  Bin 0 -> 1189 bytes
 common/static/img/html-bg.png              |  Bin 0 -> 312 bytes
 common/static/img/mallard.png              |  Bin 0 -> 652 bytes
 common/static/img/nobody-16.png            |  Bin 0 -> 301 bytes
 common/static/img/nobody.png               |  Bin 0 -> 1230 bytes
 common/static/img/open.png                 |  Bin 0 -> 270 bytes
 common/static/img/repository-icon.png      |  Bin 0 -> 404 bytes
 common/static/img/search.png               |  Bin 0 -> 482 bytes
 common/static/img/top_bar-bg.png           |  Bin 0 -> 185 bytes
 common/static/img/top_bar-item-bg.png      |  Bin 0 -> 190 bytes
 common/static/img/warn.png                 |  Bin 0 -> 383 bytes
 common/static/img/workflow-translation.png |  Bin 0 -> 167230 bytes
 common/static/js/README                    |    5 +
 common/static/js/jquery.growfield2.js      |    9 +
 common/static/js/jquery.min.js             |   18 +
 common/static/js/jquery.tablesorter.min.js |    4 +
 common/static/js/jquery.tools.js           | 1672 ++++++++++++++++++++++++++++
 common/static/js/jquery.tools.min.js       |   11 +
 common/static/js/main.js                   |   30 +
 common/static/js/overlayhelpers.js         |  595 ++++++++++
 common/static/robots.txt                   |    2 +
 49 files changed, 3590 insertions(+), 1 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 54384c7..37d7a4b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
 *.pyc
 locale
 local_settings.py
-static
+/static
diff --git a/common/static/css/difflib.css b/common/static/css/difflib.css
new file mode 100644
index 0000000..2b11886
--- /dev/null
+++ b/common/static/css/difflib.css
@@ -0,0 +1,18 @@
+table.diff {
+	font-family: Cantarell;
+	border: 1px solid #ccc;
+}
+
+/*.diff_header {background-color:#e0e0e0}*/ /* We use the class .djform - temaplate.css */
+
+td.diff_header {
+	text-align: center;
+	padding: 5px 5px 0 5px;
+}
+.diff_next {
+	background-color:#d3d7cf;
+	border: 1px solid #ccc;
+}
+.diff_add {background-color:#aaffaa}
+.diff_chg {background-color:#ffff77}
+.diff_sub {background-color:#ffaaaa}
diff --git a/common/static/css/fonts.css b/common/static/css/fonts.css
new file mode 100644
index 0000000..8670b58
--- /dev/null
+++ b/common/static/css/fonts.css
@@ -0,0 +1,9 @@
+ font-face {
+    font-family: "Cantarell";
+    src: local("Cantarell"), local("Cantarell Regular"), url("../fonts/Cantarell-Regular.otf");
+}
+ font-face {
+    font-family: "Cantarell";
+    font-weight: bold;
+    src: local("Cantarell"), local("Cantarell Bold"), local("Cantarell-Bold"), url("../fonts/Cantarell-Bold.otf");
+}
diff --git a/common/static/css/login.css b/common/static/css/login.css
new file mode 100644
index 0000000..50b80a5
--- /dev/null
+++ b/common/static/css/login.css
@@ -0,0 +1,8 @@
+/* LOGIN FORM */
+
+.login #container { background:white; border:1px solid #ccc; width:28em; min-width:300px; margin-left:auto; margin-right:auto; margin-top:100px; }
+.login #content-main { width:100%; }
+.login form { margin-top:1em; }
+.login .form-row { padding:4px 0; float:left; width:100%; }
+.login .form-row label { float:left; width:11em; padding-right:0.5em; line-height:1.1em; text-align:right; font-size:1em; color:#333; }
+.login .form-row #id_username, .login .form-row #id_password { width:14em; }
diff --git a/common/static/css/overlays.css b/common/static/css/overlays.css
new file mode 100644
index 0000000..8f9b43e
--- /dev/null
+++ b/common/static/css/overlays.css
@@ -0,0 +1,57 @@
+div.overlay {
+    width: auto;
+    height: auto;
+    /* initially overlay is hidden */
+    display: none;
+    /* some padding to layout nested elements nicely  */
+    margin: 1em;
+    color: black;
+    font-weight: normal;
+}
+
+div.overlay-ajax {
+    width: 60%;
+    min-height: 100px;
+    z-index: 99; /* overlays should be above everything */
+}
+
+
+/* default close button positioned on upper-left corner */
+div.overlaybg div.close,
+div.overlay div.close {
+    background-image: url(/media/img/close.png);
+    position: absolute;
+    left: -16px;
+    top: -16px;
+    cursor: pointer;
+    height: 36px;
+    width: 36px;
+}
+
+.pb-ajax {
+    overflow-y: auto;
+}
+
+.pb-ajax, .pb-image {
+    background-color: #fff;
+    border: 1px solid #999;
+    white-space: normal;
+    box-shadow: 0 0 3em 0.5em #666;
+    -moz-box-shadow: 0 0 3em 0.5em #666;
+    -webkit-box-shadow: 0 0 3em #666;
+    padding-left: 30px;
+}
+
+.pb-ajax > div {
+    width: 92%;
+    padding: 0em;
+}
+
+div.overlay div.close span {
+    display: block;
+    height: 1px;
+    margin: -1px 0 0 -1px;
+    overflow: hidden;
+    padding: 0;
+    width: 1px;
+}
diff --git a/common/static/css/reset.css b/common/static/css/reset.css
new file mode 100644
index 0000000..11a1387
--- /dev/null
+++ b/common/static/css/reset.css
@@ -0,0 +1 @@
+html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}ins{text-decoration:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0}
diff --git a/common/static/css/rtl.css b/common/static/css/rtl.css
new file mode 100644
index 0000000..dc62c46
--- /dev/null
+++ b/common/static/css/rtl.css
@@ -0,0 +1,85 @@
+body {
+    direction: rtl;
+}
+
+.float_right {
+  float:left;
+}
+
+.stats th {
+    text-align: right;
+    padding-right: 2px;
+    padding-left: 2px;
+}
+
+.stats td {
+    padding-right: 2px;
+    padding-left: 2px;
+}
+
+.stats td.left {
+    text-align: right;
+}
+
+.stats td.leftcell {
+  text-align: right;
+}
+
+div.translated {
+  right: 0%;
+}
+
+div.maintainer {
+  padding-right: 85px;
+  background-position: top right;
+}
+
+div.mainpage {
+  width:100%;
+  text-align: right;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+div.docimages {
+  display: inline;
+  margin-right:110px;
+}
+
+div#authenticated {
+  text-align: left;
+  margin-left: 4px;
+}
+
+div#language_menu {
+  float: left;
+  text-align: left;
+}
+
+.right_actions {
+  float: left;
+  text-align: left;
+}
+
+p#show, p#hide {
+  text-align: left;
+  font-style: italic;
+}
+
+img.people {
+  float: right;
+  margin-right: -85px;
+}
+
+.person_detail {
+  clear: right;
+}
+
+.person_detail .image {
+  margin-left: 1em;
+  float: right;
+}
+
+.person_detail .txt {
+  margin-right: 95px;
+}
diff --git a/common/static/css/template.css b/common/static/css/template.css
new file mode 100644
index 0000000..274e456
--- /dev/null
+++ b/common/static/css/template.css
@@ -0,0 +1,957 @@
+ import url("reset.css");
+ import url("text.css");
+
+
+/* Base information */
+/* ========================================================================== */
+
+html {
+    background: #fff url(../img/html-bg.png) 0 10px repeat-x;
+}
+body {
+
+}
+a {
+    color: #204a87;
+}
+a:hover {
+    color: #3465a4;
+}
+a:visited {
+   color: #5d396e;
+}
+.left {
+    float: left;
+}
+.right {
+    float: right;
+}
+.hidden {
+    display: none;
+}
+.maxwidth {
+    width: 960px;
+    margin: 0 auto;
+	text-align: left;
+}
+.clear {
+    clear: both;
+}
+
+
+/* Global Domain Bar */
+/* ========================================================================== */
+
+
+
+#global_domain_bar {
+    background: #fff;
+    height: 10px;
+}
+#global_domain_bar .maxwidth {
+    position: relative;
+}
+
+/* Tab */
+
+#global_domain_bar .tab {
+    background: #fff;
+    position: absolute;
+    right: 0;
+    float: right;
+    padding: 6px 8px;
+    font-size: 12px;
+    line-height: 16px;
+    -moz-border-radius: 5px;
+    -webkit-border-radius: 5px;
+    border-radius: 5px;
+    -moz-box-shadow: 0 4px 2px -2px #8fb3d9;
+    -webkit-box-shadow: 0 4px 2px -2px #8fb3d9;
+    box-shadow: 0 4px 2px -2px #8fb3d9;
+    white-space: nowrap;
+}
+#global_domain_bar .tab a.root {
+    color: #555753 !important;
+    font-weight: bold;
+    text-decoration: none;
+    background: #fff url(../img/favicon.png) 0 0 no-repeat;
+    padding-left: 18px;
+    border-right: 1px solid #ccc;
+    padding-right: 6px;
+    margin-right: 3px;
+}
+#global_domain_bar .tab a.root:last-child {
+    border-right: 0;
+    padding-right: 0;
+    margin-right: 0;
+}
+#global_domain_bar .tab a.root:hover {
+    text-decoration: underline;
+}
+#global_domain_bar .tab a.user {
+    padding: 2px 14px 2px 4px;
+    margin: -2px -4px -2px -2px;
+    color: inherit !important;
+    text-decoration: none;
+    -moz-border-radius: 4px;
+    -webkit-border-radius: 4px;
+    border-radius: 4px;
+    background: url(images/globaldomain-user-arrow.png) right center no-repeat;
+    outline: none;
+}
+#global_domain_bar .tab a.user:hover,
+#global_domain_bar .tab a.user:focus {
+    background-color: #ececec;
+}
+#global_domain_bar .tab a.user.active {
+    background-color: #ececec;
+    -moz-box-shadow: inset 0 1px 3px rgba(0,0,0,0.2);
+    -webkit-box-shadow: inset 0 1px 3px rgba(0,0,0,0.2);
+    box-shadow: inset 0 1px 3px rgba(0,0,0,0.2);
+}
+
+#global_domain_bar .tab a:visited {
+    color: #204A87;
+}
+
+
+
+
+/* GNOME Header */
+/* ========================================================================== */
+
+
+
+#gnome_header {
+    margin: 0;
+    padding: 6px auto;
+}
+
+#gnome_header h1 {
+    margin: 0;
+    padding: 20px 0;
+    font-size: 34px;
+    line-height: 54px;
+    color: #2e3436;
+    font-family: "Copse";
+    font-weight: bold;
+    text-shadow: 0 1px 0 #fff;
+    float: left;
+}
+#gnome_header h1 a {
+    color: inherit;
+    text-decoration: none;
+}
+#gnome_header h1 a img {
+    vertical-align: bottom;
+}
+
+#gnome_header .right {
+    margin-top: 38px;
+}
+#gnome_header #search_input {
+    border: 1px solid #999;
+    padding: 4px 28px 4px 9px;
+    background: #fff url(images/search-icon.png) 172px 5px no-repeat;
+    width: 160px;
+    -moz-border-radius: 25px;
+    -webkit-border-radius: 25px;
+    border-radius: 25px;
+    -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.2);
+    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.2);
+    box-shadow: inset 0 1px 1px rgba(0,0,0,0.2);
+}
+#gnome_header #search_input:focus {
+    -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.2), 0 0 3px #0489B7;
+    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.2), 0 0 3px #0489B7;
+    box-shadow: inset 0 1px 1px rgba(0,0,0,0.2), 0 0 3px #0489B7;
+    outline: none;
+}
+
+
+/* Global Navigation */
+/* ========================================================================== */
+
+#globalnav {
+    background: #2e3436 url("../img/top_bar-bg.png") top repeat-x;
+    list-style: none;
+    float: left;
+    padding: 8px 0;
+    margin: 50px 0 0 45px;
+    font-size: 13px;
+    -moz-border-radius: 6px;
+    -webkit-border-radius: 6px;
+    border-radius: 6px;
+    -moz-box-shadow: 0 2px 4px rgba(0,0,0,0.2);
+    -webkit-box-shadow: 0 2px 4px rgba(0,0,0,0.2);
+    box-shadow: 0 2px 4px rgba(0,0,0,0.2);
+}
+#globalnav li {
+    float: left;
+    display: inline;
+    margin: 0 5px 0 5px;
+}
+#globalnav li a {
+    color: #fff;
+    text-decoration: none;
+    padding: 4px 8px;
+    -moz-border-radius: 4px;
+    -webkit-border-radius: 4px;
+    border-radius: 4px;
+    outline: none;
+    -webkit-transition: background 100ms linear;
+    -moz-transition: background 100ms linear;
+    transition: background 100ms linear;
+    text-shadow: 0 1px 0 #000;
+}
+#globalnav li a:hover {
+    background: #64696d;
+    background: rgba(100%, 100%, 100%, 0.2);
+}
+#globalnav li a:focus {
+    background: rgba(100%, 100%, 100%, 0.15);
+}
+#globalnav li a:active {
+    background: #1c2021 url("../img/top_bar-item-bg.png") top repeat-x;
+    -moz-box-shadow: inset 0 -1px 0 rgba(100%,100%,100%, 0.4), inset 0 1px 3px rgba(0,0,0,0.4);
+    -webkit-box-shadow: inset 0 -1px 0 rgba(100%,100%,100%, 0.4), inset 0 1px 3px rgba(0,0,0,0.4);
+    box-shadow: inset 0 -1px 0 rgba(100%,100%,100%, 0.4), inset 0 1px 3px rgba(0,0,0,0.4);
+}
+#globalnav li.active a {
+    color: #fff;
+    text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5);
+    background: #1c2021 url("../img/top_bar-item-bg.png") top repeat-x;
+    -moz-box-shadow: inset 0 -1px 0 rgba(100%,100%,100%, 0.4), inset 0 1px 3px rgba(0,0,0,0.4);
+    -webkit-box-shadow: inset 0 -1px 0 rgba(100%,100%,100%, 0.4), inset 0 1px 3px rgba(0,0,0,0.4);
+    box-shadow: inset 0 -1px 0 rgba(100%,100%,100%, 0.4), inset 0 1px 3px rgba(0,0,0,0.4);
+    -moz-border-radius: 5px;
+    -webkit-border-radius: 5px;
+    border-radius: 5px;
+}
+
+
+
+/* Page Title */
+/* ========================================================================== */
+
+
+#content h1 {
+    margin: 10px 0 20px;
+    border-bottom: 1px solid #d3d7cf;
+    font-size: 37px;
+    text-shadow: 0 1px 0 #fff;
+    line-height: normal;
+    letter-spacing: -0.04em;
+}
+#content h1 a {
+    text-decoration: none;
+    color: inherit;
+}
+#content h1 a:hover {
+    text-decoration: underline;
+}
+
+
+
+/* GNOME Container */
+/* ========================================================================== */
+
+
+#gnome_container {
+    min-height: 400px;
+}
+
+
+/* Grid Columns */
+/* ========================================================================== */
+
+.columns {
+    overflow: hidden;
+}
+.columns .bloc {
+    width: 135px;
+    margin-left: 30px;
+    float: left;
+}
+.columns .bloc.one {
+    width: 130px;
+}
+.columns .bloc.sidebar,
+.columns .bloc.two {
+    width: 300px;
+}
+.columns .bloc.half,
+.columns .bloc.three {
+    width: 465px;
+}
+.columns .bloc.content,
+.columns .bloc.four {
+    width: 630px;
+}
+.columns .bloc.five {
+    width: 795px;
+}
+.columns .bloc.full,
+.columns .bloc.six {
+    width: 960px;
+}
+.columns .bloc.first {
+    margin-left: 0;
+    clear: left;
+}
+.columns .bloc.offset_one {
+    margin-left: 165px !important;
+}
+.columns .bloc.offset_sidebar,
+.columns .bloc.offset_two {
+    margin-left: 330px !important;
+}
+.columns .bloc.offset_half,
+.columns .bloc.offset_three {
+    margin-left: 495px !important;
+}
+.columns .bloc.offset_four {
+    margin-left: 660px !important;
+}
+.columns .bloc.offset_five {
+    margin-left: 825px !important;
+}
+
+
+/* Separators */
+/* ========================================================================== */
+
+hr {
+    border: 0 #ccc solid;
+    border-top-width: 1px;
+    clear: both;
+    height: 0;
+    margin: 20px 0;
+}
+
+hr.top_shadow,
+hr.bottom_shadow {
+    height: 25px;
+    background: url(../img/hr-shadow.png) no-repeat bottom;
+    background-size: contain;
+    border: 0;
+    margin: 40px 0;
+}
+hr.bottom_shadow {
+    -moz-transform: rotate(180deg);
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+}
+
+
+/* Specific stylesheet for Damned-lies */
+/* ========================================================================== */
+
+/* Columns */
+
+.bloc50 {
+    display: block;
+    float: left;
+    width: 50%;
+    padding: 0 15px;
+    -moz-box-sizing: border-box;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+}
+.bloc50.reset {
+    clear: left;
+}
+
+/* Statistics table */
+
+table.stats {
+    width: 100%;
+    margin: 10px 0;
+    background: #fff;
+    border: 1px solid #ccc;
+    border-collapse: collapse;
+    -moz-border-radius: 4px;
+    -webkit-border-radius: 4px;
+    border-radius: 4px;
+}
+table.stats thead th {
+    text-align: left;
+    padding-top: 5px;
+    padding-bottom: 5px;
+    background: -moz-linear-gradient(top, #f9f9f9, #ececec);
+	background: -webkit-linear-gradient(top, #f9f9f9, #ececec);
+	background: linear-gradient(top, #f9f9f9, #ececec);
+    white-space: nowrap;
+}
+table.stats th,
+table.stats td {
+    border: 1px solid #ccc;
+    border-left: 0;
+    border-right: 0;
+    padding: 5px 8px;
+}
+table.stats tbody tr:hover {
+    background: #ececec;
+}
+table.stats th img,
+table.stats td img {
+    vertical-align: middle;
+}
+table.stats tfoot {
+    background: #f4f4f4;
+    background: -moz-linear-gradient(top, #f4f4f4, #fff);
+    background: -webkit-linear-gradient(top, #f4f4f4, #fff);
+    background: linear-gradient(top, #f4f4f4, #fff);
+}
+td.supported {
+	color: #ffffff;
+	background-color: green;
+}
+td.partially {
+	background-color: orange;
+}
+td.not_supported {
+}
+
+/* Compact text stats */
+
+pre.stats {
+    color: #333;
+    display: inline;
+    white-space: normal;
+    font-size: 11px;
+}
+pre.stats .num1 {
+    color: #4e9a06;
+}
+pre.stats .num2 {
+    color: #ce5c00;
+}
+pre.stats .num3 {
+    color: #a40000;
+}
+pre.stats .zero {
+    opacity: 0.7;
+}
+#stats_po {
+	padding: 5px 0 10px 5px;
+	font-size: 15px;
+	font-weight: bold;
+    color: #ce5c00;
+}
+
+/* Used in vertimus_detail */
+div#vertimus_stats {
+  line-height: 1.3em;
+}
+div#vertimus_stats pre.stats {
+  white-space: normal;
+  font-family: sans-serif;
+	font-size: 13px;
+}
+
+/* Graphic stats */
+
+.graph {
+    width: 100px;
+    height: 9px;
+    background: #ccc;
+    overflow: hidden;
+    position: relative;
+
+    -moz-border-radius: 10px;
+    -webkit-border-radius: 10px;
+    border-radius: 10px;
+
+    -moz-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3);
+    -webkit-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3);
+    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3);
+}
+div.graphinline {
+    width: 100px;
+	display: inline-block;
+}
+.graph div {
+    display: block;
+    float: left;
+    height: 9px;
+}
+.graph .translated {
+    background: #73d216;
+    background: -moz-linear-gradient(top, #73d216, #66bb14);
+	background: -webkit-linear-gradient(top, #73d216, #66bb14);
+	background: -linear-gradient(top, #73d216, #66bb14);
+}
+.graph .fuzzy {
+    background: #5688c9;
+    background: -moz-linear-gradient(top, #ff840d, #e37000);
+	background: -webkit-linear-gradient(top, #ff840d, #e37000);
+	background: linear-gradient(top, #ff840d, #e37000);
+}
+.graph .untranslated {
+    background: #ff1b1b;
+    background: -moz-linear-gradient(top, #ff1b1b, #cc0000);
+	background: -webkit-linear-gradient(top, #ff1b1b, #cc0000);
+	background: linear-gradient(top, #ff1b1b, #cc0000);
+}
+
+/* Download button */
+
+.download_button {
+	padding: 3px 0 0 22px;
+	display: inline-block;
+	text-decoration: underline;
+	line-height: 20px;
+	background: transparent url(../img/download.png) no-repeat left;
+}
+
+/* Multi column lists */
+
+.multi_column_list {
+    -moz-column-count: 3;
+    -webkit-column-count: 3;
+    column-count: 3;
+}
+.multi_column_list li {
+    border: 1px solid #ccc;
+    background: #fff;
+    padding: 4px 8px;
+    list-style: none;
+    margin: 8px 0;
+
+    -moz-border-radius: 3px;
+    -webkit-border-radius: 3px;
+    border-radius: 3px;
+}
+
+.col3_column {
+  float: left;
+  width: 33.3%
+}
+.col3_container ul {
+	margin-top: 0;
+    list-style: none;
+}
+.col3_column li{
+    border: 1px solid #ccc;
+    background: #fff;
+    padding: 4px 8px;
+    list-style: none;
+    margin: 8px 5px;
+
+    -moz-box-shadow: inset 0 -1px 1px rgba(0, 0, 0, 0.1);
+    -webkit-box-shadow: inset 0 -1px 1px rgba(0, 0, 0, 0.1);
+    box-shadow: inset 0 -1px 1px rgba(0, 0, 0, 0.1);
+    -moz-border-radius: 3px;
+    -webkit-border-radius: 3px;
+    border-radius: 3px;
+}
+.col3_column li a{
+	text-decoration: none;
+}
+.col3_column li a:hover{
+	text-decoration: underline;
+}
+
+/* Person details */
+
+/* Used in people/person_list */
+.person_list {
+  padding-left: 65px;
+  margin-bottom: 12px;
+  clear: left;
+}
+
+.person_list .name {
+  font-size: 110%;
+}
+
+.person_list img {
+  height: 48px;
+  float: left;
+  margin-left: -65px;
+}
+
+.person_detail {
+    display: table-row;
+}
+.person_detail .image,
+.person_detail .txt {
+    display: table-cell;
+    vertical-align: top;
+}
+.person_detail .image {
+    padding-right: 15px;
+}
+.person_detail .txt .name {
+    font-weight: bold;
+}
+.person_detail .txt .email {
+    color: #999;
+    text-decoration: none;
+}
+.person_detail .txt .email:hover {
+    text-decoration: underline;
+}
+
+/* Icon button */
+
+.icon_button {
+    background: #eeeeec;
+    border: 1px solid #babdb6;
+    padding: 4px 12px;
+    display: inline-block;
+    line-height: 16px;
+
+    font-size: 13px;
+    font-weight: normal;
+
+    -moz-border-radius: 4px;
+    -webkit-border-radius: 4px;
+    border-radius: 4px;
+
+    -moz-box-shadow: inset 0 -1px 2px rgba(0, 0, 0, 0.1);
+    -webkit-box-shadow: inset 0 -1px 2px rgba(0, 0, 0, 0.1);
+    box-shadow: inset 0 -1px 2px rgba(0, 0, 0, 0.1);
+}
+.icon_button:hover,
+.icon_button:focus {
+    outline: 0;
+    background: #f4f4f4;
+}
+.icon_button:active {
+    -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2);
+    -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2);
+    box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2);
+}
+
+/* Stats show */
+
+.stats_show .path {
+    margin-top: -0.2em;
+    color: #999;
+    font-size: 18px;
+}
+.stats_show .pot_information {
+    font-size: 13px;
+    margin: 0;
+}
+.stats_show .notices {
+    background: #ececec;
+    padding: 15px;
+    margin-top: 10px;
+    margin-bottom: -10px;
+    overflow: auto;
+
+    -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
+    -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
+    box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
+}
+.stats_show .notices h4 {
+    margin-top: 0;
+}
+.stats_show .notices pre {
+    margin: 0;
+    font-size: 12px;
+}
+table.stats thead tr .header {
+	background: #eeeeee url(../img/bg.gif) no-repeat center right;
+    background:  url(../img/bg.gif) no-repeat center right, -moz-linear-gradient(top, #f9f9f9, #ececec);
+    background:  url(../img/bg.gif) no-repeat center right, -webkit-linear-gradient(top, #f9f9f9, #ececec);
+    background: url(../img/bg.gif) no-repeat center right, linear-gradient(top, #f9f9f9, #ececec);
+	cursor: pointer;
+	padding-right: 1.2em;
+}
+table.stats thead tr .headerSortUp {
+	background: #eeeeee url(../img/asc.gif) no-repeat center right;
+    background:  url(../img/asc.gif) no-repeat center right, -moz-linear-gradient(top, #f9f9f9, #ececec);
+    background:  url(../img/asc.gif) no-repeat center right, -webkit-linear-gradient(top, #f9f9f9, #ececec);
+    background: url(../img/asc.gif) no-repeat center right, linear-gradient(top, #f9f9f9, #ececec);
+}
+table.stats thead tr .headerSortDown {
+	background: #eeeeee url(../img/desc.gif) no-repeat center right;
+    background:  url(../img/desc.gif) no-repeat center right, -moz-linear-gradient(top, #f9f9f9, #ececec);
+    background:  url(../img/desc.gif) no-repeat center right, -webkit-linear-gradient(top, #f9f9f9, #ececec);
+    background: url(../img/desc.gif) no-repeat center right, linear-gradient(top, #f9f9f9, #ececec);
+}
+table.stats th.headerNoSort {
+	background-color: #eeeeee;
+}
+
+/* Vertimus detail */
+/* ========================================================================== */
+
+/* Vertimus action box */
+
+.vertimus_action {
+	background: #eeeeee;
+    background: -moz-linear-gradient(top, #f9f9f9, #ececec);
+    background: -webkit-linear-gradient(top, #f9f9f9, #ececec);
+    background: linear-gradient(top, #f9f9f9, #ececec);
+	margin: 1em 0 1.5em;
+	border: solid #ddd 1px;
+}
+.vertimus_action_head {
+	border-bottom: solid #ddd 1px;
+	padding: 0.5em 12px 0;
+}
+.vertimus_action_content {
+	padding: 1em 12px 0;
+}
+.vertimus_action_comment {
+	font-family: monospace;
+}
+
+div.release_link {
+	float: right;
+	font-size: small;
+	margin: 54px 5px 0 0;
+}
+div.uploaded_file {
+	float: right;
+	padding: 1px;
+	margin: -10px 0 0 5px;
+}
+div.face_image {
+	float: left;
+	margin: 0 10px 0 0;
+}
+
+.right_actions {
+	float: right;
+	font-weight: bold;
+    text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);
+	border: 1px solid #eee;
+	padding: 5px 25px 0 0;
+	background: #7fa7d4;
+    background: #fff url(../img/html-bg.png) 0 repeat-x;
+	-moz-border-radius: 5px;
+    -webkit-border-radius: 5px;
+    border-radius: 5px;
+
+    -moz-box-shadow: inset 0 1px 3px -1px #396da9, 0 1px 0 #fff;
+    -webkit-box-shadow: inset 0 1px 3px -1px #396da9, 0 1px 0 #fff;
+    box-shadow: inset 0 1px 3px -1px #396da9;
+}
+.right_actions ul {
+	list-style: none;
+}
+.right_actions a {
+	text-decoration: none;
+}
+.right_actions a:hover {
+	text-decoration: underline;
+}
+
+div.docimages {
+	display: inline;
+	margin-left: 8px;
+}
+/* Vertimus action form*/
+.diff_header,
+.djform {
+	margin-top: 10px;
+	padding: 20px;
+	border: 1px solid #ccc;
+
+	background: #eeeeee;
+    background: -moz-linear-gradient(top, #f9f9f9, #ececec);
+    background: -webkit-linear-gradient(top, #f9f9f9, #ececec);
+    background: linear-gradient(top, #f9f9f9, #ececec);
+
+	-moz-border-radius: 5px;
+	-webkit-border-radius: 5px;
+	border-radius: 5px;
+}
+.djform textarea {
+	width: 100%;
+	min-height: 130px;
+	font: inherit;
+	padding: 10px;
+	resize: vertical;
+
+	-moz-box-sizing: border-box;
+	-webkit-box-sizing: border-box;
+	box-sizing: border-box;
+}
+.djform td  {
+	padding: 3px 4px 0 0;
+	font-size: 12px;
+	color: #555753;
+}
+.djform th {
+	vertical-align: top;
+	padding: 5px 10px 0 0;
+	text-align: left;
+}
+
+/* Miscellaneous */
+.helptext{
+	font-size: 12px;
+	color: #000;
+}
+
+.error {
+	font-style: italic;
+	color: #666666;
+}
+
+.errornote {
+	color: #fff;
+	text-align: center;
+	font-weight: bold;
+    text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5);
+	border: 1px solid #eee;
+	padding: 5px;
+	background: #7fa7d4;
+
+	-moz-border-radius: 5px;
+    -webkit-border-radius: 5px;
+    border-radius: 5px;
+
+    -moz-box-shadow: inset 0 2px 3px -1px #396da9, 0 1px 0 #fff;
+    -webkit-box-shadow: inset 0 2px 3px -1px #396da9, 0 1px 0 #fff;
+    box-shadow: inset 0 2px 3px -1px #396da9, 0 1px 0 #fff;
+}
+
+ul.errorlist {
+	list-style: none;
+	margin: 0.5em 0;
+	padding: 0;
+}
+
+.errorlist li {
+	color: red;
+	font-size: 15px !important;
+	font-weight: bold;
+	display: block;
+	padding: 4px 5px 4px 25px;
+	margin: 0 0 3px 0;
+}
+
+.help_link a {
+	border-bottom: 0 !important;
+}
+.help_link img {
+	vertical-align:top;
+	padding: 2px 5px;
+}
+img.screenshot {
+	max-width: 550px;
+	border: 0;
+}
+
+p#show, p#hide {
+	text-align: right;
+	float:right;
+}
+
+/*show a foot logo instead of dots in some lists*/
+ul.foot li {
+   list-style-image: url(../img/foot-16.png);
+}
+
+.about_qlinks{
+	text-align: left;
+	margin-left: 20px;
+	line-height: 0.9em;
+}
+
+.about_qlinks td a{
+	margin-left: 15px;
+}
+
+/* Footer */
+/* ========================================================================== */
+
+
+/* Footer Artwork */
+
+#footer_art {
+    background: transparent no-repeat bottom center;
+    height: 180px;
+    margin-top: 0;
+    clear: left;
+}
+#footer_art.none {
+    height: 30px;
+    margin-top: 0;
+}
+#footer_art {
+    background-image: url(../img/footer_arts/l10n.png);
+}
+
+/* Footer Grass */
+
+#footer_grass {
+    background: url(../img/grass.png) top center repeat-x;
+    height: 39px;
+    margin-top: -33px;
+}
+
+/* Footer */
+
+#footer {
+    clear: left;
+    background: #d3d7cf;
+    color: #555753;
+    padding: 20px 0;
+}
+#footer div.links > div > ul > li {
+    float: left;
+    margin: 0 40px 10px 5px;
+}
+#footer .links {
+    overflow: hidden;
+}
+#footer .links a,
+#footer .links strong {
+    display: block;
+    text-decoration: none;
+}
+#footer .links a:hover,
+#footer .links a:focus {
+    text-decoration: underline;
+}
+
+#footer ul {
+    margin: 0;
+    padding: 0;
+    list-style: none;
+}
+#footer ul li {
+    margin: 0;
+    padding: 0;
+}
+#footer ul.menu > li > a {
+    font-weight: bold;
+}
+#footer .links > ul > li > a {
+    font-weight: bold;
+}
+#footer .links a {
+    color: inherit;
+    -webkit-transition: background-color 100ms ease-in;
+    -moz-transition: background-color 100ms ease-in;
+    transition: background-color 100ms ease-in;
+}
+#footer .links a:focus {
+   background: #ececec;
+   padding: 1px 3px;
+   margin: -1px -3px;
+   text-decoration: none !important;
+   outline: 0;
+   -moz-border-radius: 5px;
+   -webkit-border-radius: 5px;
+   border-radius: 5px;
+}
+
+#footer #footnotes {
+    margin-top: 20px;
+}
+#footer #footnotes small {
+    font-size: 88%;
+}
+#footer #footnotes a {
+    color: inherit;
+}
diff --git a/common/static/css/text.css b/common/static/css/text.css
new file mode 100644
index 0000000..4c47bd4
--- /dev/null
+++ b/common/static/css/text.css
@@ -0,0 +1,108 @@
+ import url("fonts.css");
+
+/* Main Elements */
+/* ========================================================================== */
+
+
+body {
+    font-family: Cantarell, 'Droid Sans', Ubuntu, 'DejaVu Sans', Arial, sans-serif;
+    font-size: 14px;
+    line-height: 1.6;
+    color: #2e3436;
+}
+h1, h2, h3, h4, h5, h6, dt {
+    color: #0489B7;
+}
+h1 {
+    font-size: 42px;
+}
+h2 {
+    font-size: 25px;
+}
+h3, dt {
+    font-size: 18px;
+    margin: 0.4em 0 0.5em;
+    color: #2E3436;
+}
+dt {
+    color: #E36615;
+}
+dt a:hover {
+    color: #fa7721;
+}
+h4 {
+    font-size: 16px;
+    color: #ce5c00;
+}
+h5 {
+    font-size: 14px;
+}
+h6 {
+    font-size: 12px;
+}
+ol {
+    list-style:decimal;
+}
+ul {
+    list-style:square;
+}
+li {
+    margin-left:30px;
+}
+dl,dt,h1,h2,h3,h4,h5,h6,pre,table,address,fieldset {
+    margin: 0.8em 0 0.4em;
+}
+p, dd, .action_box, ul, ol {
+    margin: 0.4em 0 1em;
+}
+code {
+    background: #ececec;
+    background: rgba(0,0,0,0.1);
+    padding: 1px;
+}
+
+
+/* Text classes */
+/* ========================================================================== */
+
+.highlight {
+    background: yellow;
+}
+
+.main_feature {
+    font-size: 16pt;
+    line-height: 130%;
+}
+
+.footnotes {
+    font-size: 11px;
+    color: #888a85;
+}
+.footnotes a {
+    color: #888a85;
+}
+
+.more {
+    background: url(../images/more-arrow.png) right 6px no-repeat;
+    cursor: pointer;
+    white-space: nowrap;
+    padding-right: 10px;
+    text-decoration: none;
+}
+.more {
+    text-decoration: underline;
+}
+
+#footer {
+    font-size: 11px;
+    line-height: 1.5em;
+}
+
+
+/* About page */
+/* ========================================================================== */
+table.about_qlinks th {
+    padding: 0.8em 0 0.4em;
+    color: #CE5C00;
+    font-size: 16px;
+}
diff --git a/common/static/img/asc.gif b/common/static/img/asc.gif
new file mode 100644
index 0000000..7415786
Binary files /dev/null and b/common/static/img/asc.gif differ
diff --git a/common/static/img/bg.gif b/common/static/img/bg.gif
new file mode 100644
index 0000000..fac668f
Binary files /dev/null and b/common/static/img/bg.gif differ
diff --git a/common/static/img/bug.png b/common/static/img/bug.png
new file mode 100644
index 0000000..17ddf78
Binary files /dev/null and b/common/static/img/bug.png differ
diff --git a/common/static/img/close.png b/common/static/img/close.png
new file mode 100644
index 0000000..d247e09
Binary files /dev/null and b/common/static/img/close.png differ
diff --git a/common/static/img/closed.png b/common/static/img/closed.png
new file mode 100644
index 0000000..acbe5f6
Binary files /dev/null and b/common/static/img/closed.png differ
diff --git a/common/static/img/desc.gif b/common/static/img/desc.gif
new file mode 100644
index 0000000..3b30b3c
Binary files /dev/null and b/common/static/img/desc.gif differ
diff --git a/common/static/img/download-icon.png b/common/static/img/download-icon.png
new file mode 100644
index 0000000..46d746d
Binary files /dev/null and b/common/static/img/download-icon.png differ
diff --git a/common/static/img/download.png b/common/static/img/download.png
new file mode 100644
index 0000000..46d746d
Binary files /dev/null and b/common/static/img/download.png differ
diff --git a/common/static/img/edit.png b/common/static/img/edit.png
new file mode 100644
index 0000000..eaa3f7a
Binary files /dev/null and b/common/static/img/edit.png differ
diff --git a/common/static/img/edit_small.png b/common/static/img/edit_small.png
new file mode 100644
index 0000000..15bc3a2
Binary files /dev/null and b/common/static/img/edit_small.png differ
diff --git a/common/static/img/emptyimg.png b/common/static/img/emptyimg.png
new file mode 100644
index 0000000..9b63c56
Binary files /dev/null and b/common/static/img/emptyimg.png differ
diff --git a/common/static/img/favicon.png b/common/static/img/favicon.png
new file mode 100644
index 0000000..5d5e45f
Binary files /dev/null and b/common/static/img/favicon.png differ
diff --git a/common/static/img/feed-icon-10x10.png b/common/static/img/feed-icon-10x10.png
new file mode 100644
index 0000000..cc869bc
Binary files /dev/null and b/common/static/img/feed-icon-10x10.png differ
diff --git a/common/static/img/figure.png b/common/static/img/figure.png
new file mode 100644
index 0000000..18aac33
Binary files /dev/null and b/common/static/img/figure.png differ
diff --git a/common/static/img/foot-16.png b/common/static/img/foot-16.png
new file mode 100644
index 0000000..95c4ff6
Binary files /dev/null and b/common/static/img/foot-16.png differ
diff --git a/common/static/img/foot.png b/common/static/img/foot.png
new file mode 100644
index 0000000..436cc24
Binary files /dev/null and b/common/static/img/foot.png differ
diff --git a/common/static/img/footer_arts/l10n.png b/common/static/img/footer_arts/l10n.png
new file mode 100644
index 0000000..c8a9cd7
Binary files /dev/null and b/common/static/img/footer_arts/l10n.png differ
diff --git a/common/static/img/grass.png b/common/static/img/grass.png
new file mode 100644
index 0000000..ded0bd9
Binary files /dev/null and b/common/static/img/grass.png differ
diff --git a/common/static/img/help.png b/common/static/img/help.png
new file mode 100644
index 0000000..e21e902
Binary files /dev/null and b/common/static/img/help.png differ
diff --git a/common/static/img/hr-shadow.png b/common/static/img/hr-shadow.png
new file mode 100644
index 0000000..c5636b9
Binary files /dev/null and b/common/static/img/hr-shadow.png differ
diff --git a/common/static/img/html-bg.png b/common/static/img/html-bg.png
new file mode 100644
index 0000000..b51984e
Binary files /dev/null and b/common/static/img/html-bg.png differ
diff --git a/common/static/img/mallard.png b/common/static/img/mallard.png
new file mode 100644
index 0000000..5a916ee
Binary files /dev/null and b/common/static/img/mallard.png differ
diff --git a/common/static/img/nobody-16.png b/common/static/img/nobody-16.png
new file mode 100644
index 0000000..db58afa
Binary files /dev/null and b/common/static/img/nobody-16.png differ
diff --git a/common/static/img/nobody.png b/common/static/img/nobody.png
new file mode 100644
index 0000000..784328e
Binary files /dev/null and b/common/static/img/nobody.png differ
diff --git a/common/static/img/open.png b/common/static/img/open.png
new file mode 100644
index 0000000..e7d63d5
Binary files /dev/null and b/common/static/img/open.png differ
diff --git a/common/static/img/repository-icon.png b/common/static/img/repository-icon.png
new file mode 100644
index 0000000..3fb2d41
Binary files /dev/null and b/common/static/img/repository-icon.png differ
diff --git a/common/static/img/search.png b/common/static/img/search.png
new file mode 100644
index 0000000..86e27e7
Binary files /dev/null and b/common/static/img/search.png differ
diff --git a/common/static/img/top_bar-bg.png b/common/static/img/top_bar-bg.png
new file mode 100644
index 0000000..567188c
Binary files /dev/null and b/common/static/img/top_bar-bg.png differ
diff --git a/common/static/img/top_bar-item-bg.png b/common/static/img/top_bar-item-bg.png
new file mode 100644
index 0000000..fbd50fe
Binary files /dev/null and b/common/static/img/top_bar-item-bg.png differ
diff --git a/common/static/img/warn.png b/common/static/img/warn.png
new file mode 100644
index 0000000..cdb1a05
Binary files /dev/null and b/common/static/img/warn.png differ
diff --git a/common/static/img/workflow-translation.png b/common/static/img/workflow-translation.png
new file mode 100644
index 0000000..e2bcef8
Binary files /dev/null and b/common/static/img/workflow-translation.png differ
diff --git a/common/static/js/README b/common/static/js/README
new file mode 100644
index 0000000..43d5bff
--- /dev/null
+++ b/common/static/js/README
@@ -0,0 +1,5 @@
+External JavaScript libraries included:
+
+* jQuery: http://jquery.com
+* jQuery tablesorter: http://tablesorter.com
+* jQuery growfield: http://code.google.com/p/jquery-growfield/
diff --git a/common/static/js/jquery.growfield2.js b/common/static/js/jquery.growfield2.js
new file mode 100644
index 0000000..0ba1d8b
--- /dev/null
+++ b/common/static/js/jquery.growfield2.js
@@ -0,0 +1,9 @@
+/*
+ * jQuery Growfield Library 2
+ *
+ * http://code.google.com/p/jquery-dynamic/
+ * licensed under the MIT license
+ *
+ * autor: john kuindji
+ */
+(function(C){if(C.support==undefined){C.support={boxModel:C.boxModel}}var A=false;C(window).one("load",function(){A=true});C.fx.prototype.originalUpdate=C.fx.prototype.update;C.fx.prototype.update=false;C.fx.prototype.update=function(){if(!this.options.inline){return this.originalUpdate.call(this)}if(this.options.step){this.options.step.call(this.elem,this.now,this)}(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this)};var B=function(D){this.dom=D;this.o=C(D);this.opt={auto:true,animate:100,easing:null,min:false,max:false,restore:false,step:false};this.enabled=this.dummy=this.busy=this.initial=this.sizeRelated=this.prevH=this.firstH=false};B.prototype={toggle:function(D){if((D=="disable"||D===false)&&this.enabled){return this.setEvents("off")}if((D=="enable"||D===true)&&!this.enabled){return this.setEvents("on")}return this},setEvents:function(I){var H=this.o,E=this.opt,G=this,D=false;if(I=="on"&&!this.enabled){var F=H.height()==0?true:false;if(!F||A){C(function(){G.pr
 epareSizeRelated()})}else{C(window).one("load",function(){G.prepareSizeRelated()})}if(E.auto){H.bind("keyup.growfield",function(J){G.keyUp(J);return true});H.bind("focus.growfield",function(J){G.focus(J);return true});H.bind("blur.growfield",function(J){G.blur(J);return true});D={overflow:H.css("overflow"),cssResize:H.css("resize")};if(C.browser.safari){H.css("resize","none")}this.initial=D;H.css({overflow:"hidden"});if(!F||A){C(function(){G.createDummy()})}else{C(window).one("load",function(){G.createDummy()})}}else{H.bind("keydown.growfield",function(J){G.manualKeyUp(J);return true});H.css("overflow-y","auto");if(!F||A){C(function(){G.update(H.height())})}else{C(window).one("load",function(){G.update(H.height())})}}H.addClass("growfield");this.enabled=true}else{if(I=="off"&&this.enabled){if(this.dummy){this.dummy.remove();this.dummy=false}H.unbind(".growfield").css("overflow",this.initial.overflow);if(C.browser.safari){H.css("resize",this.initial.cssResize)}this.enabled=fa
 lse}}return this},setOptions:function(D){var E=this.opt,F=this.o;C.extend(E,D);if(!C.easing){E.easing=null}},update:function(N,G){var D=this.sizeRelated,J=this.o.val(),F=this.opt,M=this.dom,H=this.o,E=this,K=this.prevH;var I=!F.auto,L=F.auto;N=this.convertHeight(Math.round(N),"inner");N=F.min>N?F.min:F.max&&N>F.max?F.max:F.auto&&!J?F.min:N;if(F.max&&F.auto){if(K!=F.max&&N==F.max){H.css("overflow-y","scroll");if(!F.animate){H.focus()}I=true;L=false}if(K==F.max&&N<F.max){H.css("overflow-y","hidden");if(!F.animate){H.focus()}L=false}}if(N==K){return true}this.prevH=N;if(G){E.busy=true;H.animate({height:N},{duration:F.animate,easing:F.easing,overflow:null,inline:true,complete:function(){if(!I){H.css("overflow","hidden")}if(!L){H.focus()}E.busy=false},queue:false})}else{M.style.height=N+"px"}},manualKeyUp:function(D){if(!D.ctrlKey){return }if(D.keyCode!=38&&D.keyCode!=40){return }this.update(this.o.outerHeight()+(this.opt.step*(D.keyCode==38?-1:1)),this.opt.animate)},keyUp:functi
 on(D){if(this.busy){return true}if(C.inArray(D.keyCode,[37,38,39,40])!=-1){return true}this.update(this.getDummyHeight(),this.opt.animate)},focus:function(D){if(this.busy){return true}if(this.opt.restore){this.update(this.getDummyHeight(),this.opt.animate)}},blur:function(D){if(this.busy){return true}if(this.opt.restore){this.update(0,false)}},getDummyHeight:function(){var G=this.o.val(),E=0,D=this.sizeRelated,F="\n111\n111";if(C.browser.safari){G=G.substring(0,G.length-1)}if(!D.lh||!D.fs){G+=F}this.dummy.val(G);if(C.browser.msie){this.dummy[0].style.height=this.dummy[0].scrollHeight+"px"}E=this.dummy[0].scrollHeight;if(D.lh&&D.fs){E+=D.lh>D.fs?D.lh+D.fs:D.fs*2}if(C.browser.msie){this.dummy[0].style.height="20px"}return E},createDummy:function(){var F=this.o,E=this.o.val();var D=F.clone().addClass("growfieldDummy").attr("name","").attr("tabindex",-9999).css({position:"absolute",left:-9999,top:0,height:"20px",resize:"none"}).insertBefore(F).show();if(!E){D.val("dummy text")}t
 his.dummy=D;this.update(!jQuery.trim(E)?0:this.getDummyHeight(),false)},convertHeight:function(F,H){var E=this.sizeRelated,D=(H=="inner"?-1:1),G=C.support.boxModel;return F+(G?E.bt:0)*D+(G?E.bb:0)*D+(G?E.pt:0)*D+(G?E.pb:0)*D},prepareSizeRelated:function(){var F=this.o,D=this.opt;if(!D.min){D.min=parseInt(F.css("min-height"),10)||this.firstH||parseInt(F.height(),10)||20;if(D.min<=0){D.min=20}if(!this.firstH){this.firstH=D.min}}if(!D.max){D.max=parseInt(F.css("max-height"),10)||false;if(D.max<=0){D.max=false}}if(!D.step){D.step=parseInt(F.css("line-height"),10)||parseInt(F.css("font-size"),10)||20}var E={pt:parseInt(F.css("paddingTop"),10)||0,pb:parseInt(F.css("paddingBottom"),10)||0,bt:parseInt(F.css("borderTopWidth"),10)||0,bb:parseInt(F.css("borderBottomWidth"),10)||0,lh:parseInt(F.css("lineHeight"),10)||false,fs:parseInt(F.css("fontSize"),10)||false};this.sizeRelated=E}};C.fn.growfield=function(D){if("destroy"==D){return this.each(function(){var F=C(this).data("growfield")
 ;if(F==undefined){return true}F.toggle(false);C(this).removeData("growfield");return true})}if("restart"==D){return this.each(function(){var F=C(this).data("growfield");if(F==undefined){return true}F.toggle(false).toggle(true)})}var E=typeof D;return this.each(function(){if(!/textarea/i.test(this.tagName)||C(this).hasClass("growfieldDummy")){return true}var F=false,J=C(this),H=J.data("growfield");if(H==undefined){F=true;J.data("growfield",new B(this));H=J.data("growfield")}if(F){var G=C.extend({},C.fn.growfield.defaults,D);H.setOptions(G)}if(!F&&(!D||E=="object")){H.setOptions(D)}if(E=="string"){if(D.indexOf("!")==0&&C.fn.growfield.presets[D.substr(1)]){J.unbind("."+i+"."+D.substr(1))}else{if(C.fn.growfield.presets[D]){var I=C.fn.growfield.presets[D];H.setOptions(I,D)}}}if(F&&!G.skipEnable){H.toggle(true)}if(!F&&(E=="boolean"||D=="enable"||D=="disable")){H.toggle(D)}})};C.fn.growfield.defaults={};C.fn.growfield.presets={}})(jQuery);
\ No newline at end of file
diff --git a/common/static/js/jquery.min.js b/common/static/js/jquery.min.js
new file mode 100644
index 0000000..48590ec
--- /dev/null
+++ b/common/static/js/jquery.min.js
@@ -0,0 +1,18 @@
+/*!
+ * jQuery JavaScript Library v1.6.2
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu Jun 30 14:16:56 2011 -0400
+ */
+(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l
 ,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bC.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="obj
 ect")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bR,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bX(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bX(a,c,d,e,"*",g));return l}function bW(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bN),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bA(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bv:bw;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="pad
 ding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultV
 alue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bg(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode
 .nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(x,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.
 handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.docum
 ent,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,x=function(a,b){return b.toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(
 a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?thi
 s.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),ty
 peof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready
 );var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DO
 MParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regex
 p"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(H)return H.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;i
 f(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test("Â")&&(k=/^[
 \s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:functio
 n(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.pr
 omise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliabl
 eMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",
 a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0
 ,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}v
 ar k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){v
 ar b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(th
 is,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u=/\:|^on/,v,w;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)
 },removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j
 ;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g
 =f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.lengt
 h||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type pro
 perty can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(
 g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.
 support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c
 =c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t
 [h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.
+shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){
 try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.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[f.expando]
 )return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!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:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,N(a.origType,a.selector),f.extend({},a,{handler:M,guid:a.handler.guid}))},remove:
 function(a){f.event.remove(this,N(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?E:D):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=E;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=E;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},s
 topImmediatePropagation:function(){this.isImmediatePropagationStopped=E,this.stopPropagation()},isDefaultPrevented:D,isPropagationStopped:D,isImmediatePropagationStopped:D};var F=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},G=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?G:F,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?G:F)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&K("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closes
 t("form").length&&a.keyCode===13&&K("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var H,I=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,
 "textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d=
 ==!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].
 guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var L={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||D,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=x.exec(h),k="",j&&(k=j[0],h=h.replace(x,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,L[h]?(a.push(L[h]+k),h=h+k):h=(L[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+N(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+N(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mou
 seover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[
 0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]
 ")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n
  in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=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|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*
 \d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,
 c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*
 /g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!
 a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|selec
 t|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.siz
 cache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))
 /.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.
 unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function
 (){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[
 3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g
 ){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);r
 eturn k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,t
 his).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=T.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:f
 unction(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this
 .length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/<tbody/i,ba=/<|&#?\w+;/,bb=/<(?:script|object|embed|option|style)/i,bc=/checked\s*(?:[^=]|=\s*.checked.)/i,bd=/\/(java|ecma)script/i,be=/^\s*<!(?:\[CDATA\[|\-\-)/,bf={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,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))retu
 rn this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(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,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments
 .length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(
 e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bc.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.le
 ngth===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bg(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bm)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bb.test(a[0])&&(f.support.checkClone||!bc.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.le
 ngth===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j
+)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1></$2>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=_.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].c
 hildNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bl(k[i]);else bl(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bd.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,
 b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bn=/alpha\([^)]*\)/i,bo=/opacity=([^)]*)/,bp=/([A-Z]|^ms)/g,bq=/^-?\d+(?:px)?$/i,br=/^-?\d/,bs=/^[+\-]=/,bt=/[^+\-\.\de]+/g,bu={position:"absolute",visibility:"hidden",display:"block"},bv=["Left","Right"],bw=["Top","Bottom"],bx,by,bz;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bx(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(
 g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bs.test(d)&&(d=+d.replace(bt,"")+parseFloat(f.css(a,c)),h="number"),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bx)return bx(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bA(a,b,d);f.swap(a,bu,function(){e=bA(a,b,d)});return e}},set:function(a,b){if(!bq.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parse
 Float(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft
 +"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)
 return bQ.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bL,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bM.test(this.nodeName)||bG.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxCompl
 ete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"tex
 t json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRe
 questHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s==
 =2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g
 .trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=
 b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=
 function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data
 ||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("show",3),a,b,c);for(var g=0,h=this.l
 ength;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cs(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cr("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cr("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show(
 ).end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cs(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(t
 his.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cr("show",1),slideUp:cr("hide",1),slideToggle:cr("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d
 .duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.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,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=cn||cp(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,th
 is.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!cl&&(co?(cl=!0,g=function(){cl&&(co(g),e.tick())},co(g)):cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||cp(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinit
 y?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){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:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var ct=/^t(?:able|d|h)$/i,cu=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b|
 |!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cv(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j
 .getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!ct.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<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>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.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!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,le
 ft:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cu.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cu.test(a.nodeName)&&f.css(a,"position
 ")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cv(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cv(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(
 e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
\ No newline at end of file
diff --git a/common/static/js/jquery.tablesorter.min.js b/common/static/js/jquery.tablesorter.min.js
new file mode 100644
index 0000000..b8605df
--- /dev/null
+++ b/common/static/js/jquery.tablesorter.min.js
@@ -0,0 +1,4 @@
+
+(function($){$.extend({tablesorter:new
+function(){var parsers=[],widgets=[];this.defaults={cssHeader:"header",cssAsc:"headerSortUp",cssDesc:"headerSortDown",cssChildRow:"expand-child",sortInitialOrder:"asc",sortMultiSortKey:"shiftKey",sortForce:null,sortAppend:null,sortLocaleCompare:true,textExtraction:"simple",parsers:{},widgets:[],widgetZebra:{css:["even","odd"]},headers:{},widthFixed:false,cancelSelection:true,sortList:[],headerList:[],dateFormat:"us",decimal:'/\.|\,/g',onRenderHeader:null,selectorHeaders:'thead th',debug:false};function benchmark(s,d){log(s+","+(new Date().getTime()-d.getTime())+"ms");}this.benchmark=benchmark;function log(s){if(typeof console!="undefined"&&typeof console.debug!="undefined"){console.log(s);}else{alert(s);}}function buildParserCache(table,$headers){if(table.config.debug){var parsersDebug="";}if(table.tBodies.length==0)return;var rows=table.tBodies[0].rows;if(rows[0]){var list=[],cells=rows[0].cells,l=cells.length;for(var i=0;i<l;i++){var p=false;if($.metadata&&($($headers[i]).
 metadata()&&$($headers[i]).metadata().sorter)){p=getParserById($($headers[i]).metadata().sorter);}else if((table.config.headers[i]&&table.config.headers[i].sorter)){p=getParserById(table.config.headers[i].sorter);}if(!p){p=detectParserForColumn(table,rows,-1,i);}if(table.config.debug){parsersDebug+="column:"+i+" parser:"+p.id+"\n";}list.push(p);}}if(table.config.debug){log(parsersDebug);}return list;};function detectParserForColumn(table,rows,rowIndex,cellIndex){var l=parsers.length,node=false,nodeValue=false,keepLooking=true;while(nodeValue==''&&keepLooking){rowIndex++;if(rows[rowIndex]){node=getNodeFromRowAndCellIndex(rows,rowIndex,cellIndex);nodeValue=trimAndGetNodeText(table.config,node);if(table.config.debug){log('Checking if value was empty on row:'+rowIndex);}}else{keepLooking=false;}}for(var i=1;i<l;i++){if(parsers[i].is(nodeValue,table,node)){return parsers[i];}}return parsers[0];}function getNodeFromRowAndCellIndex(rows,rowIndex,cellIndex){return rows[rowIndex].cel
 ls[cellIndex];}function trimAndGetNodeText(config,node){return $.trim(getElementText(config,node));}function getParserById(name){var l=parsers.length;for(var i=0;i<l;i++){if(parsers[i].id.toLowerCase()==name.toLowerCase()){return parsers[i];}}return false;}function buildCache(table){if(table.config.debug){var cacheTime=new Date();}var totalRows=(table.tBodies[0]&&table.tBodies[0].rows.length)||0,totalCells=(table.tBodies[0].rows[0]&&table.tBodies[0].rows[0].cells.length)||0,parsers=table.config.parsers,cache={row:[],normalized:[]};for(var i=0;i<totalRows;++i){var c=$(table.tBodies[0].rows[i]),cols=[];if(c.hasClass(table.config.cssChildRow)){cache.row[cache.row.length-1]=cache.row[cache.row.length-1].add(c);continue;}cache.row.push(c);for(var j=0;j<totalCells;++j){cols.push(parsers[j].format(getElementText(table.config,c[0].cells[j]),table,c[0].cells[j]));}cols.push(cache.normalized.length);cache.normalized.push(cols);cols=null;};if(table.config.debug){benchmark("Building cac
 he for "+totalRows+" rows:",cacheTime);}return cache;};function getElementText(config,node){var text="";if(!node)return"";if(!config.supportsTextContent)config.supportsTextContent=node.textContent||false;if(config.textExtraction=="simple"){if(config.supportsTextContent){text=node.textContent;}else{if(node.childNodes[0]&&node.childNodes[0].hasChildNodes()){text=node.childNodes[0].innerHTML;}else{text=node.innerHTML;}}}else{if(typeof(config.textExtraction)=="function"){text=config.textExtraction(node);}else{text=$(node).text();}}return text;}function appendToTable(table,cache){if(table.config.debug){var appendTime=new Date()}var c=cache,r=c.row,n=c.normalized,totalRows=n.length,checkCell=(n[0].length-1),tableBody=$(table.tBodies[0]),rows=[];for(var i=0;i<totalRows;i++){var pos=n[i][checkCell];rows.push(r[pos]);if(!table.config.appender){var l=r[pos].length;for(var j=0;j<l;j++){tableBody[0].appendChild(r[pos][j]);}}}if(table.config.appender){table.config.appender(table,rows);}r
 ows=null;if(table.config.debug){benchmark("Rebuilt table:",appendTime);}applyWidget(table);setTimeout(function(){$(table).trigger("sortEnd");},0);};function buildHeaders(table){if(table.config.debug){var time=new Date();}var meta=($.metadata)?true:false;var header_index=computeTableHeaderCellIndexes(table);$tableHeaders=$(table.config.selectorHeaders,table).each(function(index){this.column=header_index[this.parentNode.rowIndex+"-"+this.cellIndex];this.order=formatSortingOrder(table.config.sortInitialOrder);this.count=this.order;if(checkHeaderMetadata(this)||checkHeaderOptions(table,index))this.sortDisabled=true;if(checkHeaderOptionsSortingLocked(table,index))this.order=this.lockedOrder=checkHeaderOptionsSortingLocked(table,index);if(!this.sortDisabled){var $th=$(this).addClass(table.config.cssHeader);if(table.config.onRenderHeader)table.config.onRenderHeader.apply($th);}table.config.headerList[index]=this;});if(table.config.debug){benchmark("Built headers:",time);log($tableH
 eaders);}return $tableHeaders;};function computeTableHeaderCellIndexes(t){var matrix=[];var lookup={};var thead=t.getElementsByTagName('THEAD')[0];var trs=thead.getElementsByTagName('TR');for(var i=0;i<trs.length;i++){var cells=trs[i].cells;for(var j=0;j<cells.length;j++){var c=cells[j];var rowIndex=c.parentNode.rowIndex;var cellId=rowIndex+"-"+c.cellIndex;var rowSpan=c.rowSpan||1;var colSpan=c.colSpan||1
+var firstAvailCol;if(typeof(matrix[rowIndex])=="undefined"){matrix[rowIndex]=[];}for(var k=0;k<matrix[rowIndex].length+1;k++){if(typeof(matrix[rowIndex][k])=="undefined"){firstAvailCol=k;break;}}lookup[cellId]=firstAvailCol;for(var k=rowIndex;k<rowIndex+rowSpan;k++){if(typeof(matrix[k])=="undefined"){matrix[k]=[];}var matrixrow=matrix[k];for(var l=firstAvailCol;l<firstAvailCol+colSpan;l++){matrixrow[l]="x";}}}}return lookup;}function checkCellColSpan(table,rows,row){var arr=[],r=table.tHead.rows,c=r[row].cells;for(var i=0;i<c.length;i++){var cell=c[i];if(cell.colSpan>1){arr=arr.concat(checkCellColSpan(table,headerArr,row++));}else{if(table.tHead.length==1||(cell.rowSpan>1||!r[row+1])){arr.push(cell);}}}return arr;};function checkHeaderMetadata(cell){if(($.metadata)&&($(cell).metadata().sorter===false)){return true;};return false;}function checkHeaderOptions(table,i){if((table.config.headers[i])&&(table.config.headers[i].sorter===false)){return true;};return false;}function c
 heckHeaderOptionsSortingLocked(table,i){if((table.config.headers[i])&&(table.config.headers[i].lockedOrder))return table.config.headers[i].lockedOrder;return false;}function applyWidget(table){var c=table.config.widgets;var l=c.length;for(var i=0;i<l;i++){getWidgetById(c[i]).format(table);}}function getWidgetById(name){var l=widgets.length;for(var i=0;i<l;i++){if(widgets[i].id.toLowerCase()==name.toLowerCase()){return widgets[i];}}};function formatSortingOrder(v){if(typeof(v)!="Number"){return(v.toLowerCase()=="desc")?1:0;}else{return(v==1)?1:0;}}function isValueInArray(v,a){var l=a.length;for(var i=0;i<l;i++){if(a[i][0]==v){return true;}}return false;}function setHeadersCss(table,$headers,list,css){$headers.removeClass(css[0]).removeClass(css[1]);var h=[];$headers.each(function(offset){if(!this.sortDisabled){h[this.column]=$(this);}});var l=list.length;for(var i=0;i<l;i++){h[list[i][0]].addClass(css[list[i][1]]);}}function fixColumnWidth(table,$headers){var c=table.config;i
 f(c.widthFixed){var colgroup=$('<colgroup>');$("tr:first td",table.tBodies[0]).each(function(){colgroup.append($('<col>').css('width',$(this).width()));});$(table).prepend(colgroup);};}function updateHeaderSortCount(table,sortList){var c=table.config,l=sortList.length;for(var i=0;i<l;i++){var s=sortList[i],o=c.headerList[s[0]];o.count=s[1];o.count++;}}function multisort(table,sortList,cache){if(table.config.debug){var sortTime=new Date();}var dynamicExp="var sortWrapper = function(a,b) {",l=sortList.length;for(var i=0;i<l;i++){var c=sortList[i][0];var order=sortList[i][1];var s=(table.config.parsers[c].type=="text")?((order==0)?makeSortFunction("text","asc",c):makeSortFunction("text","desc",c)):((order==0)?makeSortFunction("numeric","asc",c):makeSortFunction("numeric","desc",c));var e="e"+i;dynamicExp+="var "+e+" = "+s;dynamicExp+="if("+e+") { return "+e+"; } ";dynamicExp+="else { ";}var orgOrderCol=cache.normalized[0].length-1;dynamicExp+="return a["+orgOrderCol+"]-b["+orgO
 rderCol+"];";for(var i=0;i<l;i++){dynamicExp+="}; ";}dynamicExp+="return 0; ";dynamicExp+="}; ";if(table.config.debug){benchmark("Evaling expression:"+dynamicExp,new Date());}eval(dynamicExp);cache.normalized.sort(sortWrapper);if(table.config.debug){benchmark("Sorting on "+sortList.toString()+" and dir "+order+" time:",sortTime);}return cache;};function makeSortFunction(type,direction,index){var a="a["+index+"]",b="b["+index+"]";if(type=='text'&&direction=='asc'){return"("+a+" == "+b+" ? 0 : ("+a+" === null ? Number.POSITIVE_INFINITY : ("+b+" === null ? Number.NEGATIVE_INFINITY : ("+a+" < "+b+") ? -1 : 1 )));";}else if(type=='text'&&direction=='desc'){return"("+a+" == "+b+" ? 0 : ("+a+" === null ? Number.POSITIVE_INFINITY : ("+b+" === null ? Number.NEGATIVE_INFINITY : ("+b+" < "+a+") ? -1 : 1 )));";}else if(type=='numeric'&&direction=='asc'){return"("+a+" === null && "+b+" === null) ? 0 :("+a+" === null ? Number.POSITIVE_INFINITY : ("+b+" === null ? Number.NEGATIVE_INFINITY 
 : "+a+" - "+b+"));";}else if(type=='numeric'&&direction=='desc'){return"("+a+" === null && "+b+" === null) ? 0 :("+a+" === null ? Number.POSITIVE_INFINITY : ("+b+" === null ? Number.NEGATIVE_INFINITY : "+b+" - "+a+"));";}};function makeSortText(i){return"((a["+i+"] < b["+i+"]) ? -1 : ((a["+i+"] > b["+i+"]) ? 1 : 0));";};function makeSortTextDesc(i){return"((b["+i+"] < a["+i+"]) ? -1 : ((b["+i+"] > a["+i+"]) ? 1 : 0));";};function makeSortNumeric(i){return"a["+i+"]-b["+i+"];";};function makeSortNumericDesc(i){return"b["+i+"]-a["+i+"];";};function sortText(a,b){if(table.config.sortLocaleCompare)return a.localeCompare(b);return((a<b)?-1:((a>b)?1:0));};function sortTextDesc(a,b){if(table.config.sortLocaleCompare)return b.localeCompare(a);return((b<a)?-1:((b>a)?1:0));};function sortNumeric(a,b){return a-b;};function sortNumericDesc(a,b){return b-a;};function getCachedSortType(parsers,i){return parsers[i].type;};this.construct=function(settings){return this.each(function(){if(!thi
 s.tHead||!this.tBodies)return;var $this,$document,$headers,cache,config,shiftDown=0,sortOrder;this.config={};config=$.extend(this.config,$.tablesorter.defaults,settings);$this=$(this);$.data(this,"tablesorter",config);$headers=buildHeaders(this);this.config.parsers=buildParserCache(this,$headers);cache=buildCache(this);var sortCSS=[config.cssDesc,config.cssAsc];fixColumnWidth(this);$headers.click(function(e){var totalRows=($this[0].tBodies[0]&&$this[0].tBodies[0].rows.length)||0;if(!this.sortDisabled&&totalRows>0){$this.trigger("sortStart");var $cell=$(this);var i=this.column;this.order=this.count++%2;if(this.lockedOrder)this.order=this.lockedOrder;if(!e[config.sortMultiSortKey]){config.sortList=[];if(config.sortForce!=null){var a=config.sortForce;for(var j=0;j<a.length;j++){if(a[j][0]!=i){config.sortList.push(a[j]);}}}config.sortList.push([i,this.order]);}else{if(isValueInArray(i,config.sortList)){for(var j=0;j<config.sortList.length;j++){var s=config.sortList[j],o=config.h
 eaderList[s[0]];if(s[0]==i){o.count=s[1];o.count++;s[1]=o.count%2;}}}else{config.sortList.push([i,this.order]);}};setTimeout(function(){setHeadersCss($this[0],$headers,config.sortList,sortCSS);appendToTable($this[0],multisort($this[0],config.sortList,cache));},1);return false;}}).mousedown(function(){if(config.cancelSelection){this.onselectstart=function(){return false};return false;}});$this.bind("update",function(){var me=this;setTimeout(function(){me.config.parsers=buildParserCache(me,$headers);cache=buildCache(me);},1);}).bind("updateCell",function(e,cell){var config=this.config;var pos=[(cell.parentNode.rowIndex-1),cell.cellIndex];cache.normalized[pos[0]][pos[1]]=config.parsers[pos[1]].format(getElementText(config,cell),cell);}).bind("sorton",function(e,list){$(this).trigger("sortStart");config.sortList=list;var sortList=config.sortList;updateHeaderSortCount(this,sortList);setHeadersCss(this,$headers,sortList,sortCSS);appendToTable(this,multisort(this,sortList,cache));}
 ).bind("appendCache",function(){appendToTable(this,cache);}).bind("applyWidgetId",function(e,id){getWidgetById(id).format(this);}).bind("applyWidgets",function(){applyWidget(this);});if($.metadata&&($(this).metadata()&&$(this).metadata().sortlist)){config.sortList=$(this).metadata().sortlist;}if(config.sortList.length>0){$this.trigger("sorton",[config.sortList]);}applyWidget(this);});};this.addParser=function(parser){var l=parsers.length,a=true;for(var i=0;i<l;i++){if(parsers[i].id.toLowerCase()==parser.id.toLowerCase()){a=false;}}if(a){parsers.push(parser);};};this.addWidget=function(widget){widgets.push(widget);};this.formatFloat=function(s){var i=parseFloat(s);return(isNaN(i))?0:i;};this.formatInt=function(s){var i=parseInt(s);return(isNaN(i))?0:i;};this.isDigit=function(s,config){return/^[-+]?\d*$/.test($.trim(s.replace(/[,.']/g,'')));};this.clearTableBody=function(table){if($.browser.msie){function empty(){while(this.firstChild)this.removeChild(this.firstChild);}empty.a
 pply(table.tBodies[0]);}else{table.tBodies[0].innerHTML="";}};}});$.fn.extend({tablesorter:$.tablesorter.construct});var ts=$.tablesorter;ts.addParser({id:"text",is:function(s){return true;},format:function(s){return $.trim(s.toLocaleLowerCase());},type:"text"});ts.addParser({id:"digit",is:function(s,table){var c=table.config;return $.tablesorter.isDigit(s,c);},format:function(s){return $.tablesorter.formatFloat(s);},type:"numeric"});ts.addParser({id:"currency",is:function(s){return/^[Â$â?.]/.test(s);},format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/[Â$â]/g),""));},type:"numeric"});ts.addParser({id:"ipAddress",is:function(s){return/^\d{2,3}[\.]\d{2,3}[\.]\d{2,3}[\.]\d{2,3}$/.test(s);},format:function(s){var a=s.split("."),r="",l=a.length;for(var i=0;i<l;i++){var item=a[i];if(item.length==2){r+="0"+item;}else{r+=item;}}return $.tablesorter.formatFloat(r);},type:"numeric"});ts.addParser({id:"url",is:function(s){return/^(https?|ftp|file):\/\/$/.t
 est(s);},format:function(s){return jQuery.trim(s.replace(new RegExp(/(https?|ftp|file):\/\//),''));},type:"text"});ts.addParser({id:"isoDate",is:function(s){return/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(s);},format:function(s){return $.tablesorter.formatFloat((s!="")?new Date(s.replace(new RegExp(/-/g),"/")).getTime():"0");},type:"numeric"});ts.addParser({id:"percent",is:function(s){return/\%$/.test($.trim(s));},format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/%/g),""));},type:"numeric"});ts.addParser({id:"usLongDate",is:function(s){return s.match(new RegExp(/^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/));},format:function(s){return $.tablesorter.formatFloat(new Date(s).getTime());},type:"numeric"});ts.addParser({id:"shortDate",is:function(s){return/\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/.test(s);},format:function(s,table){var c=table.config;s=s.replace(/\-/g,"/");if(c.dateFormat=="us")
 {s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$1/$2");}else if(c.dateFormat=="uk"){s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$2/$1");}else if(c.dateFormat=="dd/mm/yy"||c.dateFormat=="dd-mm-yy"){s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/,"$1/$2/$3");}return $.tablesorter.formatFloat(new Date(s).getTime());},type:"numeric"});ts.addParser({id:"time",is:function(s){return/^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(am|pm)))$/.test(s);},format:function(s){return $.tablesorter.formatFloat(new Date("2000/01/01 "+s).getTime());},type:"numeric"});ts.addParser({id:"metadata",is:function(s){return false;},format:function(s,table,cell){var c=table.config,p=(!c.parserMetadataName)?'sortValue':c.parserMetadataName;return $(cell).metadata()[p];},type:"numeric"});ts.addWidget({id:"zebra",format:function(table){if(table.config.debug){var time=new Date();}var $tr,row=-1,odd;$("tr:visible",table.tBodies[0]).each(function(i){$tr=$(this);if(!$tr.hasClas
 s(table.config.cssChildRow))row++;odd=(row%2==0);$tr.removeClass(table.config.widgetZebra.css[odd?0:1]).addClass(table.config.widgetZebra.css[odd?1:0])});if(table.config.debug){$.tablesorter.benchmark("Applying Zebra widget",time);}}});})(jQuery);
\ No newline at end of file
diff --git a/common/static/js/jquery.tools.js b/common/static/js/jquery.tools.js
new file mode 100644
index 0000000..5896b1a
--- /dev/null
+++ b/common/static/js/jquery.tools.js
@@ -0,0 +1,1672 @@
+/**
+ * @license
+ * jQuery Tools v1.2.6 Overlay - Overlay base. Extend it.
+ *
+ * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
+ *
+ * http://flowplayer.org/tools/overlay/
+ *
+ * Since: March 2008
+ * Date: 2011-10-26 11:02
+ */
+(function($) {
+
+	// static constructs
+	$.tools = $.tools || {version: 'v1.2.6'};
+
+	$.tools.overlay = {
+
+		addEffect: function(name, loadFn, closeFn) {
+			effects[name] = [loadFn, closeFn];
+		},
+
+		conf: {
+			close: null,
+			closeOnClick: true,
+			closeOnEsc: true,
+			closeSpeed: 'fast',
+			effect: 'default',
+
+			// since 1.2. fixed positioning not supported by IE6
+			fixed: !$.browser.msie || $.browser.version > 6,
+
+			left: 'center',
+			load: false, // 1.2
+			mask: null,
+			oneInstance: true,
+			speed: 'normal',
+			target: null, // target element to be overlayed. by default taken from [rel]
+			top: '10%'
+		}
+	};
+
+
+	var instances = [], effects = {};
+
+	// the default effect. nice and easy!
+	$.tools.overlay.addEffect('default',
+
+		/*
+			onLoad/onClose functions must be called otherwise none of the
+			user supplied callback methods won't be called
+		*/
+		function(pos, onLoad) {
+
+			var conf = this.getConf(),
+				 w = $(window);
+
+			if (!conf.fixed)  {
+				pos.top += w.scrollTop();
+				pos.left += w.scrollLeft();
+			}
+
+			pos.position = conf.fixed ? 'fixed' : 'absolute';
+			this.getOverlay().css(pos).fadeIn(conf.speed, onLoad);
+
+		}, function(onClose) {
+			this.getOverlay().fadeOut(this.getConf().closeSpeed, onClose);
+		}
+	);
+
+
+	function Overlay(trigger, conf) {
+
+		// private variables
+		var self = this,
+			 fire = trigger.add(self),
+			 w = $(window),
+			 closers,
+			 overlay,
+			 opened,
+			 maskConf = $.tools.expose && (conf.mask || conf.expose),
+			 uid = Math.random().toString().slice(10);
+
+
+		// mask configuration
+		if (maskConf) {
+			if (typeof maskConf == 'string') { maskConf = {color: maskConf}; }
+			maskConf.closeOnClick = maskConf.closeOnEsc = false;
+		}
+
+		// get overlay and trigger
+		var jq = conf.target || trigger.attr("rel");
+		overlay = jq ? $(jq) : null || trigger;
+
+		// overlay not found. cannot continue
+		if (!overlay.length) { throw "Could not find Overlay: " + jq; }
+
+		// trigger's click event
+		if (trigger && trigger.index(overlay) == -1) {
+			trigger.click(function(e) {
+				self.load(e);
+				return e.preventDefault();
+			});
+		}
+
+		// API methods
+		$.extend(self, {
+
+			load: function(e) {
+
+				// can be opened only once
+				if (self.isOpened()) { return self; }
+
+				// find the effect
+		 		var eff = effects[conf.effect];
+		 		if (!eff) { throw "Overlay: cannot find effect : \"" + conf.effect + "\""; }
+
+				// close other instances?
+				if (conf.oneInstance) {
+					$.each(instances, function() {
+						this.close(e);
+					});
+				}
+
+				// onBeforeLoad
+				e = e || $.Event();
+				e.type = "onBeforeLoad";
+				fire.trigger(e);
+				if (e.isDefaultPrevented()) { return self; }
+
+				// opened
+				opened = true;
+
+				// possible mask effect
+				if (maskConf) { $(overlay).expose(maskConf); }
+
+				// position & dimensions
+				var top = conf.top,
+					 left = conf.left,
+					 oWidth = overlay.outerWidth({margin:true}),
+					 oHeight = overlay.outerHeight({margin:true});
+
+				if (typeof top == 'string')  {
+					top = top == 'center' ? Math.max((w.height() - oHeight) / 2, 0) :
+						parseInt(top, 10) / 100 * w.height();
+				}
+
+				if (left == 'center') { left = Math.max((w.width() - oWidth) / 2, 0); }
+
+
+		 		// load effect
+				eff[0].call(self, {top: top, left: left}, function() {
+					if (opened) {
+						e.type = "onLoad";
+						fire.trigger(e);
+					}
+				});
+
+				// mask.click closes overlay
+				if (maskConf && conf.closeOnClick) {
+					$.mask.getMask().one("click", self.close);
+				}
+
+				// when window is clicked outside overlay, we close
+				if (conf.closeOnClick) {
+					$(document).bind("click." + uid, function(e) {
+						if (!$(e.target).parents(overlay).length) {
+							self.close(e);
+						}
+					});
+				}
+
+				// keyboard::escape
+				if (conf.closeOnEsc) {
+
+					// one callback is enough if multiple instances are loaded simultaneously
+					$(document).bind("keydown." + uid, function(e) {
+						if (e.keyCode == 27) {
+							self.close(e);
+						}
+					});
+				}
+
+
+				return self;
+			},
+
+			close: function(e) {
+
+				if (!self.isOpened()) { return self; }
+
+				e = e || $.Event();
+				e.type = "onBeforeClose";
+				fire.trigger(e);
+				if (e.isDefaultPrevented()) { return; }
+
+				opened = false;
+
+				// close effect
+				effects[conf.effect][1].call(self, function() {
+					e.type = "onClose";
+					fire.trigger(e);
+				});
+
+				// unbind the keyboard / clicking actions
+				$(document).unbind("click." + uid).unbind("keydown." + uid);
+
+				if (maskConf) {
+					$.mask.close();
+				}
+
+				return self;
+			},
+
+			getOverlay: function() {
+				return overlay;
+			},
+
+			getTrigger: function() {
+				return trigger;
+			},
+
+			getClosers: function() {
+				return closers;
+			},
+
+			isOpened: function()  {
+				return opened;
+			},
+
+			// manipulate start, finish and speeds
+			getConf: function() {
+				return conf;
+			}
+
+		});
+
+		// callbacks
+		$.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","), function(i, name) {
+
+			// configuration
+			if ($.isFunction(conf[name])) {
+				$(self).bind(name, conf[name]);
+			}
+
+			// API
+			self[name] = function(fn) {
+				if (fn) { $(self).bind(name, fn); }
+				return self;
+			};
+		});
+
+		// close button
+		closers = overlay.find(conf.close || ".close");
+
+		if (!closers.length && !conf.close) {
+			closers = $('<a class="close"></a>');
+			overlay.prepend(closers);
+		}
+
+		closers.click(function(e) {
+			self.close(e);
+		});
+
+		// autoload
+		if (conf.load) { self.load(); }
+
+	}
+
+	// jQuery plugin initialization
+	$.fn.overlay = function(conf) {
+
+		// already constructed --> return API
+		var el = this.data("overlay");
+		if (el) { return el; }
+
+		if ($.isFunction(conf)) {
+			conf = {onBeforeLoad: conf};
+		}
+
+		conf = $.extend(true, {}, $.tools.overlay.conf, conf);
+
+		this.each(function() {
+			el = new Overlay($(this), conf);
+			instances.push(el);
+			$(this).data("overlay", el);
+		});
+
+		return conf.api ? el: this;
+	};
+
+})(jQuery);
+
+
+/**
+ * @license
+ * jQuery Tools v1.2.6 Scrollable - New wave UI design
+ *
+ * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
+ *
+ * http://flowplayer.org/tools/scrollable.html
+ *
+ * Since: March 2008
+ * Date: 2011-10-26 11:02
+ */
+(function($) {
+
+	// static constructs
+	$.tools = $.tools || {version: 'v1.2.6'};
+
+	$.tools.scrollable = {
+
+		conf: {
+			activeClass: 'active',
+			circular: false,
+			clonedClass: 'cloned',
+			disabledClass: 'disabled',
+			easing: 'swing',
+			initialIndex: 0,
+			item: '> *',
+			items: '.items',
+			keyboard: true,
+			mousewheel: false,
+			next: '.next',
+			prev: '.prev',
+			size: 1,
+			speed: 400,
+			vertical: false,
+			touch: true,
+			wheelSpeed: 0
+		}
+	};
+
+	// get hidden element's width or height even though it's hidden
+	function dim(el, key) {
+		var v = parseInt(el.css(key), 10);
+		if (v) { return v; }
+		var s = el[0].currentStyle;
+		return s && s.width && parseInt(s.width, 10);
+	}
+
+	function find(root, query) {
+		var el = $(query);
+		return el.length < 2 ? el : root.parent().find(query);
+	}
+
+	var current;
+
+	// constructor
+	function Scrollable(root, conf) {
+
+		// current instance
+		var self = this,
+			 fire = root.add(self),
+			 itemWrap = root.children(),
+			 index = 0,
+			 vertical = conf.vertical;
+
+		if (!current) { current = self; }
+		if (itemWrap.length > 1) { itemWrap = $(conf.items, root); }
+
+
+		// in this version circular not supported when size > 1
+		if (conf.size > 1) { conf.circular = false; }
+
+		// methods
+		$.extend(self, {
+
+			getConf: function() {
+				return conf;
+			},
+
+			getIndex: function() {
+				return index;
+			},
+
+			getSize: function() {
+				return self.getItems().size();
+			},
+
+			getNaviButtons: function() {
+				return prev.add(next);
+			},
+
+			getRoot: function() {
+				return root;
+			},
+
+			getItemWrap: function() {
+				return itemWrap;
+			},
+
+			getItems: function() {
+				return itemWrap.find(conf.item).not("." + conf.clonedClass);
+			},
+
+			move: function(offset, time) {
+				return self.seekTo(index + offset, time);
+			},
+
+			next: function(time) {
+				return self.move(conf.size, time);
+			},
+
+			prev: function(time) {
+				return self.move(-conf.size, time);
+			},
+
+			begin: function(time) {
+				return self.seekTo(0, time);
+			},
+
+			end: function(time) {
+				return self.seekTo(self.getSize() -1, time);
+			},
+
+			focus: function() {
+				current = self;
+				return self;
+			},
+
+			addItem: function(item) {
+				item = $(item);
+
+				if (!conf.circular)  {
+					itemWrap.append(item);
+					next.removeClass("disabled");
+
+				} else {
+					itemWrap.children().last().before(item);
+					itemWrap.children().first().replaceWith(item.clone().addClass(conf.clonedClass));
+				}
+
+				fire.trigger("onAddItem", [item]);
+				return self;
+			},
+
+
+			/* all seeking functions depend on this */
+			seekTo: function(i, time, fn) {
+
+				// ensure numeric index
+				if (!i.jquery) { i *= 1; }
+
+				// avoid seeking from end clone to the beginning
+				if (conf.circular && i === 0 && index == -1 && time !== 0) { return self; }
+
+				// check that index is sane
+				if (!conf.circular && i < 0 || i > self.getSize() || i < -1) { return self; }
+
+				var item = i;
+
+				if (i.jquery) {
+					i = self.getItems().index(i);
+
+				} else {
+					item = self.getItems().eq(i);
+				}
+
+				// onBeforeSeek
+				var e = $.Event("onBeforeSeek");
+				if (!fn) {
+					fire.trigger(e, [i, time]);
+					if (e.isDefaultPrevented() || !item.length) { return self; }
+				}
+
+				var props = vertical ? {top: -item.position().top} : {left: -item.position().left};
+
+				index = i;
+				current = self;
+				if (time === undefined) { time = conf.speed; }
+
+				itemWrap.animate(props, time, conf.easing, fn || function() {
+					fire.trigger("onSeek", [i]);
+				});
+
+				return self;
+			}
+
+		});
+
+		// callbacks
+		$.each(['onBeforeSeek', 'onSeek', 'onAddItem'], function(i, name) {
+
+			// configuration
+			if ($.isFunction(conf[name])) {
+				$(self).bind(name, conf[name]);
+			}
+
+			self[name] = function(fn) {
+				if (fn) { $(self).bind(name, fn); }
+				return self;
+			};
+		});
+
+		// circular loop
+		if (conf.circular) {
+
+			var cloned1 = self.getItems().slice(-1).clone().prependTo(itemWrap),
+				 cloned2 = self.getItems().eq(1).clone().appendTo(itemWrap);
+
+			cloned1.add(cloned2).addClass(conf.clonedClass);
+
+			self.onBeforeSeek(function(e, i, time) {
+
+				if (e.isDefaultPrevented()) { return; }
+
+				/*
+					1. animate to the clone without event triggering
+					2. seek to correct position with 0 speed
+				*/
+				if (i == -1) {
+					self.seekTo(cloned1, time, function()  {
+						self.end(0);
+					});
+					return e.preventDefault();
+
+				} else if (i == self.getSize()) {
+					self.seekTo(cloned2, time, function()  {
+						self.begin(0);
+					});
+				}
+
+			});
+
+			// seek over the cloned item
+
+			// if the scrollable is hidden the calculations for seekTo position
+			// will be incorrect (eg, if the scrollable is inside an overlay).
+			// ensure the elements are shown, calculate the correct position,
+			// then re-hide the elements. This must be done synchronously to
+			// prevent the hidden elements being shown to the user.
+
+			// See: https://github.com/jquerytools/jquerytools/issues#issue/87
+
+			var hidden_parents = root.parents().add(root).filter(function () {
+				if ($(this).css('display') === 'none') {
+					return true;
+				}
+			});
+			if (hidden_parents.length) {
+				hidden_parents.show();
+				self.seekTo(0, 0, function() {});
+				hidden_parents.hide();
+			}
+			else {
+				self.seekTo(0, 0, function() {});
+			}
+
+		}
+
+		// next/prev buttons
+		var prev = find(root, conf.prev).click(function(e) { e.stopPropagation(); self.prev(); }),
+			 next = find(root, conf.next).click(function(e) { e.stopPropagation(); self.next(); });
+
+		if (!conf.circular) {
+			self.onBeforeSeek(function(e, i) {
+				setTimeout(function() {
+					if (!e.isDefaultPrevented()) {
+						prev.toggleClass(conf.disabledClass, i <= 0);
+						next.toggleClass(conf.disabledClass, i >= self.getSize() -1);
+					}
+				}, 1);
+			});
+
+			if (!conf.initialIndex) {
+				prev.addClass(conf.disabledClass);
+			}
+		}
+
+		if (self.getSize() < 2) {
+			prev.add(next).addClass(conf.disabledClass);
+		}
+
+		// mousewheel support
+		if (conf.mousewheel && $.fn.mousewheel) {
+			root.mousewheel(function(e, delta)  {
+				if (conf.mousewheel) {
+					self.move(delta < 0 ? 1 : -1, conf.wheelSpeed || 50);
+					return false;
+				}
+			});
+		}
+
+		// touch event
+		if (conf.touch) {
+			var touch = {};
+
+			itemWrap[0].ontouchstart = function(e) {
+				var t = e.touches[0];
+				touch.x = t.clientX;
+				touch.y = t.clientY;
+			};
+
+			itemWrap[0].ontouchmove = function(e) {
+
+				// only deal with one finger
+				if (e.touches.length == 1 && !itemWrap.is(":animated")) {
+					var t = e.touches[0],
+						 deltaX = touch.x - t.clientX,
+						 deltaY = touch.y - t.clientY;
+
+					self[vertical && deltaY > 0 || !vertical && deltaX > 0 ? 'next' : 'prev']();
+					e.preventDefault();
+				}
+			};
+		}
+
+		if (conf.keyboard)  {
+
+			$(document).bind("keydown.scrollable", function(evt) {
+
+				// skip certain conditions
+				if (!conf.keyboard || evt.altKey || evt.ctrlKey || evt.metaKey || $(evt.target).is(":input")) {
+					return;
+				}
+
+				// does this instance have focus?
+				if (conf.keyboard != 'static' && current != self) { return; }
+
+				var key = evt.keyCode;
+
+				if (vertical && (key == 38 || key == 40)) {
+					self.move(key == 38 ? -1 : 1);
+					return evt.preventDefault();
+				}
+
+				if (!vertical && (key == 37 || key == 39)) {
+					self.move(key == 37 ? -1 : 1);
+					return evt.preventDefault();
+				}
+
+			});
+		}
+
+		// initial index
+		if (conf.initialIndex) {
+			self.seekTo(conf.initialIndex, 0, function() {});
+		}
+	}
+
+
+	// jQuery plugin implementation
+	$.fn.scrollable = function(conf) {
+
+		// already constructed --> return API
+		var el = this.data("scrollable");
+		if (el) { return el; }
+
+		conf = $.extend({}, $.tools.scrollable.conf, conf);
+
+		this.each(function() {
+			el = new Scrollable($(this), conf);
+			$(this).data("scrollable", el);
+		});
+
+		return conf.api ? el: this;
+
+	};
+
+
+})(jQuery);
+
+/**
+ * @license
+ * jQuery Tools v1.2.6 Tabs- The basics of UI design.
+ *
+ * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
+ *
+ * http://flowplayer.org/tools/tabs/
+ *
+ * Since: November 2008
+ * Date: 2011-10-26 11:02
+ */
+(function($) {
+
+	// static constructs
+	$.tools = $.tools || {version: 'v1.2.6'};
+
+	$.tools.tabs = {
+
+		conf: {
+			tabs: 'a',
+			current: 'current',
+			onBeforeClick: null,
+			onClick: null,
+			effect: 'default',
+			initialIndex: 0,
+			event: 'click',
+			rotate: false,
+
+      // slide effect
+      slideUpSpeed: 400,
+      slideDownSpeed: 400,
+
+			// 1.2
+			history: false
+		},
+
+		addEffect: function(name, fn) {
+			effects[name] = fn;
+		}
+
+	};
+
+	var effects = {
+
+		// simple "toggle" effect
+		'default': function(i, done) {
+			this.getPanes().hide().eq(i).show();
+			done.call();
+		},
+
+		/*
+			configuration:
+				- fadeOutSpeed (positive value does "crossfading")
+				- fadeInSpeed
+		*/
+		fade: function(i, done) {
+
+			var conf = this.getConf(),
+				 speed = conf.fadeOutSpeed,
+				 panes = this.getPanes();
+
+			if (speed) {
+				panes.fadeOut(speed);
+			} else {
+				panes.hide();
+			}
+
+			panes.eq(i).fadeIn(conf.fadeInSpeed, done);
+		},
+
+		// for basic accordions
+		slide: function(i, done) {
+		  var conf = this.getConf();
+
+			this.getPanes().slideUp(conf.slideUpSpeed);
+			this.getPanes().eq(i).slideDown(conf.slideDownSpeed, done);
+		},
+
+		/**
+		 * AJAX effect
+		 */
+		ajax: function(i, done)  {
+			this.getPanes().eq(0).load(this.getTabs().eq(i).attr("href"), done);
+		}
+	};
+
+	/**
+	 * Horizontal accordion
+	 *
+	 * @deprecated will be replaced with a more robust implementation
+	*/
+
+	var
+	  /**
+	  *   @type {Boolean}
+	  *
+	  *   Mutex to control horizontal animation
+	  *   Disables clicking of tabs while animating
+	  *   They mess up otherwise as currentPane gets set *after* animation is done
+	  */
+	  animating,
+	  /**
+	  *   @type {Number}
+	  *
+	  *   Initial width of tab panes
+	  */
+	  w;
+
+	$.tools.tabs.addEffect("horizontal", function(i, done) {
+	  if (animating) return;    // don't allow other animations
+
+	  var nextPane = this.getPanes().eq(i),
+	      currentPane = this.getCurrentPane();
+
+		// store original width of a pane into memory
+		w || ( w = this.getPanes().eq(0).width() );
+		animating = true;
+
+		nextPane.show(); // hidden by default
+
+		// animate current pane's width to zero
+    // animate next pane's width at the same time for smooth animation
+    currentPane.animate({width: 0}, {
+      step: function(now){
+        nextPane.css("width", w-now);
+      },
+      complete: function(){
+        $(this).hide();
+        done.call();
+        animating = false;
+     }
+    });
+    // Dirty hack...  onLoad, currentPant will be empty and nextPane will be the first pane
+    // If this is the case, manually run callback since the animation never occured, and reset animating
+    if (!currentPane.length){
+      done.call();
+      animating = false;
+    }
+	});
+
+
+	function Tabs(root, paneSelector, conf) {
+
+		var self = this,
+			 trigger = root.add(this),
+			 tabs = root.find(conf.tabs),
+			 panes = paneSelector.jquery ? paneSelector : root.children(paneSelector),
+			 current;
+
+
+		// make sure tabs and panes are found
+		if (!tabs.length)  { tabs = root.children(); }
+		if (!panes.length) { panes = root.parent().find(paneSelector); }
+		if (!panes.length) { panes = $(paneSelector); }
+
+
+		// public methods
+		$.extend(this, {
+			click: function(i, e) {
+
+				var tab = tabs.eq(i);
+
+				if (typeof i == 'string' && i.replace("#", "")) {
+					tab = tabs.filter("[href*=" + i.replace("#", "") + "]");
+					i = Math.max(tabs.index(tab), 0);
+				}
+
+				if (conf.rotate) {
+					var last = tabs.length -1;
+					if (i < 0) { return self.click(last, e); }
+					if (i > last) { return self.click(0, e); }
+				}
+
+				if (!tab.length) {
+					if (current >= 0) { return self; }
+					i = conf.initialIndex;
+					tab = tabs.eq(i);
+				}
+
+				// current tab is being clicked
+				if (i === current) { return self; }
+
+				// possibility to cancel click action
+				e = e || $.Event();
+				e.type = "onBeforeClick";
+				trigger.trigger(e, [i]);
+				if (e.isDefaultPrevented()) { return; }
+
+				// call the effect
+				effects[conf.effect].call(self, i, function() {
+					current = i;
+					// onClick callback
+					e.type = "onClick";
+					trigger.trigger(e, [i]);
+				});
+
+				// default behaviour
+				tabs.removeClass(conf.current);
+				tab.addClass(conf.current);
+
+				return self;
+			},
+
+			getConf: function() {
+				return conf;
+			},
+
+			getTabs: function() {
+				return tabs;
+			},
+
+			getPanes: function() {
+				return panes;
+			},
+
+			getCurrentPane: function() {
+				return panes.eq(current);
+			},
+
+			getCurrentTab: function() {
+				return tabs.eq(current);
+			},
+
+			getIndex: function() {
+				return current;
+			},
+
+			next: function() {
+				return self.click(current + 1);
+			},
+
+			prev: function() {
+				return self.click(current - 1);
+			},
+
+			destroy: function() {
+				tabs.unbind(conf.event).removeClass(conf.current);
+				panes.find("a[href^=#]").unbind("click.T");
+				return self;
+			}
+
+		});
+
+		// callbacks
+		$.each("onBeforeClick,onClick".split(","), function(i, name) {
+
+			// configuration
+			if ($.isFunction(conf[name])) {
+				$(self).bind(name, conf[name]);
+			}
+
+			// API
+			self[name] = function(fn) {
+				if (fn) { $(self).bind(name, fn); }
+				return self;
+			};
+		});
+
+
+		if (conf.history && $.fn.history) {
+			$.tools.history.init(tabs);
+			conf.event = 'history';
+		}
+
+		// setup click actions for each tab
+		tabs.each(function(i) {
+			$(this).bind(conf.event, function(e) {
+				self.click(i, e);
+				return e.preventDefault();
+			});
+		});
+
+		// cross tab anchor link
+		panes.find("a[href^=#]").bind("click.T", function(e) {
+			self.click($(this).attr("href"), e);
+		});
+
+		// open initial tab
+		if (location.hash && conf.tabs == "a" && root.find("[href=" +location.hash+ "]").length) {
+			self.click(location.hash);
+
+		} else {
+			if (conf.initialIndex === 0 || conf.initialIndex > 0) {
+				self.click(conf.initialIndex);
+			}
+		}
+
+	}
+
+
+	// jQuery plugin implementation
+	$.fn.tabs = function(paneSelector, conf) {
+
+		// return existing instance
+		var el = this.data("tabs");
+		if (el) {
+			el.destroy();
+			this.removeData("tabs");
+		}
+
+		if ($.isFunction(conf)) {
+			conf = {onBeforeClick: conf};
+		}
+
+		// setup conf
+		conf = $.extend({}, $.tools.tabs.conf, conf);
+
+
+		this.each(function() {
+			el = new Tabs($(this), paneSelector, conf);
+			$(this).data("tabs", el);
+		});
+
+		return conf.api ? el: this;
+	};
+
+}) (jQuery);
+
+
+
+/**
+ * @license
+ * jQuery Tools v1.2.6 / Expose - Dim the lights
+ *
+ * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
+ *
+ * http://flowplayer.org/tools/toolbox/expose.html
+ *
+ * Since: Mar 2010
+ * Date: 2011-10-26 11:02
+ */
+(function($) {
+
+	// static constructs
+	$.tools = $.tools || {version: 'v1.2.6'};
+
+	var tool;
+
+	tool = $.tools.expose = {
+
+		conf: {
+			maskId: 'exposeMask',
+			loadSpeed: 'slow',
+			closeSpeed: 'fast',
+			closeOnClick: true,
+			closeOnEsc: true,
+
+			// css settings
+			zIndex: 9998,
+			opacity: 0.8,
+			startOpacity: 0,
+			color: '#fff',
+
+			// callbacks
+			onLoad: null,
+			onClose: null
+		}
+	};
+
+	/* one of the greatest headaches in the tool. finally made it */
+	function viewport() {
+
+		// the horror case
+		if ($.browser.msie) {
+
+			// if there are no scrollbars then use window.height
+			var d = $(document).height(), w = $(window).height();
+
+			return [
+				window.innerWidth || 							// ie7+
+				document.documentElement.clientWidth || 	// ie6
+				document.body.clientWidth, 					// ie6 quirks mode
+				d - w < 20 ? w : d
+			];
+		}
+
+		// other well behaving browsers
+		return [$(document).width(), $(document).height()];
+	}
+
+	function call(fn) {
+		if (fn) { return fn.call($.mask); }
+	}
+
+	var mask, exposed, loaded, config, overlayIndex;
+
+
+	$.mask = {
+
+		load: function(conf, els) {
+
+			// already loaded ?
+			if (loaded) { return this; }
+
+			// configuration
+			if (typeof conf == 'string') {
+				conf = {color: conf};
+			}
+
+			// use latest config
+			conf = conf || config;
+
+			config = conf = $.extend($.extend({}, tool.conf), conf);
+
+			// get the mask
+			mask = $("#" + conf.maskId);
+
+			// or create it
+			if (!mask.length) {
+				mask = $('<div/>').attr("id", conf.maskId);
+				$("body").append(mask);
+			}
+
+			// set position and dimensions
+			var size = viewport();
+
+			mask.css({
+				position:'absolute',
+				top: 0,
+				left: 0,
+				width: size[0],
+				height: size[1],
+				display: 'none',
+				opacity: conf.startOpacity,
+				zIndex: conf.zIndex
+			});
+
+			if (conf.color) {
+				mask.css("backgroundColor", conf.color);
+			}
+
+			// onBeforeLoad
+			if (call(conf.onBeforeLoad) === false) {
+				return this;
+			}
+
+			// esc button
+			if (conf.closeOnEsc) {
+				$(document).bind("keydown.mask", function(e) {
+					if (e.keyCode == 27) {
+						$.mask.close(e);
+					}
+				});
+			}
+
+			// mask click closes
+			if (conf.closeOnClick) {
+				mask.bind("click.mask", function(e)  {
+					$.mask.close(e);
+				});
+			}
+
+			// resize mask when window is resized
+			$(window).bind("resize.mask", function() {
+				$.mask.fit();
+			});
+
+			// exposed elements
+			if (els && els.length) {
+
+				overlayIndex = els.eq(0).css("zIndex");
+
+				// make sure element is positioned absolutely or relatively
+				$.each(els, function() {
+					var el = $(this);
+					if (!/relative|absolute|fixed/i.test(el.css("position"))) {
+						el.css("position", "relative");
+					}
+				});
+
+				// make elements sit on top of the mask
+				exposed = els.css({ zIndex: Math.max(conf.zIndex + 1, overlayIndex == 'auto' ? 0 : overlayIndex)});
+			}
+
+			// reveal mask
+			mask.css({display: 'block'}).fadeTo(conf.loadSpeed, conf.opacity, function() {
+				$.mask.fit();
+				call(conf.onLoad);
+				loaded = "full";
+			});
+
+			loaded = true;
+			return this;
+		},
+
+		close: function() {
+			if (loaded) {
+
+				// onBeforeClose
+				if (call(config.onBeforeClose) === false) { return this; }
+
+				mask.fadeOut(config.closeSpeed, function()  {
+					call(config.onClose);
+					if (exposed) {
+						exposed.css({zIndex: overlayIndex});
+					}
+					loaded = false;
+				});
+
+				// unbind various event listeners
+				$(document).unbind("keydown.mask");
+				mask.unbind("click.mask");
+				$(window).unbind("resize.mask");
+			}
+
+			return this;
+		},
+
+		fit: function() {
+			if (loaded) {
+				var size = viewport();
+				mask.css({width: size[0], height: size[1]});
+			}
+		},
+
+		getMask: function() {
+			return mask;
+		},
+
+		isLoaded: function(fully) {
+			return fully ? loaded == 'full' : loaded;
+		},
+
+		getConf: function() {
+			return config;
+		},
+
+		getExposed: function() {
+			return exposed;
+		}
+	};
+
+	$.fn.mask = function(conf) {
+		$.mask.load(conf);
+		return this;
+	};
+
+	$.fn.expose = function(conf) {
+		$.mask.load(conf, this);
+		return this;
+	};
+
+
+})(jQuery);
+
+/**
+ * @license
+ * jQuery Tools v1.2.6 History "Back button for AJAX apps"
+ *
+ * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
+ *
+ * http://flowplayer.org/tools/toolbox/history.html
+ *
+ * Since: Mar 2010
+ * Date: 2011-10-26 11:02
+ */
+(function($) {
+
+	var hash, iframe, links, inited;
+
+	$.tools = $.tools || {version: 'v1.2.6'};
+
+	$.tools.history = {
+
+		init: function(els) {
+
+			if (inited) { return; }
+
+			// IE
+			if ($.browser.msie && $.browser.version < '8') {
+
+				// create iframe that is constantly checked for hash changes
+				if (!iframe) {
+					iframe = $("<iframe/>").attr("src", "javascript:false;").hide().get(0);
+					$("body").prepend(iframe);
+
+					setInterval(function() {
+						var idoc = iframe.contentWindow.document,
+							 h = idoc.location.hash;
+
+						if (hash !== h) {
+							$(window).trigger("hash", h);
+						}
+					}, 100);
+
+					setIframeLocation(location.hash || '#');
+				}
+
+
+			// other browsers scans for location.hash changes directly without iframe hack
+			} else {
+				setInterval(function() {
+					var h = location.hash;
+					if (h !== hash) {
+						$(window).trigger("hash", h);
+					}
+				}, 100);
+			}
+
+			links = !links ? els : links.add(els);
+
+			els.click(function(e) {
+				var href = $(this).attr("href");
+				if (iframe) { setIframeLocation(href); }
+
+				// handle non-anchor links
+				if (href.slice(0, 1) != "#") {
+					location.href = "#" + href;
+					return e.preventDefault();
+				}
+
+			});
+
+			inited = true;
+		}
+	};
+
+
+	function setIframeLocation(h) {
+		if (h) {
+			var doc = iframe.contentWindow.document;
+			doc.open().close();
+			doc.location.hash = h;
+		}
+	}
+
+	// global histroy change listener
+	$(window).bind("hash", function(e, h)  {
+		if (h) {
+			links.filter(function() {
+			  var href = $(this).attr("href");
+			  return href == h || href == h.replace("#", "");
+			}).trigger("history", [h]);
+		} else {
+			links.eq(0).trigger("history", [h]);
+		}
+
+		hash = h;
+
+	});
+
+
+	// jQuery plugin implementation
+	$.fn.history = function(fn) {
+
+		$.tools.history.init(this);
+
+		// return jQuery
+		return this.bind("history", fn);
+	};
+
+})(jQuery);
+
+
+/**
+ * @license
+ * jQuery Tools v1.2.6 Tooltip - UI essentials
+ *
+ * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
+ *
+ * http://flowplayer.org/tools/tooltip/
+ *
+ * Since: November 2008
+ * Date: 2011-10-26 11:02
+ */
+(function($) {
+	// static constructs
+	$.tools = $.tools || {version: 'v1.2.6'};
+
+	$.tools.tooltip = {
+
+		conf: {
+
+			// default effect variables
+			effect: 'toggle',
+			fadeOutSpeed: "fast",
+			predelay: 0,
+			delay: 30,
+			opacity: 1,
+			tip: 0,
+            fadeIE: false, // enables fade effect in IE
+
+			// 'top', 'bottom', 'right', 'left', 'center'
+			position: ['top', 'center'],
+			offset: [0, 0],
+			relative: false,
+			cancelDefault: true,
+
+			// type to event mapping
+			events: {
+				def: 			"mouseenter,mouseleave",
+				input: 		"focus,blur",
+				widget:		"focus mouseenter,blur mouseleave",
+				tooltip:		"mouseenter,mouseleave"
+			},
+
+			// 1.2
+			layout: '<div/>',
+			tipClass: 'tooltip'
+		},
+
+		addEffect: function(name, loadFn, hideFn) {
+			effects[name] = [loadFn, hideFn];
+		}
+	};
+
+
+	var effects = {
+		toggle: [
+			function(done) {
+				var conf = this.getConf(), tip = this.getTip(), o = conf.opacity;
+				if (o < 1) { tip.css({opacity: o}); }
+				tip.show();
+				done.call();
+			},
+
+			function(done) {
+				this.getTip().hide();
+				done.call();
+			}
+		],
+
+		fade: [
+			function(done) {
+				var conf = this.getConf();
+				if (!$.browser.msie || conf.fadeIE) {
+					this.getTip().fadeTo(conf.fadeInSpeed, conf.opacity, done);
+				}
+				else {
+					this.getTip().show();
+					done();
+				}
+			},
+			function(done) {
+				var conf = this.getConf();
+				if (!$.browser.msie || conf.fadeIE) {
+					this.getTip().fadeOut(conf.fadeOutSpeed, done);
+				}
+				else {
+					this.getTip().hide();
+					done();
+				}
+			}
+		]
+	};
+
+
+	/* calculate tip position relative to the trigger */
+	function getPosition(trigger, tip, conf) {
+
+
+		// get origin top/left position
+		var top = conf.relative ? trigger.position().top : trigger.offset().top,
+			 left = conf.relative ? trigger.position().left : trigger.offset().left,
+			 pos = conf.position[0];
+
+		top  -= tip.outerHeight() - conf.offset[0];
+		left += trigger.outerWidth() + conf.offset[1];
+
+		// iPad position fix
+		if (/iPad/i.test(navigator.userAgent)) {
+			top -= $(window).scrollTop();
+		}
+
+		// adjust Y
+		var height = tip.outerHeight() + trigger.outerHeight();
+		if (pos == 'center') 	{ top += height / 2; }
+		if (pos == 'bottom') 	{ top += height; }
+
+
+		// adjust X
+		pos = conf.position[1];
+		var width = tip.outerWidth() + trigger.outerWidth();
+		if (pos == 'center') 	{ left -= width / 2; }
+		if (pos == 'left')   	{ left -= width; }
+
+		return {top: top, left: left};
+	}
+
+
+
+	function Tooltip(trigger, conf) {
+
+		var self = this,
+			 fire = trigger.add(self),
+			 tip,
+			 timer = 0,
+			 pretimer = 0,
+			 title = trigger.attr("title"),
+			 tipAttr = trigger.attr("data-tooltip"),
+			 effect = effects[conf.effect],
+			 shown,
+
+			 // get show/hide configuration
+			 isInput = trigger.is(":input"),
+			 isWidget = isInput && trigger.is(":checkbox, :radio, select, :button, :submit"),
+			 type = trigger.attr("type"),
+			 evt = conf.events[type] || conf.events[isInput ? (isWidget ? 'widget' : 'input') : 'def'];
+
+
+		// check that configuration is sane
+		if (!effect) { throw "Nonexistent effect \"" + conf.effect + "\""; }
+
+		evt = evt.split(/,\s*/);
+		if (evt.length != 2) { throw "Tooltip: bad events configuration for " + type; }
+
+
+		// trigger --> show
+		trigger.bind(evt[0], function(e) {
+
+			clearTimeout(timer);
+			if (conf.predelay) {
+				pretimer = setTimeout(function() { self.show(e); }, conf.predelay);
+
+			} else {
+				self.show(e);
+			}
+
+		// trigger --> hide
+		}).bind(evt[1], function(e)  {
+			clearTimeout(pretimer);
+			if (conf.delay)  {
+				timer = setTimeout(function() { self.hide(e); }, conf.delay);
+
+			} else {
+				self.hide(e);
+			}
+
+		});
+
+
+		// remove default title
+		if (title && conf.cancelDefault) {
+			trigger.removeAttr("title");
+			trigger.data("title", title);
+		}
+
+		$.extend(self, {
+
+			show: function(e) {
+
+				// tip not initialized yet
+				if (!tip) {
+
+					// data-tooltip
+					if (tipAttr) {
+						tip = $(tipAttr);
+
+					// single tip element for all
+					} else if (conf.tip) {
+						tip = $(conf.tip).eq(0);
+
+					// autogenerated tooltip
+					} else if (title) {
+						tip = $(conf.layout).addClass(conf.tipClass).appendTo(document.body)
+							.hide().append(title);
+
+					// manual tooltip
+					} else {
+						tip = trigger.next();
+						if (!tip.length) { tip = trigger.parent().next(); }
+					}
+
+					if (!tip.length) { throw "Cannot find tooltip for " + trigger;	}
+				}
+
+			 	if (self.isShown()) { return self; }
+
+			 	// stop previous animation
+			 	tip.stop(true, true);
+
+				// get position
+				var pos = getPosition(trigger, tip, conf);
+
+				// restore title for single tooltip element
+				if (conf.tip) {
+					tip.html(trigger.data("title"));
+				}
+
+				// onBeforeShow
+				e = $.Event();
+				e.type = "onBeforeShow";
+				fire.trigger(e, [pos]);
+				if (e.isDefaultPrevented()) { return self; }
+
+
+				// onBeforeShow may have altered the configuration
+				pos = getPosition(trigger, tip, conf);
+
+				// set position
+				tip.css({position:'absolute', top: pos.top, left: pos.left});
+
+				shown = true;
+
+				// invoke effect
+				effect[0].call(self, function() {
+					e.type = "onShow";
+					shown = 'full';
+					fire.trigger(e);
+				});
+
+
+				// tooltip events
+				var event = conf.events.tooltip.split(/,\s*/);
+
+				if (!tip.data("__set")) {
+
+					tip.unbind(event[0]).bind(event[0], function() {
+						clearTimeout(timer);
+						clearTimeout(pretimer);
+					});
+
+					if (event[1] && !trigger.is("input:not(:checkbox, :radio), textarea")) {
+						tip.unbind(event[1]).bind(event[1], function(e) {
+
+							// being moved to the trigger element
+							if (e.relatedTarget != trigger[0]) {
+								trigger.trigger(evt[1].split(" ")[0]);
+							}
+						});
+					}
+
+					// bind agein for if same tip element
+					if (!conf.tip) tip.data("__set", true);
+				}
+
+				return self;
+			},
+
+			hide: function(e) {
+
+				if (!tip || !self.isShown()) { return self; }
+
+				// onBeforeHide
+				e = $.Event();
+				e.type = "onBeforeHide";
+				fire.trigger(e);
+				if (e.isDefaultPrevented()) { return; }
+
+				shown = false;
+
+				effects[conf.effect][1].call(self, function() {
+					e.type = "onHide";
+					fire.trigger(e);
+				});
+
+				return self;
+			},
+
+			isShown: function(fully) {
+				return fully ? shown == 'full' : shown;
+			},
+
+			getConf: function() {
+				return conf;
+			},
+
+			getTip: function() {
+				return tip;
+			},
+
+			getTrigger: function() {
+				return trigger;
+			}
+
+		});
+
+		// callbacks
+		$.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","), function(i, name) {
+
+			// configuration
+			if ($.isFunction(conf[name])) {
+				$(self).bind(name, conf[name]);
+			}
+
+			// API
+			self[name] = function(fn) {
+				if (fn) { $(self).bind(name, fn); }
+				return self;
+			};
+		});
+
+	}
+
+
+	// jQuery plugin implementation
+	$.fn.tooltip = function(conf) {
+
+		// return existing instance
+		var api = this.data("tooltip");
+		if (api) { return api; }
+
+		conf = $.extend(true, {}, $.tools.tooltip.conf, conf);
+
+		// position can also be given as string
+		if (typeof conf.position == 'string') {
+			conf.position = conf.position.split(/,?\s/);
+		}
+
+		// install tooltip for each entry in jQuery object
+		this.each(function() {
+			api = new Tooltip($(this), conf);
+			$(this).data("tooltip", api);
+		});
+
+		return conf.api ? api: this;
+	};
+
+}) (jQuery);
diff --git a/common/static/js/jquery.tools.min.js b/common/static/js/jquery.tools.min.js
new file mode 100644
index 0000000..5e047b1
--- /dev/null
+++ b/common/static/js/jquery.tools.min.js
@@ -0,0 +1,11 @@
+/*!
+ * jQuery Tools v1.2.6 - The missing UI library for the Web
+ *
+ * overlay/overlay.js
+ *
+ * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
+ *
+ * http://flowplayer.org/tools/
+ *
+ */
+(function(a){a.tools=a.tools||{version:"v1.2.6"},a.tools.overlay={addEffect:function(a,b,d){c[a]=[b,d]},conf:{close:null,closeOnClick:!0,closeOnEsc:!0,closeSpeed:"fast",effect:"default",fixed:!a.browser.msie||a.browser.version>6,left:"center",load:!1,mask:null,oneInstance:!0,speed:"normal",target:null,top:"10%"}};var b=[],c={};a.tools.overlay.addEffect("default",function(b,c){var d=this.getConf(),e=a(window);d.fixed||(b.top+=e.scrollTop(),b.left+=e.scrollLeft()),b.position=d.fixed?"fixed":"absolute",this.getOverlay().css(b).fadeIn(d.speed,c)},function(a){this.getOverlay().fadeOut(this.getConf().closeSpeed,a)});function d(d,e){var f=this,g=d.add(f),h=a(window),i,j,k,l=a.tools.expose&&(e.mask||e.expose),m=Math.random().toString().slice(10);l&&(typeof l=="string"&&(l={color:l}),l.closeOnClick=l.closeOnEsc=!1);var n=e.target||d.attr("rel");j=n?a(n):null||d;if(!j.length)throw"Could not find Overlay: "+n;d&&d.index(j)==-1&&d.click(function(a){f.load(a);return a.preventDefault()}),
 a.extend(f,{load:function(d){if(f.isOpened())return f;var i=c[e.effect];if(!i)throw"Overlay: cannot find effect : \""+e.effect+"\"";e.oneInstance&&a.each(b,function(){this.close(d)}),d=d||a.Event(),d.type="onBeforeLoad",g.trigger(d);if(d.isDefaultPrevented())return f;k=!0,l&&a(j).expose(l);var n=e.top,o=e.left,p=j.outerWidth({margin:!0}),q=j.outerHeight({margin:!0});typeof n=="string"&&(n=n=="center"?Math.max((h.height()-q)/2,0):parseInt(n,10)/100*h.height()),o=="center"&&(o=Math.max((h.width()-p)/2,0)),i[0].call(f,{top:n,left:o},function(){k&&(d.type="onLoad",g.trigger(d))}),l&&e.closeOnClick&&a.mask.getMask().one("click",f.close),e.closeOnClick&&a(document).bind("click."+m,function(b){a(b.target).parents(j).length||f.close(b)}),e.closeOnEsc&&a(document).bind("keydown."+m,function(a){a.keyCode==27&&f.close(a)});return f},close:function(b){if(!f.isOpened())return f;b=b||a.Event(),b.type="onBeforeClose",g.trigger(b);if(!b.isDefaultPrevented()){k=!1,c[e.effect][1].call(f,funct
 ion(){b.type="onClose",g.trigger(b)}),a(document).unbind("click."+m).unbind("keydown."+m),l&&a.mask.close();return f}},getOverlay:function(){return j},getTrigger:function(){return d},getClosers:function(){return i},isOpened:function(){return k},getConf:function(){return e}}),a.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(b,c){a.isFunction(e[c])&&a(f).bind(c,e[c]),f[c]=function(b){b&&a(f).bind(c,b);return f}}),i=j.find(e.close||".close"),!i.length&&!e.close&&(i=a("<a class=\"close\"></a>"),j.prepend(i)),i.click(function(a){f.close(a)}),e.load&&f.load()}a.fn.overlay=function(c){var e=this.data("overlay");if(e)return e;a.isFunction(c)&&(c={onBeforeLoad:c}),c=a.extend(!0,{},a.tools.overlay.conf,c),this.each(function(){e=new d(a(this),c),b.push(e),a(this).data("overlay",e)});return c.api?e:this}})(jQuery);
diff --git a/common/static/js/main.js b/common/static/js/main.js
new file mode 100644
index 0000000..d44e1ad
--- /dev/null
+++ b/common/static/js/main.js
@@ -0,0 +1,30 @@
+// ***
+// This function shows or hides all modules in a release that are
+// 100% translated
+// ***
+function showHideCompleted() {
+    var regex = /complete$/i;
+
+    var tbls = document.getElementsByName("stats-table");
+    for (var tb=0; tb < tbls.length; tb++) {
+        var translations = tbls[tb].getElementsByTagName("tr");
+
+        for(var i=0;i<translations.length;i++) {
+            if ( regex.exec(translations[i].id) ) {
+                if ( translations[i].style.display != 'none' ) {
+                    translations[i].style.display = 'none';
+                }
+                else {
+                    translations[i].style.display = '';
+                }
+            }
+        }
+    }
+
+    var hide = document.getElementById("hide");
+    var show = document.getElementById("show");
+
+    hide.style.display = (hide.style.display != 'none' ? 'none' : '' );
+    show.style.display = (show.style.display != 'none' ? 'none' : '' );
+    return false;
+}
diff --git a/common/static/js/overlayhelpers.js b/common/static/js/overlayhelpers.js
new file mode 100644
index 0000000..0137d5f
--- /dev/null
+++ b/common/static/js/overlayhelpers.js
@@ -0,0 +1,595 @@
+/*****************
+
+   jQuery Tools overlay helpers.
+
+   Copyright  2010, The Plone Foundation
+   Licensed under the GPL, see LICENSE.txt for details.
+
+*****************/
+
+/*jslint browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, newcap: true, immed: true, regexp: false, white:true */
+/*global jQuery, ajax_noresponse_message, window */
+
+// Name space object for pipbox
+var pb = {spinner: {}, overlay_counter: 1};
+
+jQuery.tools.overlay.conf.oneInstance = false;
+
+(function($) {
+    // override jqt default effect to take account of position
+    // of parent elements
+    jQuery.tools.overlay.addEffect('default',
+        function(pos, onLoad) {
+            var conf = this.getConf(),
+                 w = $(window),
+                 ovl = this.getOverlay(),
+                 op = ovl.parent().offsetParent().offset();
+
+            if (!conf.fixed)  {
+                pos.top += w.scrollTop() - op.top;
+                pos.left += w.scrollLeft() - op.left;
+            }
+
+            pos.position = conf.fixed ? 'fixed' : 'absolute';
+            ovl.css(pos).fadeIn(conf.speed, onLoad);
+
+        }, function(onClose) {
+            this.getOverlay().fadeOut(this.getConf().closeSpeed, onClose);
+        }
+    );
+
+    pb.spinner.show = function () {
+        $('body').css('cursor', 'wait');
+    };
+    pb.spinner.hide = function () {
+        $('body').css('cursor', '');
+    };
+}) (jQuery);
+
+
+
+jQuery(function ($) {
+
+    /******
+        $.fn.prepOverlay jQuery plugin to inject overlay target into DOM and
+        annotate it with the data we'll need in order to display it.
+    ******/
+    $.fn.prepOverlay = function (pba) {
+        return this.each(function () {
+            var o, pbo, config, onBeforeLoad, onLoad, src, parts;
+
+            o = $(this);
+
+            // copy options so that it's not just a reference
+            // to the parameter.
+            pbo = $.extend(true, {'width':'60%'}, pba);
+
+            // set overlay configuration
+            config = pbo.config || {};
+
+            // set onBeforeLoad handler
+            onBeforeLoad = pb[pbo.subtype];
+            if (onBeforeLoad) {
+                config.onBeforeLoad = onBeforeLoad;
+            }
+            onLoad = config.onLoad;
+            config.onLoad = function () {
+                if (onLoad) {
+                    onLoad.apply(this, arguments);
+                }
+                pb.fi_focus(this.getOverlay());
+            };
+
+            // be promiscuous, pick up the url from
+            // href, src or action attributes
+            src = o.attr('href') || o.attr('src') || o.attr('action');
+
+            // translate url with config specifications
+            if (pbo.urlmatch) {
+                src = src.replace(new RegExp(pbo.urlmatch), pbo.urlreplace);
+            }
+
+            if (pbo.subtype === 'inline') {
+                // we're going to let tools' overlay do all the real
+                // work. Just get the markers in place.
+                src = src.replace(/^.+#/, '#');
+                $("[id='" + src.replace('#', '') + "']")
+                    .addClass('overlay');
+                o.removeAttr('href').attr('rel', src);
+                // use overlay on the source (clickable) element
+                o.overlay();
+            } else {
+                // save various bits of information from the pbo options,
+                // and enable the overlay.
+
+                // this is not inline, so in one fashion or another
+                // we'll be loading it via the beforeLoad callback.
+                // create a unique id for a target element
+                pbo.nt = 'pb_' + pb.overlay_counter;
+                pb.overlay_counter += 1;
+
+                pbo.selector = pbo.filter || pbo.selector;
+                if (!pbo.selector) {
+                    // see if one's been supplied in the src
+                    parts = src.split(' ');
+                    src = parts.shift();
+                    pbo.selector = parts.join(' ');
+                }
+
+                pbo.src = src;
+                pbo.config = config;
+                pbo.source = o;
+
+                // remove any existing overlay and overlay handler
+                pb.remove_overlay(o);
+
+                // save options on trigger element
+                o.data('pbo', pbo);
+
+                // mark the source with a rel attribute so we can find
+                // the overlay, and a special class for styling
+                o.attr('rel', '#' + pbo.nt);
+                o.addClass('link-overlay');
+
+                // for some subtypes, we're setting click handlers
+                // and attaching overlay to the target element. That's
+                // so we'll know the dimensions early.
+                // Others, like iframe, just use overlay.
+                switch (pbo.subtype) {
+                case 'image':
+                    o.click(pb.image_click);
+                    break;
+                case 'ajax':
+                    o.click(pb.ajax_click);
+                    break;
+                case 'iframe':
+                    pb.create_content_div(pbo);
+                    o.overlay(config);
+                    break;
+                default:
+                    throw "Unsupported overlay type";
+                }
+
+                // in case the click source wasn't
+                // already a link.
+                o.css('cursor', 'pointer');
+            }
+        });
+    };
+
+
+    /******
+        pb.remove_overlay
+        Remove the overlay and handler associated with a jquery wrapped
+        trigger object
+    ******/
+    pb.remove_overlay = function (o) {
+        var old_data = o.data('pbo');
+        if (old_data) {
+            switch (old_data.subtype) {
+            case 'image':
+                o.unbind('click', pb.image_click);
+                break;
+            case 'ajax':
+                o.unbind('click', pb.ajax_click);
+                break;
+            default:
+                // it's probably the jqt overlay click handler,
+                // but we don't know the handler and are forced
+                // to do a generic unbind of click handlers.
+                o.unbind('click');
+            }
+            if (old_data.nt) {
+                $('#' + old_data.nt).remove();
+            }
+        }
+    };
+
+
+    /******
+        pb.create_content_div
+        create a div to act as an overlay; append it to
+        the body; return it
+    ******/
+    pb.create_content_div = function (pbo, trigger) {
+        var content,
+            top,
+            pbw = pbo.width;
+
+        content = $(
+            '<div id="' + pbo.nt +
+            '" class="overlay overlay-' + pbo.subtype +
+            ' ' + (pbo.cssclass || '') +
+            '"><div class="close"><span>Close</span></div></div>'
+        );
+
+        content.data('pbo', pbo);
+
+        // if a width option is specified, set it on the overlay div,
+        // computing against the window width if a % was specified.
+        if (pbw) {
+            if (pbw.indexOf('%') > 0) {
+                content.width(parseInt(pbw, 10) / 100 * $(window).width());
+            } else {
+                content.width(pbw);
+            }
+        }
+
+        // add the target element at the end of the body.
+        if (trigger) {
+            trigger.after(content);
+        } else {
+            content.appendTo($("body"));
+        }
+
+        return content;
+    };
+
+
+    /******
+        pb.image_click
+        click handler for image loads
+    ******/
+    pb.image_click = function (event) {
+        var ethis, content, api, img, el, pbo;
+
+        ethis = $(this);
+        pbo = ethis.data('pbo');
+
+        // find target container
+        content = $(ethis.attr('rel'));
+        if (!content.length) {
+            content = pb.create_content_div(pbo);
+            content.overlay(pbo.config);
+        }
+        api = content.overlay();
+
+        // is the image loaded yet?
+        if (content.find('img').length === 0) {
+            // load the image.
+            if (pbo.src) {
+                pb.spinner.show();
+
+                // create the image and stuff it
+                // into our target
+                img = new Image();
+                img.src = pbo.src;
+                el = $(img);
+                content.append(el.addClass('pb-image'));
+
+                // Now, we'll cause the overlay to
+                // load when the image is loaded.
+                el.load(function () {
+                    pb.spinner.hide();
+                    api.load();
+                });
+
+            }
+        } else {
+            api.load();
+        }
+
+        return false;
+    };
+
+
+    /******
+        pb.fi_focus
+        First-input focus inside $ selection.
+    ******/
+    pb.fi_focus = function (jqo) {
+        if (! jqo.find("form div.error :input:first").focus().length) {
+            jqo.find("form :input:visible:first").focus();
+        }
+    };
+
+
+    /******
+        pb.ajax_error_recover
+        jQuery's ajax load function does not load error responses.
+        This routine returns the cooked error response.
+    ******/
+    pb.ajax_error_recover = function (responseText, selector) {
+        var tcontent = $('<div/>')
+            .append(responseText.replace(/<script(.|\s)*?\/script>/gi, ""));
+        return selector ? tcontent.find(selector) : tcontent;
+    };
+
+
+    /******
+        pb.add_ajax_load
+        Adds a hidden ajax_load input to form
+    ******/
+    pb.add_ajax_load = function (form) {
+        if (form.find('input[name=ajax_load]').length === 0) {
+            form.prepend($('<input type="hidden" name="ajax_load" value="' +
+                (new Date().getTime()) +
+                '" />'));
+        }
+    };
+
+    /******
+        pb.prep_ajax_form
+        Set up form with ajaxForm, including success and error handlers.
+    ******/
+    pb.prep_ajax_form = function (form) {
+        var ajax_parent = form.closest('.pb-ajax'),
+            data_parent = ajax_parent.closest('.overlay-ajax'),
+            pbo = data_parent.data('pbo'),
+            formtarget = pbo.formselector,
+            closeselector = pbo.closeselector,
+            beforepost = pbo.beforepost,
+            afterpost = pbo.afterpost,
+            noform = pbo.noform,
+            api = data_parent.overlay(),
+            selector = pbo.selector,
+            options = {};
+
+        options.beforeSerialize = function () {
+            pb.spinner.show();
+        };
+
+        if (beforepost) {
+            options.beforeSubmit = function (arr, form, options) {
+                return beforepost(form, arr, options);
+            };
+        }
+        options.success = function (responseText, statusText, xhr, form) {
+            $(document).trigger('formOverlayStart', [this, responseText, statusText, xhr, form]);
+            // success comes in many forms, some of which are errors;
+            //
+
+            var el, myform, success, target;
+
+            success = statusText === "success" || statusText === "notmodified";
+
+            if (! success) {
+                // The responseText parameter is actually xhr
+                responseText = responseText.responseText;
+            }
+            // strip inline script tags
+            responseText = responseText.replace(/<script(.|\s)*?\/script>/gi, "");
+
+            // create a div containing the optionally filtered response
+            el = $('<div />').append(
+                selector ?
+                    // a lesson learned from the jQuery source: $(responseText)
+                    // will not work well unless responseText is well-formed;
+                    // appending to a div is more robust, and automagically
+                    // removes the html/head/body outer tagging.
+                    $('<div />').append(responseText).find(selector)
+                    :
+                    responseText
+                );
+
+            // afterpost callback
+            if (success && afterpost) {
+                afterpost(el, data_parent);
+            }
+
+            myform = el.find(formtarget);
+            if (success && myform.length) {
+                ajax_parent.empty().append(el);
+                pb.fi_focus(ajax_parent);
+
+                pb.add_ajax_load(myform);
+                // attach submit handler with the same options
+                myform.ajaxForm(options);
+
+                // attach close to element id'd by closeselector
+                if (closeselector) {
+                    el.find(closeselector).click(function (event) {
+                        api.close();
+                        return false;
+                    });
+                }
+                $(document).trigger('formOverlayLoadSuccess', [this, myform, api, pb, ajax_parent]);
+            } else {
+                // there's no form in our new content or there's been an error
+                if (success) {
+                    if (typeof(noform) === "function") {
+                        // get action from callback
+                        noform = noform(this);
+                    }
+                } else {
+                    noform = statusText;
+                }
+
+
+                switch (noform) {
+                case 'close':
+                    api.close();
+                    break;
+                case 'reload':
+                    api.close();
+                    pb.spinner.show();
+                    // location.reload results in a repost
+                    // dialog in some browsers; very unlikely to
+                    // be what we want.
+                    location.replace(location.href);
+                    break;
+                case 'redirect':
+                    api.close();
+                    pb.spinner.show();
+                    target = pbo.redirect;
+                    if (typeof(target) === "function") {
+                        // get target from callback
+                        target = target(this, responseText);
+                    }
+                    location.replace(target);
+                    break;
+                default:
+                    if (el.children()) {
+                        // show what we've got
+                        ajax_parent.empty().append(el);
+                    } else {
+                        api.close();
+                    }
+                }
+                $(document).trigger('formOverlayLoadFailure', [this, myform, api, pb, ajax_parent, noform]);
+            }
+            pb.spinner.hide();
+        };
+        // error and success callbacks are the same
+        options.error = options.success;
+
+        pb.add_ajax_load(form);
+        form.ajaxForm(options);
+    };
+
+
+    /******
+        pb.ajax_click
+        Click handler for ajax sources. The job of this routine
+        is to do the ajax load of the overlay element, then
+        call the JQT overlay loader.
+    ******/
+    pb.ajax_click = function (event) {
+        var ethis = $(this),
+            pbo,
+            content,
+            api,
+            src,
+            el,
+            selector,
+            formtarget,
+            closeselector,
+            sep;
+
+        e = $.Event();
+    	e.type = "beforeAjaxClickHandled";
+        $(document).trigger(e, [this, event]);
+        if (e.isDefaultPrevented()) { return; }
+
+        pbo = ethis.data('pbo');
+
+        content = pb.create_content_div(pbo, ethis);
+        // pbo.config.top = $(window).height() * 0.1 - ethis.offsetParent().offset().top;
+        content.overlay(pbo.config, ethis);
+        api = content.overlay();
+        src = pbo.src;
+        selector = pbo.selector;
+        formtarget = pbo.formselector;
+        closeselector = pbo.closeselector;
+
+        pb.spinner.show();
+
+        // prevent double click warning for this form
+        $(this).find("input.submitting").removeClass('submitting');
+
+        el = $('<div class="pb-ajax" />');
+        if (api.getConf().fixed) {
+            // don't let it be over 75% of the viewport's height
+            el.css('max-height', Math.floor($(window).height() * 0.75));
+        }
+        content.append(el);
+
+        // affix a random query argument to prevent
+        // loading from browser cache
+        sep = (src.indexOf('?') >= 0) ? '&': '?';
+        src += sep + "ajax_load=" + (new Date().getTime());
+
+        // add selector, if any
+        if (selector) {
+            src += ' ' + selector;
+        }
+
+        // set up callback to be used whenever new contents are loaded
+        // into the overlay, to prepare links and forms to stay within
+        // the overlay
+        el[0].handle_load_inside_overlay = function(responseText, errorText) {
+            var el = $(this);
+
+            if (errorText === 'error') {
+                el.append(pb.ajax_error_recover(responseText, selector));
+            } else if (!responseText.length) {
+                el.append(ajax_noresponse_message || 'No response from server.');
+            }
+
+            // a non-semantic div here will make sure we can
+            // do enough formatting.
+            el.wrapInner('<div />');
+
+            // add the submit handler if we've a formtarget
+            if (formtarget) {
+                var target = el.find(formtarget);
+                if (target.length > 0) {
+                    pb.prep_ajax_form(target);
+                }
+            }
+
+            // if a closeselector has been specified, tie it to the overlay's
+            // close method via closure
+            if (closeselector) {
+                el.find(closeselector).click(function (event) {
+                    api.close();
+                    return false;
+                });
+            }
+
+            // This may be a complex form.
+            if ($.fn.ploneTabInit) {
+                el.ploneTabInit();
+            }
+
+            // remove element on close so that it doesn't congest the DOM
+            api.onClose = function () {
+                content.remove();
+            };
+            $(document).trigger('loadInsideOverlay', [this, responseText, errorText, api]);
+        }
+
+        // and load the div
+        el.load(src, null, function (responseText, errorText) {
+            // post-process the overlay contents
+            el[0].handle_load_inside_overlay.apply(this, [responseText, errorText]);
+
+            // Now, it's all ready to display; hide the
+            // spinner and call JQT overlay load.
+            pb.spinner.hide();
+            api.load();
+
+            return true;
+        });
+
+        // don't do the default action
+        return false;
+    };
+
+
+    /******
+        pb.iframe
+        onBeforeLoad handler for iframe overlays.
+
+        Note that the spinner is handled a little differently
+        so that we can keep it displayed while the iframe's
+        content is loading.
+    ******/
+    pb.iframe = function () {
+        var content, pbo;
+
+        pb.spinner.show();
+
+        content = this.getOverlay();
+        pbo = this.getTrigger().data('pbo');
+
+        if (content.find('iframe').length === 0 && pbo.src) {
+            content.append(
+                '<iframe src="' + pbo.src + '" width="' +
+                 content.width() + '" height="' + content.height() +
+                 '" onload="pb.spinner.hide()"/>'
+            );
+        } else {
+            pb.spinner.hide();
+        }
+        return true;
+    };
+
+    // $('.newsImageContainer a')
+    //     .prepOverlay({
+    //          subtype: 'image',
+    //          urlmatch: '/image_view_fullscreen$',
+    //          urlreplace: '_preview'
+    //         });
+
+});
diff --git a/common/static/robots.txt b/common/static/robots.txt
new file mode 100644
index 0000000..75ca2e5
--- /dev/null
+++ b/common/static/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow: /vertimus/



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]