These are no longer in use because masterkey is now separate CVS project.
authorAdam Dickmeiss <adam@indexdata.dk>
Wed, 20 Jun 2007 06:51:42 +0000 (06:51 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Wed, 20 Jun 2007 06:51:42 +0000 (06:51 +0000)
18 files changed:
www/masterkey/css/styles.css [deleted file]
www/masterkey/gfx/arrow_down.gif [deleted file]
www/masterkey/gfx/arrow_right.gif [deleted file]
www/masterkey/gfx/background.gif [deleted file]
www/masterkey/gfx/button.gif [deleted file]
www/masterkey/gfx/close.gif [deleted file]
www/masterkey/gfx/logo.gif [deleted file]
www/masterkey/gfx/minus.gif [deleted file]
www/masterkey/gfx/next_active.gif [deleted file]
www/masterkey/gfx/next_inactive.gif [deleted file]
www/masterkey/gfx/plus.gif [deleted file]
www/masterkey/gfx/previous_active.gif [deleted file]
www/masterkey/gfx/previous_inactive.gif [deleted file]
www/masterkey/gfx/trailer.gif [deleted file]
www/masterkey/index.html [deleted file]
www/masterkey/js/client.js [deleted file]
www/masterkey/js/jquery.js [deleted file]
www/masterkey/js/jquery.pack.js [deleted file]

diff --git a/www/masterkey/css/styles.css b/www/masterkey/css/styles.css
deleted file mode 100755 (executable)
index 6fdfd5c..0000000
+++ /dev/null
@@ -1,478 +0,0 @@
-html {
-overflow-y: scroll;
-}
-
-html, body {
-background-color:#f0f0f9; /*#335382;*/
-color: #002863;
-font: 11px verdana, arial, sans-serif;
-}
-
-div.container {
-position: relative;
-width: 980px;
-background-color: #f0f0f9;/* changed from #ffffff; */
-color: #002863;
-margin-left: auto;
-margin-right: auto;
-height: 100%;
-}
-
-img {
-border: none;
-}
-
-strong {
-color: #31568c;
-font-weight: 600;
-}
-
-h2 {
-font-size: 11px;
-margin: 0px;
-padding-top: 3px;
-/*line-height: 13px;*/
-}
-
-select {
-border: 1px solid #7f9db9;
-}
-
-div.topbar {
-background-color: #002863;
-color: #ffffff;
-height: 85px;
-position: absolute;
-left: 0px;
-top: 0px;
-width: 100%;
-border-bottom: 3px solid #5272ab; /*change from #335382*/
-}
-
-#logo {
-position: relative;
-left: 39px;
-top: 28px;
-}
-
-div.topmenu {
-position: absolute;
-left: 245px;
-top: 53px;
-text-align: right;
-width: 573px;
-padding-top: 4px;
-border-top: 1px solid #335382;
-height: 25px;
-}
-
-div.topmenu a {
-color: #ffffff;
-font: bold 11px verdana, arial, sans-serif;
-padding-left: 41px;
-}
-
-div.bluebox {
-width: 124px;
-height: 59px;
-background-color: #31568c;
-position: absolute;
-right: 19px;
-top: 14px;
-}
-
-div.search {
-position: relative;
-border-top: 3px solid #9bb3e0; /*added*/
-top: 88px; /*change from 90 */
-left: 0px;
-width: 100%;
-height: 73px; /*change from 63 */
-background-color: #e1e5ec;
-color: #31568c;
-font-weight: bold;
-}
-
-div.search span {
-position: absolute;
-left: 74px;
-top: 28px;
-}
-
-div.search div.simple {
-position: absolute;
-left: 225px;
-top: 25px;
-}
-
-div.search div.advanced {
-position: absolute;
-right: 249px;
-top: 47px;
-text-align: right;
-}
-
-
-input.search {
-background-color: #ffffff;
-color: #000000;
-border: 1px solid #a5acb2;
-height: 17px;
-line-height: 17px;
-width: 500px;
-margin-top: -1px;
-}
-
-input.advSearch {
-background-color: #ffffff;
-color: #000000;
-border: 1px solid #a5acb2;
-height: 17px;
-line-height: 17px;
-width: 400px;
-margin-top: 5px;
-}
-
-div.main {
-width: 100%;
-background-color:#f0f0f9; /*changed from #ffffff;*/
-/*removed background-image: url(../gfx/background.gif);*/
-/*removed background-position: 0px 271px;*/
-/*removed background-repeat: repeat-y;*/
-color: #002863;
-position: relative;
-top: 105px; /*change from 108*/
-left: 0px;
-}
-
-div.clear {
-clear: both;
-}
-
-div.leftbar {
-float: left;
-background-color: #e1e5ec; /*added*/
-width: 209px;
-height: 100%;
-margin-bottom: 10px;
-margin-right: 17px;
-padding-bottom: 20px; /*added*/
-color: #000000;
-}
-
-div.head {
-padding: 0px;
-width: 100%;
-height: 25px;
-background-color: #c1cbd9;
-font-size: 11px;
-/*removed margin-bottom: 3px;*/
-color: #002863;
-}
-
-div.margin {
-padding-left: 13px;
-padding-top: 2px;
-padding-right: 13px;
-}
-
-div.content {
-float: right;
-width: 754px;
-background-color: #ffffff;
-color: #002863;
-}
-
-div.motd {
-float: right;
-width: 754px;
-}
-
-
-input.button {
-color: #ffffff;
-font: bold 11px verdana;
-vertical-align: top;
-margin-left: 8px;
-}
-
-div.search a {
-margin-left: 30px;
-color: #31568c;
-text-decoration: underline;
-font-weight: normal;
-line-height: 15px;
-}
-
-a {
-cursor: pointer;
-color: #5d82b7;
-text-decoration: none;
-}
-
-a:visited {
-color: #a0689d;
-}
-
-a:hover {
-text-decoration: underline;
-}
-
-div.clear {
-clear: both;
-}
-
-div.resultNum {
-width: 44px;
-float: left;
-line-height: 20px;
-margin-bottom: 10px;
-text-indent: 10px;
-font-size: 10px;
-font-weight: bold;
-clear: both;
-}
-
-div.record {
-font-size: 12px;
-float: left;
-width: 675px;
-margin-bottom: 10px;
-line-height: 20px;
-}
-
-div.record a.recTitle{
-font-weight: bold;    
-}
-
-div.record a.recAuthor{
-font-style: italic;
-}
-
-a.close {
-float: left;
-padding: 5px;
-width: 18px;
-height: 20px;
-border: 1px solid #aec0db;
-border-left: 0px;
-text-align: center;
-margin-top: -6px;
-}
-
-a.close img {
-margin-top: 6px;
-}
-
-/*added*/
-div.records {
-    margin-top: 10px;
-}
-
-div.records a.select {
-float: left;
-width: 651px;
-font-weight: bold;
-line-height: 20px;
-padding: 5px;
-margin-top: -6px;
-border: 1px solid #aec0db;
-}
-
-div.detail {
-border-top: 1px solid #aec0db;
-border-bottom: 1px solid #aec0db;
-padding: 5px 5px 5px 10px;
-background-color: #e1e5ec;
-/*removed border: 1px solid #aec0db;*/
-/*removed border-top: 0px;*/
-/*removed margin-left: 44px;*/
-/*removed margin-bottom: 5px;*/
-width: 475px;
-float: left;
-clear: left;
-}
-
-div.results {
-float: left;
-color: #002863;
-background-color: #e1e5ec;
-padding-left: 10px;
-padding-right: 20px;
-padding-top: 5px;
-height: 50px;
-line-height: 25px;
-margin-bottom: 12px;
-}
-
-div.bottom {
-float: left;
-color: #000000;
-background-color: #e1e5ec;
-padding-left: 10px;
-padding-right: 20px;
-height: 28px;
-line-height: 28px;
-}
-
-div#breadcrumb {
-border-bottom: 1px solid #e1e5ec;
-float: left;
-background-color: #f6f6f9;
-padding-left: 0px;
-padding-right: 0px;
-margin-bottom: 10px;
-width: inherit;
-line-height: 28px;
-}
-
-div#breadcrumb span{
-margin-right: 1px;
-margin-left: 5px;
-}
-
-div#breadcrumb a:hover {
-text-decoration: line-through;
-}
-
-strong#filter{
-margin-right: -5px;
-margin-left: 5px;
-}
-
-table {
-padding: 0px;
-margin: 0px;
-border-collapse: collapse;
-}
-
-td {
-color: #000000;
-}
-
-td.item {
-width: 100px;
-color: #31568c;
-}
-
-div.detail a {
-background: none;
-padding: 0px;
-margin: 0px;
-}
-
-div.sortBox{
-float: right;
-}
-
-div.showing {
-padding-top: 3px; /*added*/
-float: left;
-clear: left;
-}
-
-div.pages {
-float: right;
-}
-
-div.pages a.page, div.pages a.select  {
-text-decoration: underline;
-padding-left: 2px;
-padding-right: 2px;
-}
-
-div.pages a.select {
-text-decoration: none;
-font-weight: bold;
-}
-
-a.previous_inactive {
-background-image: url(../gfx/previous_inactive.gif);
-color: #757575;
-}
-
-a.previous_active {
-background-image: url(../gfx/previous_active.gif);
-}
-
-a.next_inactive {
-background-image: url(../gfx/next_inactive.gif);
-color: #757575;
-}
-
-a.next_active {
-background-image: url(../gfx/next_active.gif);
-}
-
-a.previous_active, a.previous_inactive {
-margin-right: 10px;
-text-decoration: none;
-padding-left: 10px;
-background-position: 0px 4px;
-background-repeat: no-repeat;
-}
-
-a.next_inactive, a.next_active {
-margin-left: 10px;
-padding-right: 10px;
-background-position: 100% 4px;
-background-repeat: no-repeat;
-text-decoration: none;
-}
-
-div.leftbar a {
-display: block;
-padding-left: 20px;
-}
-
-a span {
-color: #959595;
-}
-
-a.selected {
-background-image: url(../gfx/minus.gif);
-background-position: 0px 2px;
-background-repeat: no-repeat;
-text-transform: capitalize;
-font-weight: bold;
-font-size: 10px;
-line-height: 13px;
-}
-
-a.unselected {
-background-image: url(../gfx/plus.gif);
-background-position: 0px 2px;
-background-repeat: no-repeat;
-text-transform: capitalize;
-font-weight: bold;
-font-size: 10px;
-line-height: 13px;
-}
-
-a.sub {
-text-indent: -10px;
-font-size: 10px;
-line-height: 13px;
-}
-
-span.green {
-color: #63b05d;
-font-weight: bold;
-}
-
-hr { /*removed div.leftbar*/
-border: 0px;
-border-bottom: 1px solid #c5cedc;
-height: 1px;
-line-height: 8px;
-}
-
-div.trailer {
-border-top: 1px solid #e1e5ec;
-border-bottom: 2px solid #f4f4f9;
-background-color: #f6f6f9; /* #ffffff;*/
-width: 100%;
-height: 24px; /*change from 37*/
-padding-top: 4px;
-text-indent: 227px;
-}
diff --git a/www/masterkey/gfx/arrow_down.gif b/www/masterkey/gfx/arrow_down.gif
deleted file mode 100755 (executable)
index 09a19d2..0000000
Binary files a/www/masterkey/gfx/arrow_down.gif and /dev/null differ
diff --git a/www/masterkey/gfx/arrow_right.gif b/www/masterkey/gfx/arrow_right.gif
deleted file mode 100755 (executable)
index 0e56a1f..0000000
Binary files a/www/masterkey/gfx/arrow_right.gif and /dev/null differ
diff --git a/www/masterkey/gfx/background.gif b/www/masterkey/gfx/background.gif
deleted file mode 100755 (executable)
index 874b12f..0000000
Binary files a/www/masterkey/gfx/background.gif and /dev/null differ
diff --git a/www/masterkey/gfx/button.gif b/www/masterkey/gfx/button.gif
deleted file mode 100755 (executable)
index 6d0ca2d..0000000
Binary files a/www/masterkey/gfx/button.gif and /dev/null differ
diff --git a/www/masterkey/gfx/close.gif b/www/masterkey/gfx/close.gif
deleted file mode 100755 (executable)
index 4c28b95..0000000
Binary files a/www/masterkey/gfx/close.gif and /dev/null differ
diff --git a/www/masterkey/gfx/logo.gif b/www/masterkey/gfx/logo.gif
deleted file mode 100755 (executable)
index 96ea119..0000000
Binary files a/www/masterkey/gfx/logo.gif and /dev/null differ
diff --git a/www/masterkey/gfx/minus.gif b/www/masterkey/gfx/minus.gif
deleted file mode 100755 (executable)
index e254e5f..0000000
Binary files a/www/masterkey/gfx/minus.gif and /dev/null differ
diff --git a/www/masterkey/gfx/next_active.gif b/www/masterkey/gfx/next_active.gif
deleted file mode 100755 (executable)
index 5179461..0000000
Binary files a/www/masterkey/gfx/next_active.gif and /dev/null differ
diff --git a/www/masterkey/gfx/next_inactive.gif b/www/masterkey/gfx/next_inactive.gif
deleted file mode 100755 (executable)
index ff8a3b4..0000000
Binary files a/www/masterkey/gfx/next_inactive.gif and /dev/null differ
diff --git a/www/masterkey/gfx/plus.gif b/www/masterkey/gfx/plus.gif
deleted file mode 100755 (executable)
index 5e663e0..0000000
Binary files a/www/masterkey/gfx/plus.gif and /dev/null differ
diff --git a/www/masterkey/gfx/previous_active.gif b/www/masterkey/gfx/previous_active.gif
deleted file mode 100755 (executable)
index 6b85add..0000000
Binary files a/www/masterkey/gfx/previous_active.gif and /dev/null differ
diff --git a/www/masterkey/gfx/previous_inactive.gif b/www/masterkey/gfx/previous_inactive.gif
deleted file mode 100755 (executable)
index 6b85add..0000000
Binary files a/www/masterkey/gfx/previous_inactive.gif and /dev/null differ
diff --git a/www/masterkey/gfx/trailer.gif b/www/masterkey/gfx/trailer.gif
deleted file mode 100755 (executable)
index 33627ee..0000000
Binary files a/www/masterkey/gfx/trailer.gif and /dev/null differ
diff --git a/www/masterkey/index.html b/www/masterkey/index.html
deleted file mode 100755 (executable)
index 5f8d112..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-  <head>
-    <title>MasterKey Power Search</title>
-    <link rel="author" href="http://www.indexdata.dk" />
-    <link href="css/styles.css" rel="stylesheet" type="text/css" media="screen, all" />
-    <script type="text/javascript" src="js/pz2.js"></script>
-    <script type="text/javascript" src="js/jquery.pack.js"></script>
-    <script type="text/javascript" src="js/client.js"></script>
-  </head>
-  <body>
-    <div class="container">
-      <div class="topbar">
-        <a href="/"><img id="logo" src="gfx/logo.gif" width="206" height="37" alt="MasterKey Power Search" /></a>
-        <div class="topmenu">
-          <a href="index.html" class="topselect">CONTACT</a>
-          <a href="about.html" class="topmenu">ABOUT</a>
-          <a href="help.html" class="topmenu">HELP</a>
-        </div>
-      <!--<div class="bluebox"></div>-->
-      </div>
-      <div class="search">  
-      <form accept-charset="UTF-8" method="post" action="index.html" name="search">
-        <div class="simple">
-          <input type="text" name="query" class="search" tabindex="1" maxlength="255" value="" />
-          <input type="image" src="gfx/button.gif" class="button" />
-          <a id="advanced">Advanced search</a>
-          <!-- those are the fields that need to be inserted in the advanced view: however not nessesary
-          all at once, it may any combination of these. I would like the encapsulating box to grow while
-          the fields are inserted, preferably avoiding manipulations of the box height from javascript.
-          secondly the boxes need to be position to the right edge of the search input field-->
-          <!-- fields end-->
-        </div>
-          <div class="advanced" style="display: none">
-          Title: <input type="text" name="title" class="advSearch" tabindex="1" maxlength="255" value="" />
-          <br/>
-          Author: <input type="text" name="author" class="advSearch" tabindex="1" maxlength="255" value="" />
-          <br/>
-          Subject: <input type="text" name="subject" class="advSearch" tabindex="1" maxlength="255" value="" />
-          <br/>
-          Date: <input type="text" name="date" class="advSearch" tabindex="1" maxlength="255" value="" />
-          <br/>
-          </div>
-      </form>
-      </div>
-      <div class="main">
-       <div class="motd" id="motd">
-<b>About This Service</b>
-
-<p>
-This is a pre-release demonstration of Index Data's soon-to-be-released hosted metasearch service, MasterKey.  MasterKey is based on pazpar2, Index Data's second generation metasearch engine. 
-
-<p>
-The MasterKey hosted metasearch service is now, and will continue to be, freely usable for searching selected open content online resources and library catalogs.  Commercial resources and additional catalogs can be added to the service using the fee-based version of MasterKey.  For cost quotes or additional information on the fee-based service, write to info@indexdata.com or call 860-389-1568.
-
-<p>
-<b>Masterkey Features in the Development Queue</b>
-
-<ul>
-<li>Additional target selection capabilities<br>
-<li>Enhanced authentication functionality<br>
-<li>New search features<br>
-</ul>
-
-All comments and/or suggestions for improvements and developmental priorities are welcome You can sign on to the MasterKey listserv at lists.indexdata.com/masterkey to engage in a public dialog about this new product. 
-<p>
-
-<b>About pazpar2</b>
-
-<p>
-pazpar2 (pronounced "Passe-partout") uses Ajax and other technologies to improve the speed and functionality of simultaneous multi-target search and retrieval. It enables fast sorting and merging across multiple target databases, as well as faceted search limiting and search re-directing. Index Data expects to release pazpar2 as open source software in Spring 2007. At that point, the search engine and a simple interface will be released under the open source General Public License.
-<p>
-
-As with all Index Data's open source distributions, pazpar2 will be both freely downloadable and fully backed by the best commercial support in the library market. Institutional users will pay only for optional installation, customization and support services, if they choose to obtain them, but the software itself will be freely usable and will not require ongoing license fees.
-<p>
-
-A listserv for pazpar2 will be announced when the software is formally released.
-<p>
-
-Index Data means business for open source and open standards.
-       </div>
-        <div class="leftbar" style="display: none">
-          <div class="head">
-            <div class="margin">
-              <h2>Limit your search by:</h2>
-            </div>
-          </div>
-          <div class="margin" style="padding-top: 15px;">
-            <div id="termlists"></div>
-          </div>
-        </div>
-        <div class="content" style="display: none">
-          <div class="head"><div class="margin"><div class="sortBox">
-            Sort by&nbsp;
-            <select name="sort" id="sort">
-              <option value="relevance" selected="true">relevance</option>
-              <option value="title:1">title</option>
-            </select>
-            &nbsp;and show&nbsp;
-            <select name="perpage" id="perpage">
-              <option value="15">15</option>
-              <option value="20" selected="true">20</option>
-              <option value="30">30</option>
-              <option value="50">50</option>
-            </select>
-            results per page.
-          </div>
-            <div class="showing">&nbsp;</div></div></div>
-            <div class="bottom"><div class="pages">&nbsp;</div></div>
-            <div id="breadcrumb"></div>
-            <br />
-            <br />
-          <div class="records">
-         </div>
-          <div class="bottom">
-            <div class="pages">&nbsp;</div>
-          </div>
-        </div>
-        <div class="clear"></div>
-        <div class="trailer"><img src="gfx/trailer.gif" width="360" height="6" alt="MasterKey" /></div>
-      </div>
-    </div>
-  </body>
-</html>
diff --git a/www/masterkey/js/client.js b/www/masterkey/js/client.js
deleted file mode 100644 (file)
index d2e3985..0000000
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
-** $Id: client.js,v 1.23 2007-05-16 07:53:32 jakub Exp $
-** MasterKey - pazpar2's javascript client .
-*/
-
-// check for pz2.js
-if(typeof window.pz2 == "undefined"){
-    throw new Error("Client requires pz2.js library.");
-}
-
-// check for jQuery
-if(typeof window.jQuery == "undefined"){
-    throw new Error("Client requires requires jQuery library");
-}
-
-/* start with creating pz2 object and passing it event handlers*/
-var my_paz = new pz2({ 
-                    "onshow": my_onshow,
-                    //"showtime": 1000,
-                    //"onstat": my_onstat,
-                    "onterm": my_onterm,
-                    "termlist": "xtargets,subject,author,date",
-                    //"onbytarget": my_onbytarget,
-                    "onrecord": my_onrecord,
-                    "errorhandler": my_errorhandler
-                    });
-
-/* some state variable */
-var currentSort = 'relevance';
-var currentResultsPerPage = 20;
-var currentPage = 0;
-var curQuery = new pzQuery();
-
-var currentDetailedId = null;
-var currentDetailedData = null;
-
-var termStartup = true;
-var advancedOn = false;
-
-var showBriefLocations = false;
-
-/* wait until the DOM is ready and register basic handlers */
-$(document).ready( function() { 
-                    document.search.onsubmit = onFormSubmitEventHandler;
-
-                    document.search.query.value = '';
-                    document.search.title.value = '';
-                    document.search.author.value = '';
-                    document.search.subject.value = '';
-                    document.search.date.value = '';
-                    
-                    $('#advanced').click(toggleAdvanced);
-
-                    $('#sort').change(function(){ 
-                        currentSort = this.value;
-                        currentPage = 0;
-                        my_paz.show(0, currentResultsPerPage, currentSort);
-                    });
-                    
-                    $('#perpage').change(function(){ 
-                        currentResultsPerPage = this.value;
-                        currentPage = 0;
-                        my_paz.show(0, currentResultsPerPage, currentSort);
-                    });
-} );
-
-/* search button event handler */
-function onFormSubmitEventHandler() {
-    loadQueryFromForm();
-    curQuery.clearFilter();
-    fireSearch();
-    drawBreadcrumb();
-    $('div.motd').empty();
-    return false;
-}
-
-/*
-*********************************************************************************
-** pz2 Event Handlers ***********************************************************
-*********************************************************************************
-*/
-function my_errorhandler(err)
-{
-    switch (err.message) 
-    {
-        case 'QUERY': alert("Your query was not understood. Please rephrase."); break;
-        case 'NOTARGETS': alert("You are not allowed to search any targets."); break;
-        case 'HTTP': alert("There were problems with the connection."); break;
-        default: alert(err.message);
-    }
-}
-
-/*
-** data.hits["md-title"], data.hits["md-author"], data.hits.recid, data.hits.count
-** data.activeclients, data.merged, data.total, data.start, data.num 
-*/
-function my_onshow(data)
-{
-    $('div.content').show();
-    $("div.leftbar").show();
-    
-    var recsBody = $('div.records');
-    recsBody.empty();
-    
-    for (var i = 0; i < data.hits.length; i++) {
-        var title = data.hits[i]["md-title"] || 'N/A';
-        var author = data.hits[i]["md-author"] || '';
-        var id = data.hits[i].recid;
-        var count = data.hits[i].count || 1;
-        
-        var recBody = $('<div class="record" id="rec_'+id+'"></div>');
-        var aTitle = $('<a class="recTitle">'+title+'</a>').appendTo(recBody);
-        aTitle.click(function(){
-                        var clickedId = this.parentNode.id.split('_')[1];
-                        if(currentDetailedId == clickedId){
-                            $(this.parentNode.lastChild).remove();
-                            currentDetailedId = null;
-                            return;
-                        } else if (currentDetailedId != null) {
-                            $('#rec_'+currentDetailedId).children('.detail').remove();
-                        }
-                        currentDetailedId = clickedId;
-                        my_paz.record(currentDetailedId);
-                        });
-        
-        if( author ) {
-            recBody.append('<i> by </i>');
-            $('<a name="author" class="recAuthor">'+author+'</a>\n').click(function(){ 
-                            refine("authoronly", this.firstChild.nodeValue) }).appendTo(recBody);
-        }
-
-        if( currentDetailedId == id ) {
-            var detailBox = $('<div class="detail"></div>').appendTo(recBody);
-            drawDetailedRec(detailBox);
-        }
-
-       if (showBriefLocations) {
-           var location = data.hits[i]['location'];
-           var l;
-           var list = '';
-           for (l in location) {
-               if (list)
-                   list += ', ';
-               list += location[l].name;
-           }
-           recBody.append('<span> ('+list+')</span>');
-       }
-       else {
-           if( count > 1 ) {
-               recBody.append('<span> ('+count+')</span>');
-           }
-       }
-
-        recsBody.append('<div class="resultNum">'+(currentPage*currentResultsPerPage+i+1)+'.</a>');
-        recsBody.append(recBody);
-    }
-    drawPager(data.merged, data.total);    
-}
-
-/*
-** data.activeclients, data.hits, data.records, data.clients, data.searching
-*/
-function my_onstat(data){}
-
-/*
-** data[listname]: name, freq, [id]
-*/
-function my_onterm(data)
-{
-    if(termStartup)
-    {
-        var termLists = $("#termlists");
-        
-        for(var key in data){
-            if (key == "activeclients")
-                continue;
-            var listName = key;
-            var listClass = "unselected";
-
-            if (key == "xtargets"){
-                listName = "resource";
-                listClass = "selected";
-            }
-
-            var termList = $('<div class="termlist" id="term_'+key+'"/>').appendTo(termLists);
-            var termTitle = $('<div class="termTitle"><a class="'+listClass+'">'+listName+'</a></div>').appendTo(termList);
-            termTitle.click(function(){
-                                if( this.firstChild.className == "selected" ){
-                                    this.firstChild.className = "unselected";
-                                    $(this.nextSibling).hide();
-                                } else {
-                                    this.firstChild.className = "selected";
-                                    $(this.nextSibling).show();
-                                }
-                            });
-
-            listEntries = $('<div class="termEntries"></div>');
-            if (key != "xtargets") listEntries.hide();
-            listEntries.appendTo(termList);
-
-            for(var i = 0; i < data[key].length; i++)
-            {
-                if (key == "xtargets"){
-                    var listItem = $('<a class="sub" name="xtarget" value="'+data[key][i].id+'">'+data[key][i].name +'<span> ('+data[key][i].freq+')</span>'+'</a>');
-                    listItem.click(function(){ 
-                        refine(this.name, this.attributes[0].nodeValue, this.firstChild.nodeValue) });
-                    listItem.appendTo(listEntries);
-                } else {
-                    var listItem = $('<a class="sub" name="'+key+'">'+data[key][i].name
-                            +'<span> ('+data[key][i].freq+')</span>'+'</a>');
-                    listItem.click(function(){ refine(this.name, this.firstChild.nodeValue) });
-                    listItem.appendTo(listEntries);
-                }
-            }        
-            $('<hr/>').appendTo(termLists);
-        }
-        termStartup = false;
-    } 
-    else 
-    {
-        for(var key in data){
-            if (key == "activeclients")
-                continue;
-            var listEntries = $('#term_'+key).children('.termEntries');
-            if( data[key].length ) listEntries.empty();
-
-            for(var i = 0; i < data[key].length; i++){
-                if (key == "xtargets"){
-                    var listItem = $('<a class="sub" name="xtarget" value="'+data[key][i].id+'">'+data[key][i].name+'<span> ('+data[key][i].freq+')</span>'+'</a>').click(function(){ 
-                                    refine(this.name, this.attributes[0].nodeValue, this.firstChild.nodeValue) });
-                    listItem.appendTo(listEntries);
-                } else {
-                    var listItem = $('<a class="sub" name="'+key+'">'+data[key][i].name
-                                +'<span> ('+data[key][i].freq+')</span>'+'</a>').click(function(){ 
-                                                                        refine(this.name, this.firstChild.nodeValue) });
-                    listItem.appendTo(listEntries);
-                }
-            }         
-        }
-    }
-}
-
-/*
-** data["md-title"], data["md-date"], data["md-author"], data["md-subject"], data["location"][0].name
-*/
-function my_onrecord(data)
-{
-    currentDetailedData = data;
-    drawDetailedRec();
-}
-
-/*
-** data[i].id, data[i].hits, data[i].diagnostic, data[i].records, data[i].state
-*/
-function my_onbytarget(data){}
-
-/*
-*********************************************************************************
-** HELPER FUNCTIONS *************************************************************
-*********************************************************************************
-*/
-function fireSearch()
-{
-    $('div.showing').empty().text('No records to show.');
-    $('div.pages').empty().html('&nbsp;');
-    $('div.records').empty();
-    currentDetailedId = null;
-    if( !curQuery.totalLength() )
-        return false;
-    my_paz.search(curQuery.toCCL(), currentResultsPerPage, currentSort, curQuery.getFilterString() );
-}
-
-function toggleAdvanced()
-{
-    if(advancedOn){
-        $("div.advanced").hide();
-        $("div.search").height(73);
-        advancedOn = false;
-        $("#advanced").text("Advanced search");
-    } else {
-        $("div.search").height(173);
-        $("div.advanced").show();
-        advancedOn = true;
-        $("#advanced").text("Simple search");
-        loadFormFieldsFromQuery();
-    }
-}
-
-function drawDetailedRec(detailBox)
-{
-    if( detailBox == undefined )
-        detailBox = $('<div class="detail"></div>').appendTo($('#rec_'+currentDetailedId));
-    
-    var detailTable = $('<table></table>');
-    var recLocation = currentDetailedData["location"];
-
-    var hdtarget;
-    if( recLocation ) {
-        hdtarget = $('<tr><td class="item" align="right">Available at:&nbsp;</td></tr>');
-       detailTable.append(hdtarget);
-
-       for(var i=0; i < recLocation.length; i++)
-       {
-           if (!hdtarget)
-               hdtarget = $('<tr><td class="item">&nbsp;</td></tr>').appendTo(detailTable);
-           var url = recLocation[i]["md-url"];
-           var description = recLocation[i]["md-description"];
-           var date = recLocation[i]["md-date"];
-           var citation = recLocation[i]["md-citation"];
-           hdtarget.append('<td><b>'+recLocation[i].name+'</b></td>');
-           if (date)
-               detailTable.append($('<tr><td align="right">Date:&nbsp;</td><td>'+date+'</td></tr>'));
-           if (citation)
-               detailTable.append($('<tr><td align="right" valign="top">Citation:&nbsp;</td><td>'+citation+'</td></tr>'));
-           if (description)
-               detailTable.append($('<tr><td>&nbsp</td><td>'+description+'</td></tr>'));
-           if (url) {
-               var tline = $('<tr><td>&nbsp;</td></tr>');
-               var td = $('<td></td>').appendTo(tline);
-               var tlink = $('<a>Go to resource</a>');
-               tlink.attr('href', url);;
-               tlink.attr('target', '_blank');
-               tlink.appendTo(td);
-               detailTable.append(tline);
-           }
-           hdtarget = undefined;
-       }
-    }
-
-    detailTable.appendTo(detailBox);
-}
-
-function refine(field, value, opt)
-{
-    switch(field) {
-        case "authoronly":  curQuery.reset(); curQuery.addTerm('au', value); break;
-        case "author":  curQuery.addTerm('au', value); break;
-        case "title":   curQuery.addTerm('ti', value); break;
-        case "date":    curQuery.addTerm('date', value); break;
-        case "subject": curQuery.addTerm('su', value); break;
-        case "xtarget": curQuery.setFilter(opt, value); break;
-    }
-
-    if(advancedOn)
-        loadFormFieldsFromQuery();
-
-    currentPage = 0;
-    drawBreadcrumb();
-    fireSearch();
-}
-
-function loadQueryFromForm()
-{
-    curQuery.reset();
-    curQuery.simpleQuery = document.search.query.value;
-
-    if( advancedOn )
-    {
-        curQuery.addTermsFromList(document.search.author.value, 'au');
-        curQuery.addTermsFromList(document.search.title.value, 'ti');
-        curQuery.addTermsFromList(document.search.date.value, 'date');
-        curQuery.addTermsFromList(document.search.subject.value, 'su');
-    }
-}
-
-function loadFormFieldsFromQuery()
-{
-    document.search.author.value = '';
-    document.search.title.value = '';
-    document.search.date.value = '';
-    document.search.subject.value = '';
-
-    for(var i = 0; i < curQuery.numTerms; i++)
-    {
-        switch( curQuery.getTermFieldByIdx(i) )
-        {
-            case "au": document.search.author.value += curQuery.getTermValueByIdx(i) + '; '; break;
-            case "ti": document.search.title.value += curQuery.getTermValueByIdx(i) + '; '; break;
-            case "date": document.search.date.value += curQuery.getTermValueByIdx(i) + '; '; break;
-            case "su": document.search.subject.value += curQuery.getTermValueByIdx(i) + '; '; break;
-        }
-    }
-}
-
-function drawPager(max, hits)
-{
-    var firstOnPage = currentPage * currentResultsPerPage + 1;
-    var lastOnPage = (firstOnPage + currentResultsPerPage - 1) < max ? (firstOnPage + currentResultsPerPage - 1) : max;
-
-    var results = $('div.showing');
-    results.empty();
-    results.append('Displaying: <b>'+firstOnPage+'</b> to <b>'+lastOnPage+
-                            '</b> of <b>'+max+'</b> (total hits: '+hits+')');
-    var pager = $('div.pages');
-    pager.empty();
-    
-    if ( currentPage > 0 ){
-        $('<a class="previous_active">Previous</a>').click(function() { my_paz.showPrev(1); currentPage--; }).appendTo(pager.eq(0));
-        $('<a class="previous_active">Previous</a>').click(function() { my_paz.showPrev(1); currentPage--; }).appendTo(pager.eq(1));
-    }
-    else
-        pager.append('<a class="previous_inactive">Previous</a>');
-
-    var numPages = Math.ceil(max / currentResultsPerPage);
-
-    var start = ( currentPage - 5 > 0 ? currentPage - 5 : 1 );
-    var stop =  ( start + 12 < numPages ? start + 12 : numPages );
-
-    if (start > 1) $('<span>... </span>').appendTo(pager);
-    
-    for(var i = start; i <= stop; i++)
-    {
-        if( i == (currentPage + 1) ){
-           $('<a class="select">'+i+'</a>').appendTo(pager);
-           continue;
-        }
-        var pageLink = $('<a class="page">'+i+'</a>');
-        var plClone = pageLink.clone();
-
-        pageLink.click(function() { 
-            my_paz.showPage(this.firstChild.nodeValue - 1);
-            currentPage = (this.firstChild.nodeValue - 1);
-            });
-
-        plClone.click(function() { 
-            my_paz.showPage(this.firstChild.nodeValue - 1);
-            currentPage = (this.firstChild.nodeValue - 1);
-            });
-
-        //nasty hack
-        pager.eq(0).append(pageLink);
-        pager.eq(1).append(plClone);
-    }
-
-    if (stop < numPages) $('<span> ...</span>').appendTo(pager);
-
-    if ( currentPage < (numPages-1) ){
-        $('<a class="next_active">Next</a>').click(function() { my_paz.showNext(1); currentPage++; }).appendTo(pager.eq(0));
-        $('<a class="next_active">Next</a>').click(function() { my_paz.showNext(1); currentPage++; }).appendTo(pager.eq(1));
-    }
-    else
-        pager.append('<a class="next_inactive">Next</a>');
-}
-
-function drawBreadcrumb()
-{
-    var bc = $("#breadcrumb");
-    bc.empty();
-    
-    if(curQuery.filterNums) $('<strong id="filter"><a>'+curQuery.getFilterName(0)+'</a>: </strong>').click(function() {
-                                curQuery.removeFilter(0);
-                                refine();
-                                }).appendTo(bc);
-
-    bc.append('<span>'+curQuery.simpleQuery+'</span>');
-
-    for(var i = 0; i < curQuery.numTerms; i++){
-        bc.append('<strong> + </strong>');
-        var bcLink = $('<a id="pos_'+i+'">'+curQuery.getTermValueByIdx(i)+'</a>').click(function() { 
-                                            curQuery.removeTermByIdx(this.id.split('_')[1]);
-                                            refine(); 
-                                            });
-        bc.append(bcLink);
-    }
-}
diff --git a/www/masterkey/js/jquery.js b/www/masterkey/js/jquery.js
deleted file mode 100644 (file)
index 3e07662..0000000
+++ /dev/null
@@ -1,2246 +0,0 @@
-/* prevent execution of jQuery if included more than once */
-if(typeof window.jQuery == "undefined") {
-/*
- * jQuery 1.1.2 - New Wave Javascript
- *
- * Copyright (c) 2007 John Resig (jquery.com)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * $Date: 2007-04-14 06:11:47 $
- * $Rev: 1465 $
- */
-
-// Global undefined variable
-window.undefined = window.undefined;
-var jQuery = function(a,c) {
-       // If the context is global, return a new object
-       if ( window == this )
-               return new jQuery(a,c);
-
-       // Make sure that a selection was provided
-       a = a || document;
-       
-       // HANDLE: $(function)
-       // Shortcut for document ready
-       if ( jQuery.isFunction(a) )
-               return new jQuery(document)[ jQuery.fn.ready ? "ready" : "load" ]( a );
-       
-       // Handle HTML strings
-       if ( typeof a  == "string" ) {
-               // HANDLE: $(html) -> $(array)
-               var m = /^[^<]*(<(.|\s)+>)[^>]*$/.exec(a);
-               if ( m )
-                       a = jQuery.clean( [ m[1] ] );
-               
-               // HANDLE: $(expr)
-               else
-                       return new jQuery( c ).find( a );
-       }
-       
-       return this.setArray(
-               // HANDLE: $(array)
-               a.constructor == Array && a ||
-
-               // HANDLE: $(arraylike)
-               // Watch for when an array-like object is passed as the selector
-               (a.jquery || a.length && a != window && !a.nodeType && a[0] != undefined && a[0].nodeType) && jQuery.makeArray( a ) ||
-
-               // HANDLE: $(*)
-               [ a ] );
-};
-
-// Map over the $ in case of overwrite
-if ( typeof $ != "undefined" )
-       jQuery._$ = $;
-       
-// Map the jQuery namespace to the '$' one
-var $ = jQuery;
-
-jQuery.fn = jQuery.prototype = {
-       jquery: "1.1.2",
-
-       size: function() {
-               return this.length;
-       },
-       
-       length: 0,
-
-       get: function( num ) {
-               return num == undefined ?
-
-                       // Return a 'clean' array
-                       jQuery.makeArray( this ) :
-
-                       // Return just the object
-                       this[num];
-       },
-       pushStack: function( a ) {
-               var ret = jQuery(a);
-               ret.prevObject = this;
-               return ret;
-       },
-       setArray: function( a ) {
-               this.length = 0;
-               [].push.apply( this, a );
-               return this;
-       },
-       each: function( fn, args ) {
-               return jQuery.each( this, fn, args );
-       },
-       index: function( obj ) {
-               var pos = -1;
-               this.each(function(i){
-                       if ( this == obj ) pos = i;
-               });
-               return pos;
-       },
-
-       attr: function( key, value, type ) {
-               var obj = key;
-               
-               // Look for the case where we're accessing a style value
-               if ( key.constructor == String )
-                       if ( value == undefined )
-                               return this.length && jQuery[ type || "attr" ]( this[0], key ) || undefined;
-                       else {
-                               obj = {};
-                               obj[ key ] = value;
-                       }
-               
-               // Check to see if we're setting style values
-               return this.each(function(index){
-                       // Set all the styles
-                       for ( var prop in obj )
-                               jQuery.attr(
-                                       type ? this.style : this,
-                                       prop, jQuery.prop(this, obj[prop], type, index, prop)
-                               );
-               });
-       },
-
-       css: function( key, value ) {
-               return this.attr( key, value, "curCSS" );
-       },
-
-       text: function(e) {
-               if ( typeof e == "string" )
-                       return this.empty().append( document.createTextNode( e ) );
-
-               var t = "";
-               jQuery.each( e || this, function(){
-                       jQuery.each( this.childNodes, function(){
-                               if ( this.nodeType != 8 )
-                                       t += this.nodeType != 1 ?
-                                               this.nodeValue : jQuery.fn.text([ this ]);
-                       });
-               });
-               return t;
-       },
-
-       wrap: function() {
-               // The elements to wrap the target around
-               var a = jQuery.clean(arguments);
-
-               // Wrap each of the matched elements individually
-               return this.each(function(){
-                       // Clone the structure that we're using to wrap
-                       var b = a[0].cloneNode(true);
-
-                       // Insert it before the element to be wrapped
-                       this.parentNode.insertBefore( b, this );
-
-                       // Find the deepest point in the wrap structure
-                       while ( b.firstChild )
-                               b = b.firstChild;
-
-                       // Move the matched element to within the wrap structure
-                       b.appendChild( this );
-               });
-       },
-       append: function() {
-               return this.domManip(arguments, true, 1, function(a){
-                       this.appendChild( a );
-               });
-       },
-       prepend: function() {
-               return this.domManip(arguments, true, -1, function(a){
-                       this.insertBefore( a, this.firstChild );
-               });
-       },
-       before: function() {
-               return this.domManip(arguments, false, 1, function(a){
-                       this.parentNode.insertBefore( a, this );
-               });
-       },
-       after: function() {
-               return this.domManip(arguments, false, -1, function(a){
-                       this.parentNode.insertBefore( a, this.nextSibling );
-               });
-       },
-       end: function() {
-               return this.prevObject || jQuery([]);
-       },
-       find: function(t) {
-               return this.pushStack( jQuery.map( this, function(a){
-                       return jQuery.find(t,a);
-               }), t );
-       },
-       clone: function(deep) {
-               return this.pushStack( jQuery.map( this, function(a){
-                       var a = a.cloneNode( deep != undefined ? deep : true );
-                       a.$events = null; // drop $events expando to avoid firing incorrect events
-                       return a;
-               }) );
-       },
-
-       filter: function(t) {
-               return this.pushStack(
-                       jQuery.isFunction( t ) &&
-                       jQuery.grep(this, function(el, index){
-                               return t.apply(el, [index])
-                       }) ||
-
-                       jQuery.multiFilter(t,this) );
-       },
-
-       not: function(t) {
-               return this.pushStack(
-                       t.constructor == String &&
-                       jQuery.multiFilter(t, this, true) ||
-
-                       jQuery.grep(this, function(a) {
-                               return ( t.constructor == Array || t.jquery )
-                                       ? jQuery.inArray( a, t ) < 0
-                                       : a != t;
-                       })
-               );
-       },
-
-       add: function(t) {
-               return this.pushStack( jQuery.merge(
-                       this.get(),
-                       t.constructor == String ?
-                               jQuery(t).get() :
-                               t.length != undefined && (!t.nodeName || t.nodeName == "FORM") ?
-                                       t : [t] )
-               );
-       },
-       is: function(expr) {
-               return expr ? jQuery.filter(expr,this).r.length > 0 : false;
-       },
-
-       val: function( val ) {
-               return val == undefined ?
-                       ( this.length ? this[0].value : null ) :
-                       this.attr( "value", val );
-       },
-
-       html: function( val ) {
-               return val == undefined ?
-                       ( this.length ? this[0].innerHTML : null ) :
-                       this.empty().append( val );
-       },
-       domManip: function(args, table, dir, fn){
-               var clone = this.length > 1; 
-               var a = jQuery.clean(args);
-               if ( dir < 0 )
-                       a.reverse();
-
-               return this.each(function(){
-                       var obj = this;
-
-                       if ( table && jQuery.nodeName(this, "table") && jQuery.nodeName(a[0], "tr") )
-                               obj = this.getElementsByTagName("tbody")[0] || this.appendChild(document.createElement("tbody"));
-
-                       jQuery.each( a, function(){
-                               fn.apply( obj, [ clone ? this.cloneNode(true) : this ] );
-                       });
-
-               });
-       }
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
-       // copy reference to target object
-       var target = arguments[0],
-               a = 1;
-
-       // extend jQuery itself if only one argument is passed
-       if ( arguments.length == 1 ) {
-               target = this;
-               a = 0;
-       }
-       var prop;
-       while (prop = arguments[a++])
-               // Extend the base object
-               for ( var i in prop ) target[i] = prop[i];
-
-       // Return the modified object
-       return target;
-};
-
-jQuery.extend({
-       noConflict: function() {
-               if ( jQuery._$ )
-                       $ = jQuery._$;
-               return jQuery;
-       },
-
-       // This may seem like some crazy code, but trust me when I say that this
-       // is the only cross-browser way to do this. --John
-       isFunction: function( fn ) {
-               return !!fn && typeof fn != "string" && !fn.nodeName && 
-                       typeof fn[0] == "undefined" && /function/i.test( fn + "" );
-       },
-       
-       // check if an element is in a XML document
-       isXMLDoc: function(elem) {
-               return elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
-       },
-
-       nodeName: function( elem, name ) {
-               return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
-       },
-       // args is for internal usage only
-       each: function( obj, fn, args ) {
-               if ( obj.length == undefined )
-                       for ( var i in obj )
-                               fn.apply( obj[i], args || [i, obj[i]] );
-               else
-                       for ( var i = 0, ol = obj.length; i < ol; i++ )
-                               if ( fn.apply( obj[i], args || [i, obj[i]] ) === false ) break;
-               return obj;
-       },
-       
-       prop: function(elem, value, type, index, prop){
-                       // Handle executable functions
-                       if ( jQuery.isFunction( value ) )
-                               value = value.call( elem, [index] );
-                               
-                       // exclude the following css properties to add px
-                       var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i;
-
-                       // Handle passing in a number to a CSS property
-                       return value && value.constructor == Number && type == "curCSS" && !exclude.test(prop) ?
-                               value + "px" :
-                               value;
-       },
-
-       className: {
-               // internal only, use addClass("class")
-               add: function( elem, c ){
-                       jQuery.each( c.split(/\s+/), function(i, cur){
-                               if ( !jQuery.className.has( elem.className, cur ) )
-                                       elem.className += ( elem.className ? " " : "" ) + cur;
-                       });
-               },
-
-               // internal only, use removeClass("class")
-               remove: function( elem, c ){
-                       elem.className = c ?
-                               jQuery.grep( elem.className.split(/\s+/), function(cur){
-                                       return !jQuery.className.has( c, cur ); 
-                               }).join(" ") : "";
-               },
-
-               // internal only, use is(".class")
-               has: function( t, c ) {
-                       t = t.className || t;
-                       // escape regex characters
-                       c = c.replace(/([\.\\\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1");
-                       return t && new RegExp("(^|\\s)" + c + "(\\s|$)").test( t );
-               }
-       },
-       swap: function(e,o,f) {
-               for ( var i in o ) {
-                       e.style["old"+i] = e.style[i];
-                       e.style[i] = o[i];
-               }
-               f.apply( e, [] );
-               for ( var i in o )
-                       e.style[i] = e.style["old"+i];
-       },
-
-       css: function(e,p) {
-               if ( p == "height" || p == "width" ) {
-                       var old = {}, oHeight, oWidth, d = ["Top","Bottom","Right","Left"];
-
-                       jQuery.each( d, function(){
-                               old["padding" + this] = 0;
-                               old["border" + this + "Width"] = 0;
-                       });
-
-                       jQuery.swap( e, old, function() {
-                               if (jQuery.css(e,"display") != "none") {
-                                       oHeight = e.offsetHeight;
-                                       oWidth = e.offsetWidth;
-                               } else {
-                                       e = jQuery(e.cloneNode(true))
-                                               .find(":radio").removeAttr("checked").end()
-                                               .css({
-                                                       visibility: "hidden", position: "absolute", display: "block", right: "0", left: "0"
-                                               }).appendTo(e.parentNode)[0];
-
-                                       var parPos = jQuery.css(e.parentNode,"position");
-                                       if ( parPos == "" || parPos == "static" )
-                                               e.parentNode.style.position = "relative";
-
-                                       oHeight = e.clientHeight;
-                                       oWidth = e.clientWidth;
-
-                                       if ( parPos == "" || parPos == "static" )
-                                               e.parentNode.style.position = "static";
-
-                                       e.parentNode.removeChild(e);
-                               }
-                       });
-
-                       return p == "height" ? oHeight : oWidth;
-               }
-
-               return jQuery.curCSS( e, p );
-       },
-
-       curCSS: function(elem, prop, force) {
-               var ret;
-               
-               if (prop == "opacity" && jQuery.browser.msie)
-                       return jQuery.attr(elem.style, "opacity");
-                       
-               if (prop == "float" || prop == "cssFloat")
-                   prop = jQuery.browser.msie ? "styleFloat" : "cssFloat";
-
-               if (!force && elem.style[prop])
-                       ret = elem.style[prop];
-
-               else if (document.defaultView && document.defaultView.getComputedStyle) {
-
-                       if (prop == "cssFloat" || prop == "styleFloat")
-                               prop = "float";
-
-                       prop = prop.replace(/([A-Z])/g,"-$1").toLowerCase();
-                       var cur = document.defaultView.getComputedStyle(elem, null);
-
-                       if ( cur )
-                               ret = cur.getPropertyValue(prop);
-                       else if ( prop == "display" )
-                               ret = "none";
-                       else
-                               jQuery.swap(elem, { display: "block" }, function() {
-                                   var c = document.defaultView.getComputedStyle(this, "");
-                                   ret = c && c.getPropertyValue(prop) || "";
-                               });
-
-               } else if (elem.currentStyle) {
-
-                       var newProp = prop.replace(/\-(\w)/g,function(m,c){return c.toUpperCase();});
-                       ret = elem.currentStyle[prop] || elem.currentStyle[newProp];
-                       
-               }
-
-               return ret;
-       },
-       
-       clean: function(a) {
-               var r = [];
-
-               jQuery.each( a, function(i,arg){
-                       if ( !arg ) return;
-
-                       if ( arg.constructor == Number )
-                               arg = arg.toString();
-                       
-                        // Convert html string into DOM nodes
-                       if ( typeof arg == "string" ) {
-                               // Trim whitespace, otherwise indexOf won't work as expected
-                               var s = jQuery.trim(arg), div = document.createElement("div"), tb = [];
-
-                               var wrap =
-                                        // option or optgroup
-                                       !s.indexOf("<opt") &&
-                                       [1, "<select>", "</select>"] ||
-                                       
-                                       (!s.indexOf("<thead") || !s.indexOf("<tbody") || !s.indexOf("<tfoot")) &&
-                                       [1, "<table>", "</table>"] ||
-                                       
-                                       !s.indexOf("<tr") &&
-                                       [2, "<table><tbody>", "</tbody></table>"] ||
-                                       
-                                       // <thead> matched above
-                                       (!s.indexOf("<td") || !s.indexOf("<th")) &&
-                                       [3, "<table><tbody><tr>", "</tr></tbody></table>"] ||
-                                       
-                                       [0,"",""];
-
-                               // Go to html and back, then peel off extra wrappers
-                               div.innerHTML = wrap[1] + s + wrap[2];
-                               
-                               // Move to the right depth
-                               while ( wrap[0]-- )
-                                       div = div.firstChild;
-                               
-                               // Remove IE's autoinserted <tbody> from table fragments
-                               if ( jQuery.browser.msie ) {
-                                       
-                                       // String was a <table>, *may* have spurious <tbody>
-                                       if ( !s.indexOf("<table") && s.indexOf("<tbody") < 0 ) 
-                                               tb = div.firstChild && div.firstChild.childNodes;
-                                               
-                                       // String was a bare <thead> or <tfoot>
-                                       else if ( wrap[1] == "<table>" && s.indexOf("<tbody") < 0 )
-                                               tb = div.childNodes;
-
-                                       for ( var n = tb.length-1; n >= 0 ; --n )
-                                               if ( jQuery.nodeName(tb[n], "tbody") && !tb[n].childNodes.length )
-                                                       tb[n].parentNode.removeChild(tb[n]);
-                                       
-                               }
-                               
-                               arg = [];
-                               for (var i=0, l=div.childNodes.length; i<l; i++)
-                                       arg.push(div.childNodes[i]);
-                       }
-
-                       if ( arg.length === 0 && !jQuery.nodeName(arg, "form") )
-                               return;
-                       
-                       if ( arg[0] == undefined || jQuery.nodeName(arg, "form") )
-                               r.push( arg );
-                       else
-                               r = jQuery.merge( r, arg );
-
-               });
-
-               return r;
-       },
-       
-       attr: function(elem, name, value){
-               var fix = jQuery.isXMLDoc(elem) ? {} : {
-                       "for": "htmlFor",
-                       "class": "className",
-                       "float": jQuery.browser.msie ? "styleFloat" : "cssFloat",
-                       cssFloat: jQuery.browser.msie ? "styleFloat" : "cssFloat",
-                       innerHTML: "innerHTML",
-                       className: "className",
-                       value: "value",
-                       disabled: "disabled",
-                       checked: "checked",
-                       readonly: "readOnly",
-                       selected: "selected"
-               };
-               
-               // IE actually uses filters for opacity ... elem is actually elem.style
-               if ( name == "opacity" && jQuery.browser.msie && value != undefined ) {
-                       // IE has trouble with opacity if it does not have layout
-                       // Force it by setting the zoom level
-                       elem.zoom = 1; 
-
-                       // Set the alpha filter to set the opacity
-                       return elem.filter = elem.filter.replace(/alpha\([^\)]*\)/gi,"") +
-                               ( value == 1 ? "" : "alpha(opacity=" + value * 100 + ")" );
-
-               } else if ( name == "opacity" && jQuery.browser.msie )
-                       return elem.filter ? 
-                               parseFloat( elem.filter.match(/alpha\(opacity=(.*)\)/)[1] ) / 100 : 1;
-               
-               // Mozilla doesn't play well with opacity 1
-               if ( name == "opacity" && jQuery.browser.mozilla && value == 1 )
-                       value = 0.9999;
-                       
-
-               // Certain attributes only work when accessed via the old DOM 0 way
-               if ( fix[name] ) {
-                       if ( value != undefined ) elem[fix[name]] = value;
-                       return elem[fix[name]];
-
-               } else if ( value == undefined && jQuery.browser.msie && jQuery.nodeName(elem, "form") && (name == "action" || name == "method") )
-                       return elem.getAttributeNode(name).nodeValue;
-
-               // IE elem.getAttribute passes even for style
-               else if ( elem.tagName ) {
-                       if ( value != undefined ) elem.setAttribute( name, value );
-                       if ( jQuery.browser.msie && /href|src/.test(name) && !jQuery.isXMLDoc(elem) ) 
-                               return elem.getAttribute( name, 2 );
-                       return elem.getAttribute( name );
-
-               // elem is actually elem.style ... set the style
-               } else {
-                       name = name.replace(/-([a-z])/ig,function(z,b){return b.toUpperCase();});
-                       if ( value != undefined ) elem[name] = value;
-                       return elem[name];
-               }
-       },
-       trim: function(t){
-               return t.replace(/^\s+|\s+$/g, "");
-       },
-
-       makeArray: function( a ) {
-               var r = [];
-
-               if ( a.constructor != Array )
-                       for ( var i = 0, al = a.length; i < al; i++ )
-                               r.push( a[i] );
-               else
-                       r = a.slice( 0 );
-
-               return r;
-       },
-
-       inArray: function( b, a ) {
-               for ( var i = 0, al = a.length; i < al; i++ )
-                       if ( a[i] == b )
-                               return i;
-               return -1;
-       },
-       merge: function(first, second) {
-               var r = [].slice.call( first, 0 );
-
-               // Now check for duplicates between the two arrays
-               // and only add the unique items
-               for ( var i = 0, sl = second.length; i < sl; i++ )
-                       // Check for duplicates
-                       if ( jQuery.inArray( second[i], r ) == -1 )
-                               // The item is unique, add it
-                               first.push( second[i] );
-
-               return first;
-       },
-       grep: function(elems, fn, inv) {
-               // If a string is passed in for the function, make a function
-               // for it (a handy shortcut)
-               if ( typeof fn == "string" )
-                       fn = new Function("a","i","return " + fn);
-
-               var result = [];
-
-               // Go through the array, only saving the items
-               // that pass the validator function
-               for ( var i = 0, el = elems.length; i < el; i++ )
-                       if ( !inv && fn(elems[i],i) || inv && !fn(elems[i],i) )
-                               result.push( elems[i] );
-
-               return result;
-       },
-       map: function(elems, fn) {
-               // If a string is passed in for the function, make a function
-               // for it (a handy shortcut)
-               if ( typeof fn == "string" )
-                       fn = new Function("a","return " + fn);
-
-               var result = [], r = [];
-
-               // Go through the array, translating each of the items to their
-               // new value (or values).
-               for ( var i = 0, el = elems.length; i < el; i++ ) {
-                       var val = fn(elems[i],i);
-
-                       if ( val !== null && val != undefined ) {
-                               if ( val.constructor != Array ) val = [val];
-                               result = result.concat( val );
-                       }
-               }
-
-               var r = result.length ? [ result[0] ] : [];
-
-               check: for ( var i = 1, rl = result.length; i < rl; i++ ) {
-                       for ( var j = 0; j < i; j++ )
-                               if ( result[i] == r[j] )
-                                       continue check;
-
-                       r.push( result[i] );
-               }
-
-               return r;
-       }
-});
-/*
- * Whether the W3C compliant box model is being used.
- *
- * @property
- * @name $.boxModel
- * @type Boolean
- * @cat JavaScript
- */
-new function() {
-       var b = navigator.userAgent.toLowerCase();
-
-       // Figure out what browser is being used
-       jQuery.browser = {
-               safari: /webkit/.test(b),
-               opera: /opera/.test(b),
-               msie: /msie/.test(b) && !/opera/.test(b),
-               mozilla: /mozilla/.test(b) && !/(compatible|webkit)/.test(b)
-       };
-
-       // Check to see if the W3C box model is being used
-       jQuery.boxModel = !jQuery.browser.msie || document.compatMode == "CSS1Compat";
-};
-
-jQuery.each({
-       parent: "a.parentNode",
-       parents: "jQuery.parents(a)",
-       next: "jQuery.nth(a,2,'nextSibling')",
-       prev: "jQuery.nth(a,2,'previousSibling')",
-       siblings: "jQuery.sibling(a.parentNode.firstChild,a)",
-       children: "jQuery.sibling(a.firstChild)"
-}, function(i,n){
-       jQuery.fn[ i ] = function(a) {
-               var ret = jQuery.map(this,n);
-               if ( a && typeof a == "string" )
-                       ret = jQuery.multiFilter(a,ret);
-               return this.pushStack( ret );
-       };
-});
-
-jQuery.each({
-       appendTo: "append",
-       prependTo: "prepend",
-       insertBefore: "before",
-       insertAfter: "after"
-}, function(i,n){
-       jQuery.fn[ i ] = function(){
-               var a = arguments;
-               return this.each(function(){
-                       for ( var j = 0, al = a.length; j < al; j++ )
-                               jQuery(a[j])[n]( this );
-               });
-       };
-});
-
-jQuery.each( {
-       removeAttr: function( key ) {
-               jQuery.attr( this, key, "" );
-               this.removeAttribute( key );
-       },
-       addClass: function(c){
-               jQuery.className.add(this,c);
-       },
-       removeClass: function(c){
-               jQuery.className.remove(this,c);
-       },
-       toggleClass: function( c ){
-               jQuery.className[ jQuery.className.has(this,c) ? "remove" : "add" ](this, c);
-       },
-       remove: function(a){
-               if ( !a || jQuery.filter( a, [this] ).r.length )
-                       this.parentNode.removeChild( this );
-       },
-       empty: function() {
-               while ( this.firstChild )
-                       this.removeChild( this.firstChild );
-       }
-}, function(i,n){
-       jQuery.fn[ i ] = function() {
-               return this.each( n, arguments );
-       };
-});
-
-jQuery.each( [ "eq", "lt", "gt", "contains" ], function(i,n){
-       jQuery.fn[ n ] = function(num,fn) {
-               return this.filter( ":" + n + "(" + num + ")", fn );
-       };
-});
-
-jQuery.each( [ "height", "width" ], function(i,n){
-       jQuery.fn[ n ] = function(h) {
-               return h == undefined ?
-                       ( this.length ? jQuery.css( this[0], n ) : null ) :
-                       this.css( n, h.constructor == String ? h : h + "px" );
-       };
-});
-jQuery.extend({
-       expr: {
-               "": "m[2]=='*'||jQuery.nodeName(a,m[2])",
-               "#": "a.getAttribute('id')==m[2]",
-               ":": {
-                       // Position Checks
-                       lt: "i<m[3]-0",
-                       gt: "i>m[3]-0",
-                       nth: "m[3]-0==i",
-                       eq: "m[3]-0==i",
-                       first: "i==0",
-                       last: "i==r.length-1",
-                       even: "i%2==0",
-                       odd: "i%2",
-
-                       // Child Checks
-                       "nth-child": "jQuery.nth(a.parentNode.firstChild,m[3],'nextSibling',a)==a",
-                       "first-child": "jQuery.nth(a.parentNode.firstChild,1,'nextSibling')==a",
-                       "last-child": "jQuery.nth(a.parentNode.lastChild,1,'previousSibling')==a",
-                       "only-child": "jQuery.sibling(a.parentNode.firstChild).length==1",
-
-                       // Parent Checks
-                       parent: "a.firstChild",
-                       empty: "!a.firstChild",
-
-                       // Text Check
-                       contains: "jQuery.fn.text.apply([a]).indexOf(m[3])>=0",
-
-                       // Visibility
-                       visible: 'a.type!="hidden"&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden"',
-                       hidden: 'a.type=="hidden"||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden"',
-
-                       // Form attributes
-                       enabled: "!a.disabled",
-                       disabled: "a.disabled",
-                       checked: "a.checked",
-                       selected: "a.selected||jQuery.attr(a,'selected')",
-
-                       // Form elements
-                       text: "a.type=='text'",
-                       radio: "a.type=='radio'",
-                       checkbox: "a.type=='checkbox'",
-                       file: "a.type=='file'",
-                       password: "a.type=='password'",
-                       submit: "a.type=='submit'",
-                       image: "a.type=='image'",
-                       reset: "a.type=='reset'",
-                       button: 'a.type=="button"||jQuery.nodeName(a,"button")',
-                       input: "/input|select|textarea|button/i.test(a.nodeName)"
-               },
-               ".": "jQuery.className.has(a,m[2])",
-               "@": {
-                       "=": "z==m[4]",
-                       "!=": "z!=m[4]",
-                       "^=": "z&&!z.indexOf(m[4])",
-                       "$=": "z&&z.substr(z.length - m[4].length,m[4].length)==m[4]",
-                       "*=": "z&&z.indexOf(m[4])>=0",
-                       "": "z",
-                       _resort: function(m){
-                               return ["", m[1], m[3], m[2], m[5]];
-                       },
-                       _prefix: "z=a[m[3]];if(!z||/href|src/.test(m[3]))z=jQuery.attr(a,m[3]);"
-               },
-               "[": "jQuery.find(m[2],a).length"
-       },
-       
-       // The regular expressions that power the parsing engine
-       parse: [
-               // Match: [@value='test'], [@foo]
-               /^\[ *(@)([a-z0-9_-]*) *([!*$^=]*) *('?"?)(.*?)\4 *\]/i,
-
-               // Match: [div], [div p]
-               /^(\[)\s*(.*?(\[.*?\])?[^[]*?)\s*\]/,
-
-               // Match: :contains('foo')
-               /^(:)([a-z0-9_-]*)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/i,
-
-               // Match: :even, :last-chlid
-               /^([:.#]*)([a-z0-9_*-]*)/i
-       ],
-
-       token: [
-               /^(\/?\.\.)/, "a.parentNode",
-               /^(>|\/)/, "jQuery.sibling(a.firstChild)",
-               /^(\+)/, "jQuery.nth(a,2,'nextSibling')",
-               /^(~)/, function(a){
-                       var s = jQuery.sibling(a.parentNode.firstChild);
-                       return s.slice(jQuery.inArray(a,s) + 1);
-               }
-       ],
-
-       multiFilter: function( expr, elems, not ) {
-               var old, cur = [];
-
-               while ( expr && expr != old ) {
-                       old = expr;
-                       var f = jQuery.filter( expr, elems, not );
-                       expr = f.t.replace(/^\s*,\s*/, "" );
-                       cur = not ? elems = f.r : jQuery.merge( cur, f.r );
-               }
-
-               return cur;
-       },
-       find: function( t, context ) {
-               // Quickly handle non-string expressions
-               if ( typeof t != "string" )
-                       return [ t ];
-
-               // Make sure that the context is a DOM Element
-               if ( context && !context.nodeType )
-                       context = null;
-
-               // Set the correct context (if none is provided)
-               context = context || document;
-
-               // Handle the common XPath // expression
-               if ( !t.indexOf("//") ) {
-                       context = context.documentElement;
-                       t = t.substr(2,t.length);
-
-               // And the / root expression
-               } else if ( !t.indexOf("/") ) {
-                       context = context.documentElement;
-                       t = t.substr(1,t.length);
-                       if ( t.indexOf("/") >= 1 )
-                               t = t.substr(t.indexOf("/"),t.length);
-               }
-
-               // Initialize the search
-               var ret = [context], done = [], last = null;
-
-               // Continue while a selector expression exists, and while
-               // we're no longer looping upon ourselves
-               while ( t && last != t ) {
-                       var r = [];
-                       last = t;
-
-                       t = jQuery.trim(t).replace( /^\/\//i, "" );
-
-                       var foundToken = false;
-
-                       // An attempt at speeding up child selectors that
-                       // point to a specific element tag
-                       var re = /^[\/>]\s*([a-z0-9*-]+)/i;
-                       var m = re.exec(t);
-
-                       if ( m ) {
-                               // Perform our own iteration and filter
-                               jQuery.each( ret, function(){
-                                       for ( var c = this.firstChild; c; c = c.nextSibling )
-                                               if ( c.nodeType == 1 && ( jQuery.nodeName(c, m[1]) || m[1] == "*" ) )
-                                                       r.push( c );
-                               });
-
-                               ret = r;
-                               t = t.replace( re, "" );
-                               if ( t.indexOf(" ") == 0 ) continue;
-                               foundToken = true;
-                       } else {
-                               // Look for pre-defined expression tokens
-                               for ( var i = 0; i < jQuery.token.length; i += 2 ) {
-                                       // Attempt to match each, individual, token in
-                                       // the specified order
-                                       var re = jQuery.token[i];
-                                       var m = re.exec(t);
-
-                                       // If the token match was found
-                                       if ( m ) {
-                                               // Map it against the token's handler
-                                               r = ret = jQuery.map( ret, jQuery.isFunction( jQuery.token[i+1] ) ?
-                                                       jQuery.token[i+1] :
-                                                       function(a){ return eval(jQuery.token[i+1]); });
-
-                                               // And remove the token
-                                               t = jQuery.trim( t.replace( re, "" ) );
-                                               foundToken = true;
-                                               break;
-                                       }
-                               }
-                       }
-
-                       // See if there's still an expression, and that we haven't already
-                       // matched a token
-                       if ( t && !foundToken ) {
-                               // Handle multiple expressions
-                               if ( !t.indexOf(",") ) {
-                                       // Clean the result set
-                                       if ( ret[0] == context ) ret.shift();
-
-                                       // Merge the result sets
-                                       jQuery.merge( done, ret );
-
-                                       // Reset the context
-                                       r = ret = [context];
-
-                                       // Touch up the selector string
-                                       t = " " + t.substr(1,t.length);
-
-                               } else {
-                                       // Optomize for the case nodeName#idName
-                                       var re2 = /^([a-z0-9_-]+)(#)([a-z0-9\\*_-]*)/i;
-                                       var m = re2.exec(t);
-                                       
-                                       // Re-organize the results, so that they're consistent
-                                       if ( m ) {
-                                          m = [ 0, m[2], m[3], m[1] ];
-
-                                       } else {
-                                               // Otherwise, do a traditional filter check for
-                                               // ID, class, and element selectors
-                                               re2 = /^([#.]?)([a-z0-9\\*_-]*)/i;
-                                               m = re2.exec(t);
-                                       }
-
-                                       // Try to do a global search by ID, where we can
-                                       if ( m[1] == "#" && ret[ret.length-1].getElementById ) {
-                                               // Optimization for HTML document case
-                                               var oid = ret[ret.length-1].getElementById(m[2]);
-                                               
-                                               // Do a quick check for the existence of the actual ID attribute
-                                               // to avoid selecting by the name attribute in IE
-                                               if ( jQuery.browser.msie && oid && oid.id != m[2] )
-                                                       oid = jQuery('[@id="'+m[2]+'"]', ret[ret.length-1])[0];
-
-                                               // Do a quick check for node name (where applicable) so
-                                               // that div#foo searches will be really fast
-                                               ret = r = oid && (!m[3] || jQuery.nodeName(oid, m[3])) ? [oid] : [];
-
-                                       } else {
-                                               // Pre-compile a regular expression to handle class searches
-                                               if ( m[1] == "." )
-                                                       var rec = new RegExp("(^|\\s)" + m[2] + "(\\s|$)");
-
-                                               // We need to find all descendant elements, it is more
-                                               // efficient to use getAll() when we are already further down
-                                               // the tree - we try to recognize that here
-                                               jQuery.each( ret, function(){
-                                                       // Grab the tag name being searched for
-                                                       var tag = m[1] != "" || m[0] == "" ? "*" : m[2];
-
-                                                       // Handle IE7 being really dumb about <object>s
-                                                       if ( jQuery.nodeName(this, "object") && tag == "*" )
-                                                               tag = "param";
-
-                                                       jQuery.merge( r,
-                                                               m[1] != "" && ret.length != 1 ?
-                                                                       jQuery.getAll( this, [], m[1], m[2], rec ) :
-                                                                       this.getElementsByTagName( tag )
-                                                       );
-                                               });
-
-                                               // It's faster to filter by class and be done with it
-                                               if ( m[1] == "." && ret.length == 1 )
-                                                       r = jQuery.grep( r, function(e) {
-                                                               return rec.test(e.className);
-                                                       });
-
-                                               // Same with ID filtering
-                                               if ( m[1] == "#" && ret.length == 1 ) {
-                                                       // Remember, then wipe out, the result set
-                                                       var tmp = r;
-                                                       r = [];
-
-                                                       // Then try to find the element with the ID
-                                                       jQuery.each( tmp, function(){
-                                                               if ( this.getAttribute("id") == m[2] ) {
-                                                                       r = [ this ];
-                                                                       return false;
-                                                               }
-                                                       });
-                                               }
-
-                                               ret = r;
-                                       }
-
-                                       t = t.replace( re2, "" );
-                               }
-
-                       }
-
-                       // If a selector string still exists
-                       if ( t ) {
-                               // Attempt to filter it
-                               var val = jQuery.filter(t,r);
-                               ret = r = val.r;
-                               t = jQuery.trim(val.t);
-                       }
-               }
-
-               // Remove the root context
-               if ( ret && ret[0] == context ) ret.shift();
-
-               // And combine the results
-               jQuery.merge( done, ret );
-
-               return done;
-       },
-
-       filter: function(t,r,not) {
-               // Look for common filter expressions
-               while ( t && /^[a-z[({<*:.#]/i.test(t) ) {
-
-                       var p = jQuery.parse, m;
-
-                       jQuery.each( p, function(i,re){
-               
-                               // Look for, and replace, string-like sequences
-                               // and finally build a regexp out of it
-                               m = re.exec( t );
-
-                               if ( m ) {
-                                       // Remove what we just matched
-                                       t = t.substring( m[0].length );
-
-                                       // Re-organize the first match
-                                       if ( jQuery.expr[ m[1] ]._resort )
-                                               m = jQuery.expr[ m[1] ]._resort( m );
-
-                                       return false;
-                               }
-                       });
-
-                       // :not() is a special case that can be optimized by
-                       // keeping it out of the expression list
-                       if ( m[1] == ":" && m[2] == "not" )
-                               r = jQuery.filter(m[3], r, true).r;
-
-                       // Handle classes as a special case (this will help to
-                       // improve the speed, as the regexp will only be compiled once)
-                       else if ( m[1] == "." ) {
-
-                               var re = new RegExp("(^|\\s)" + m[2] + "(\\s|$)");
-                               r = jQuery.grep( r, function(e){
-                                       return re.test(e.className || "");
-                               }, not);
-
-                       // Otherwise, find the expression to execute
-                       } else {
-                               var f = jQuery.expr[m[1]];
-                               if ( typeof f != "string" )
-                                       f = jQuery.expr[m[1]][m[2]];
-
-                               // Build a custom macro to enclose it
-                               eval("f = function(a,i){" +
-                                       ( jQuery.expr[ m[1] ]._prefix || "" ) +
-                                       "return " + f + "}");
-
-                               // Execute it against the current filter
-                               r = jQuery.grep( r, f, not );
-                       }
-               }
-
-               // Return an array of filtered elements (r)
-               // and the modified expression string (t)
-               return { r: r, t: t };
-       },
-       
-       getAll: function( o, r, token, name, re ) {
-               for ( var s = o.firstChild; s; s = s.nextSibling )
-                       if ( s.nodeType == 1 ) {
-                               var add = true;
-
-                               if ( token == "." )
-                                       add = s.className && re.test(s.className);
-                               else if ( token == "#" )
-                                       add = s.getAttribute("id") == name;
-       
-                               if ( add )
-                                       r.push( s );
-
-                               if ( token == "#" && r.length ) break;
-
-                               if ( s.firstChild )
-                                       jQuery.getAll( s, r, token, name, re );
-                       }
-
-               return r;
-       },
-       parents: function( elem ){
-               var matched = [];
-               var cur = elem.parentNode;
-               while ( cur && cur != document ) {
-                       matched.push( cur );
-                       cur = cur.parentNode;
-               }
-               return matched;
-       },
-       nth: function(cur,result,dir,elem){
-               result = result || 1;
-               var num = 0;
-               for ( ; cur; cur = cur[dir] ) {
-                       if ( cur.nodeType == 1 ) num++;
-                       if ( num == result || result == "even" && num % 2 == 0 && num > 1 && cur == elem ||
-                               result == "odd" && num % 2 == 1 && cur == elem ) return cur;
-               }
-       },
-       sibling: function( n, elem ) {
-               var r = [];
-
-               for ( ; n; n = n.nextSibling ) {
-                       if ( n.nodeType == 1 && (!elem || n != elem) )
-                               r.push( n );
-               }
-
-               return r;
-       }
-});
-/*
- * A number of helper functions used for managing events.
- * Many of the ideas behind this code orignated from 
- * Dean Edwards' addEvent library.
- */
-jQuery.event = {
-
-       // Bind an event to an element
-       // Original by Dean Edwards
-       add: function(element, type, handler, data) {
-               // For whatever reason, IE has trouble passing the window object
-               // around, causing it to be cloned in the process
-               if ( jQuery.browser.msie && element.setInterval != undefined )
-                       element = window;
-
-               // if data is passed, bind to handler
-               if( data ) 
-                       handler.data = data;
-
-               // Make sure that the function being executed has a unique ID
-               if ( !handler.guid )
-                       handler.guid = this.guid++;
-
-               // Init the element's event structure
-               if (!element.$events)
-                       element.$events = {};
-
-               // Get the current list of functions bound to this event
-               var handlers = element.$events[type];
-
-               // If it hasn't been initialized yet
-               if (!handlers) {
-                       // Init the event handler queue
-                       handlers = element.$events[type] = {};
-
-                       // Remember an existing handler, if it's already there
-                       if (element["on" + type])
-                               handlers[0] = element["on" + type];
-               }
-
-               // Add the function to the element's handler list
-               handlers[handler.guid] = handler;
-
-               // And bind the global event handler to the element
-               element["on" + type] = this.handle;
-
-               // Remember the function in a global list (for triggering)
-               if (!this.global[type])
-                       this.global[type] = [];
-               this.global[type].push( element );
-       },
-
-       guid: 1,
-       global: {},
-
-       // Detach an event or set of events from an element
-       remove: function(element, type, handler) {
-               if (element.$events) {
-                       var i,j,k;
-                       if ( type && type.type ) { // type is actually an event object here
-                               handler = type.handler;
-                               type    = type.type;
-                       }
-                       
-                       if (type && element.$events[type])
-                               // remove the given handler for the given type
-                               if ( handler )
-                                       delete element.$events[type][handler.guid];
-                                       
-                               // remove all handlers for the given type
-                               else
-                                       for ( i in element.$events[type] )
-                                               delete element.$events[type][i];
-                                               
-                       // remove all handlers          
-                       else
-                               for ( j in element.$events )
-                                       this.remove( element, j );
-                       
-                       // remove event handler if no more handlers exist
-                       for ( k in element.$events[type] )
-                               if (k) {
-                                       k = true;
-                                       break;
-                               }
-                       if (!k) element["on" + type] = null;
-               }
-       },
-
-       trigger: function(type, data, element) {
-               // Clone the incoming data, if any
-               data = jQuery.makeArray(data || []);
-
-               // Handle a global trigger
-               if ( !element )
-                       jQuery.each( this.global[type] || [], function(){
-                               jQuery.event.trigger( type, data, this );
-                       });
-
-               // Handle triggering a single element
-               else {
-                       var handler = element["on" + type ], val,
-                               fn = jQuery.isFunction( element[ type ] );
-
-                       if ( handler ) {
-                               // Pass along a fake event
-                               data.unshift( this.fix({ type: type, target: element }) );
-       
-                               // Trigger the event
-                               if ( (val = handler.apply( element, data )) !== false )
-                                       this.triggered = true;
-                       }
-
-                       if ( fn && val !== false )
-                               element[ type ]();
-
-                       this.triggered = false;
-               }
-       },
-
-       handle: function(event) {
-               // Handle the second event of a trigger and when
-               // an event is called after a page has unloaded
-               if ( typeof jQuery == "undefined" || jQuery.event.triggered ) return;
-
-               // Empty object is for triggered events with no data
-               event = jQuery.event.fix( event || window.event || {} ); 
-
-               // returned undefined or false
-               var returnValue;
-
-               var c = this.$events[event.type];
-
-               var args = [].slice.call( arguments, 1 );
-               args.unshift( event );
-
-               for ( var j in c ) {
-                       // Pass in a reference to the handler function itself
-                       // So that we can later remove it
-                       args[0].handler = c[j];
-                       args[0].data = c[j].data;
-
-                       if ( c[j].apply( this, args ) === false ) {
-                               event.preventDefault();
-                               event.stopPropagation();
-                               returnValue = false;
-                       }
-               }
-
-               // Clean up added properties in IE to prevent memory leak
-               if (jQuery.browser.msie) event.target = event.preventDefault = event.stopPropagation = event.handler = event.data = null;
-
-               return returnValue;
-       },
-
-       fix: function(event) {
-               // Fix target property, if necessary
-               if ( !event.target && event.srcElement )
-                       event.target = event.srcElement;
-
-               // Calculate pageX/Y if missing and clientX/Y available
-               if ( event.pageX == undefined && event.clientX != undefined ) {
-                       var e = document.documentElement, b = document.body;
-                       event.pageX = event.clientX + (e.scrollLeft || b.scrollLeft);
-                       event.pageY = event.clientY + (e.scrollTop || b.scrollTop);
-               }
-                               
-               // check if target is a textnode (safari)
-               if (jQuery.browser.safari && event.target.nodeType == 3) {
-                       // store a copy of the original event object 
-                       // and clone because target is read only
-                       var originalEvent = event;
-                       event = jQuery.extend({}, originalEvent);
-                       
-                       // get parentnode from textnode
-                       event.target = originalEvent.target.parentNode;
-                       
-                       // add preventDefault and stopPropagation since 
-                       // they will not work on the clone
-                       event.preventDefault = function() {
-                               return originalEvent.preventDefault();
-                       };
-                       event.stopPropagation = function() {
-                               return originalEvent.stopPropagation();
-                       };
-               }
-               
-               // fix preventDefault and stopPropagation
-               if (!event.preventDefault)
-                       event.preventDefault = function() {
-                               this.returnValue = false;
-                       };
-                       
-               if (!event.stopPropagation)
-                       event.stopPropagation = function() {
-                               this.cancelBubble = true;
-                       };
-                       
-               return event;
-       }
-};
-
-jQuery.fn.extend({
-       bind: function( type, data, fn ) {
-               return this.each(function(){
-                       jQuery.event.add( this, type, fn || data, data );
-               });
-       },
-       one: function( type, data, fn ) {
-               return this.each(function(){
-                       jQuery.event.add( this, type, function(event) {
-                               jQuery(this).unbind(event);
-                               return (fn || data).apply( this, arguments);
-                       }, data);
-               });
-       },
-       unbind: function( type, fn ) {
-               return this.each(function(){
-                       jQuery.event.remove( this, type, fn );
-               });
-       },
-       trigger: function( type, data ) {
-               return this.each(function(){
-                       jQuery.event.trigger( type, data, this );
-               });
-       },
-       toggle: function() {
-               // Save reference to arguments for access in closure
-               var a = arguments;
-
-               return this.click(function(e) {
-                       // Figure out which function to execute
-                       this.lastToggle = this.lastToggle == 0 ? 1 : 0;
-                       
-                       // Make sure that clicks stop
-                       e.preventDefault();
-                       
-                       // and execute the function
-                       return a[this.lastToggle].apply( this, [e] ) || false;
-               });
-       },
-       hover: function(f,g) {
-               
-               // A private function for handling mouse 'hovering'
-               function handleHover(e) {
-                       // Check if mouse(over|out) are still within the same parent element
-                       var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget;
-       
-                       // Traverse up the tree
-                       while ( p && p != this ) try { p = p.parentNode } catch(e) { p = this; };
-                       
-                       // If we actually just moused on to a sub-element, ignore it
-                       if ( p == this ) return false;
-                       
-                       // Execute the right function
-                       return (e.type == "mouseover" ? f : g).apply(this, [e]);
-               }
-               
-               // Bind the function to the two event listeners
-               return this.mouseover(handleHover).mouseout(handleHover);
-       },
-       ready: function(f) {
-               // If the DOM is already ready
-               if ( jQuery.isReady )
-                       // Execute the function immediately
-                       f.apply( document, [jQuery] );
-                       
-               // Otherwise, remember the function for later
-               else {
-                       // Add the function to the wait list
-                       jQuery.readyList.push( function() { return f.apply(this, [jQuery]) } );
-               }
-       
-               return this;
-       }
-});
-
-jQuery.extend({
-       /*
-        * All the code that makes DOM Ready work nicely.
-        */
-       isReady: false,
-       readyList: [],
-       
-       // Handle when the DOM is ready
-       ready: function() {
-               // Make sure that the DOM is not already loaded
-               if ( !jQuery.isReady ) {
-                       // Remember that the DOM is ready
-                       jQuery.isReady = true;
-                       
-                       // If there are functions bound, to execute
-                       if ( jQuery.readyList ) {
-                               // Execute all of them
-                               jQuery.each( jQuery.readyList, function(){
-                                       this.apply( document );
-                               });
-                               
-                               // Reset the list of functions
-                               jQuery.readyList = null;
-                       }
-                       // Remove event lisenter to avoid memory leak
-                       if ( jQuery.browser.mozilla || jQuery.browser.opera )
-                               document.removeEventListener( "DOMContentLoaded", jQuery.ready, false );
-               }
-       }
-});
-
-new function(){
-
-       jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
-               "mousedown,mouseup,mousemove,mouseover,mouseout,change,select," + 
-               "submit,keydown,keypress,keyup,error").split(","), function(i,o){
-               
-               // Handle event binding
-               jQuery.fn[o] = function(f){
-                       return f ? this.bind(o, f) : this.trigger(o);
-               };
-                       
-       });
-       
-       // If Mozilla is used
-       if ( jQuery.browser.mozilla || jQuery.browser.opera )
-               // Use the handy event callback
-               document.addEventListener( "DOMContentLoaded", jQuery.ready, false );
-       
-       // If IE is used, use the excellent hack by Matthias Miller
-       // http://www.outofhanwell.com/blog/index.php?title=the_window_onload_problem_revisited
-       else if ( jQuery.browser.msie ) {
-       
-               // Only works if you document.write() it
-               document.write("<scr" + "ipt id=__ie_init defer=true " + 
-                       "src=//:><\/script>");
-       
-               // Use the defer script hack
-               var script = document.getElementById("__ie_init");
-               
-               // script does not exist if jQuery is loaded dynamically
-               if ( script ) 
-                       script.onreadystatechange = function() {
-                               if ( this.readyState != "complete" ) return;
-                               this.parentNode.removeChild( this );
-                               jQuery.ready();
-                       };
-       
-               // Clear from memory
-               script = null;
-       
-       // If Safari  is used
-       } else if ( jQuery.browser.safari )
-               // Continually check to see if the document.readyState is valid
-               jQuery.safariTimer = setInterval(function(){
-                       // loaded and complete are both valid states
-                       if ( document.readyState == "loaded" || 
-                               document.readyState == "complete" ) {
-       
-                               // If either one are found, remove the timer
-                               clearInterval( jQuery.safariTimer );
-                               jQuery.safariTimer = null;
-       
-                               // and execute any waiting functions
-                               jQuery.ready();
-                       }
-               }, 10); 
-
-       // A fallback to window.onload, that will always work
-       jQuery.event.add( window, "load", jQuery.ready );
-       
-};
-
-// Clean up after IE to avoid memory leaks
-if (jQuery.browser.msie)
-       jQuery(window).one("unload", function() {
-               var global = jQuery.event.global;
-               for ( var type in global ) {
-                       var els = global[type], i = els.length;
-                       if ( i && type != 'unload' )
-                               do
-                                       jQuery.event.remove(els[i-1], type);
-                               while (--i);
-               }
-       });
-jQuery.fn.extend({
-       loadIfModified: function( url, params, callback ) {
-               this.load( url, params, callback, 1 );
-       },
-       load: function( url, params, callback, ifModified ) {
-               if ( jQuery.isFunction( url ) )
-                       return this.bind("load", url);
-
-               callback = callback || function(){};
-
-               // Default to a GET request
-               var type = "GET";
-
-               // If the second parameter was provided
-               if ( params )
-                       // If it's a function
-                       if ( jQuery.isFunction( params ) ) {
-                               // We assume that it's the callback
-                               callback = params;
-                               params = null;
-
-                       // Otherwise, build a param string
-                       } else {
-                               params = jQuery.param( params );
-                               type = "POST";
-                       }
-
-               var self = this;
-
-               // Request the remote document
-               jQuery.ajax({
-                       url: url,
-                       type: type,
-                       data: params,
-                       ifModified: ifModified,
-                       complete: function(res, status){
-                               if ( status == "success" || !ifModified && status == "notmodified" )
-                                       // Inject the HTML into all the matched elements
-                                       self.attr("innerHTML", res.responseText)
-                                         // Execute all the scripts inside of the newly-injected HTML
-                                         .evalScripts()
-                                         // Execute callback
-                                         .each( callback, [res.responseText, status, res] );
-                               else
-                                       callback.apply( self, [res.responseText, status, res] );
-                       }
-               });
-               return this;
-       },
-       serialize: function() {
-               return jQuery.param( this );
-       },
-       evalScripts: function() {
-               return this.find("script").each(function(){
-                       if ( this.src )
-                               jQuery.getScript( this.src );
-                       else
-                               jQuery.globalEval( this.text || this.textContent || this.innerHTML || "" );
-               }).end();
-       }
-
-});
-
-// If IE is used, create a wrapper for the XMLHttpRequest object
-if ( !window.XMLHttpRequest )
-       XMLHttpRequest = function(){
-               return new ActiveXObject("Microsoft.XMLHTTP");
-       };
-
-// Attach a bunch of functions for handling common AJAX events
-
-jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
-       jQuery.fn[o] = function(f){
-               return this.bind(o, f);
-       };
-});
-
-jQuery.extend({
-       get: function( url, data, callback, type, ifModified ) {
-               // shift arguments if data argument was ommited
-               if ( jQuery.isFunction( data ) ) {
-                       callback = data;
-                       data = null;
-               }
-               
-               return jQuery.ajax({
-                       url: url,
-                       data: data,
-                       success: callback,
-                       dataType: type,
-                       ifModified: ifModified
-               });
-       },
-       getIfModified: function( url, data, callback, type ) {
-               return jQuery.get(url, data, callback, type, 1);
-       },
-       getScript: function( url, callback ) {
-               return jQuery.get(url, null, callback, "script");
-       },
-       getJSON: function( url, data, callback ) {
-               return jQuery.get(url, data, callback, "json");
-       },
-       post: function( url, data, callback, type ) {
-               if ( jQuery.isFunction( data ) ) {
-                       callback = data;
-                       data = {};
-               }
-
-               return jQuery.ajax({
-                       type: "POST",
-                       url: url,
-                       data: data,
-                       success: callback,
-                       dataType: type
-               });
-       },
-
-       // timeout (ms)
-       //timeout: 0,
-       ajaxTimeout: function( timeout ) {
-               jQuery.ajaxSettings.timeout = timeout;
-       },
-       ajaxSetup: function( settings ) {
-               jQuery.extend( jQuery.ajaxSettings, settings );
-       },
-
-       ajaxSettings: {
-               global: true,
-               type: "GET",
-               timeout: 0,
-               contentType: "application/x-www-form-urlencoded",
-               processData: true,
-               async: true,
-               data: null
-       },
-       
-       // Last-Modified header cache for next request
-       lastModified: {},
-       ajax: function( s ) {
-               // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout
-               s = jQuery.extend({}, jQuery.ajaxSettings, s);
-
-               // if data available
-               if ( s.data ) {
-                       // convert data if not already a string
-                       if (s.processData && typeof s.data != "string")
-                       s.data = jQuery.param(s.data);
-                       // append data to url for get requests
-                       if( s.type.toLowerCase() == "get" ) {
-                               // "?" + data or "&" + data (in case there are already params)
-                               s.url += ((s.url.indexOf("?") > -1) ? "&" : "?") + s.data;
-                               // IE likes to send both get and post data, prevent this
-                               s.data = null;
-                       }
-               }
-
-               // Watch for a new set of requests
-               if ( s.global && ! jQuery.active++ )
-                       jQuery.event.trigger( "ajaxStart" );
-
-               var requestDone = false;
-
-               // Create the request object
-               var xml = new XMLHttpRequest();
-
-               // Open the socket
-               xml.open(s.type, s.url, s.async);
-
-               // Set the correct header, if data is being sent
-               if ( s.data )
-                       xml.setRequestHeader("Content-Type", s.contentType);
-
-               // Set the If-Modified-Since header, if ifModified mode.
-               if ( s.ifModified )
-                       xml.setRequestHeader("If-Modified-Since",
-                               jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
-
-               // Set header so the called script knows that it's an XMLHttpRequest
-               xml.setRequestHeader("X-Requested-With", "XMLHttpRequest");
-
-               // Make sure the browser sends the right content length
-               if ( xml.overrideMimeType )
-                       xml.setRequestHeader("Connection", "close");
-                       
-               // Allow custom headers/mimetypes
-               if( s.beforeSend )
-                       s.beforeSend(xml);
-                       
-               if ( s.global )
-                   jQuery.event.trigger("ajaxSend", [xml, s]);
-
-               // Wait for a response to come back
-               var onreadystatechange = function(isTimeout){
-                       // The transfer is complete and the data is available, or the request timed out
-                       if ( xml && (xml.readyState == 4 || isTimeout == "timeout") ) {
-                               requestDone = true;
-                               
-                               // clear poll interval
-                               if (ival) {
-                                       clearInterval(ival);
-                                       ival = null;
-                               }
-                               
-                               var status;
-                               try {
-                                       status = jQuery.httpSuccess( xml ) && isTimeout != "timeout" ?
-                                               s.ifModified && jQuery.httpNotModified( xml, s.url ) ? "notmodified" : "success" : "error";
-                                       // Make sure that the request was successful or notmodified
-                                       if ( status != "error" ) {
-                                               // Cache Last-Modified header, if ifModified mode.
-                                               var modRes;
-                                               try {
-                                                       modRes = xml.getResponseHeader("Last-Modified");
-                                               } catch(e) {} // swallow exception thrown by FF if header is not available
-       
-                                               if ( s.ifModified && modRes )
-                                                       jQuery.lastModified[s.url] = modRes;
-       
-                                               // process the data (runs the xml through httpData regardless of callback)
-                                               var data = jQuery.httpData( xml, s.dataType );
-       
-                                               // If a local callback was specified, fire it and pass it the data
-                                               if ( s.success )
-                                                       s.success( data, status );
-       
-                                               // Fire the global callback
-                                               if( s.global )
-                                                       jQuery.event.trigger( "ajaxSuccess", [xml, s] );
-                                       } else
-                                               jQuery.handleError(s, xml, status);
-                               } catch(e) {
-                                       status = "error";
-                                       jQuery.handleError(s, xml, status, e);
-                               }
-
-                               // The request was completed
-                               if( s.global )
-                                       jQuery.event.trigger( "ajaxComplete", [xml, s] );
-
-                               // Handle the global AJAX counter
-                               if ( s.global && ! --jQuery.active )
-                                       jQuery.event.trigger( "ajaxStop" );
-
-                               // Process result
-                               if ( s.complete )
-                                       s.complete(xml, status);
-
-                               // Stop memory leaks
-                               if(s.async)
-                                       xml = null;
-                       }
-               };
-               
-               // don't attach the handler to the request, just poll it instead
-               var ival = setInterval(onreadystatechange, 13); 
-
-               // Timeout checker
-               if ( s.timeout > 0 )
-                       setTimeout(function(){
-                               // Check to see if the request is still happening
-                               if ( xml ) {
-                                       // Cancel the request
-                                       xml.abort();
-
-                                       if( !requestDone )
-                                               onreadystatechange( "timeout" );
-                               }
-                       }, s.timeout);
-                       
-               // Send the data
-               try {
-                       xml.send(s.data);
-               } catch(e) {
-                       jQuery.handleError(s, xml, null, e);
-               }
-               
-               // firefox 1.5 doesn't fire statechange for sync requests
-               if ( !s.async )
-                       onreadystatechange();
-               
-               // return XMLHttpRequest to allow aborting the request etc.
-               return xml;
-       },
-
-       handleError: function( s, xml, status, e ) {
-               throw(e);
-               // If a local callback was specified, fire it
-               if ( s.error ) s.error( xml, status, e );
-
-               // Fire the global callback
-               if ( s.global )
-                       jQuery.event.trigger( "ajaxError", [xml, s, e] );
-       },
-
-       // Counter for holding the number of active queries
-       active: 0,
-
-       // Determines if an XMLHttpRequest was successful or not
-       httpSuccess: function( r ) {
-               try {
-                       return !r.status && location.protocol == "file:" ||
-                               ( r.status >= 200 && r.status < 300 ) || r.status == 304 ||
-                               jQuery.browser.safari && r.status == undefined;
-               } catch(e){}
-               return false;
-       },
-
-       // Determines if an XMLHttpRequest returns NotModified
-       httpNotModified: function( xml, url ) {
-               try {
-                       var xmlRes = xml.getResponseHeader("Last-Modified");
-
-                       // Firefox always returns 200. check Last-Modified date
-                       return xml.status == 304 || xmlRes == jQuery.lastModified[url] ||
-                               jQuery.browser.safari && xml.status == undefined;
-               } catch(e){}
-               return false;
-       },
-
-       /* Get the data out of an XMLHttpRequest.
-        * Return parsed XML if content-type header is "xml" and type is "xml" or omitted,
-        * otherwise return plain text.
-        * (String) data - The type of data that you're expecting back,
-        * (e.g. "xml", "html", "script")
-        */
-       httpData: function( r, type ) {
-               var ct = r.getResponseHeader("content-type");
-               var data = !type && ct && ct.indexOf("xml") >= 0;
-               data = type == "xml" || data ? r.responseXML : r.responseText;
-
-               // If the type is "script", eval it in global context
-               if ( type == "script" )
-                       jQuery.globalEval( data );
-
-               // Get the JavaScript object, if JSON is used.
-               if ( type == "json" )
-                       eval( "data = " + data );
-
-               // evaluate scripts within html
-               if ( type == "html" )
-                       jQuery("<div>").html(data).evalScripts();
-
-               return data;
-       },
-
-       // Serialize an array of form elements or a set of
-       // key/values into a query string
-       param: function( a ) {
-               var s = [];
-
-               // If an array was passed in, assume that it is an array
-               // of form elements
-               if ( a.constructor == Array || a.jquery )
-                       // Serialize the form elements
-                       jQuery.each( a, function(){
-                               s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) );
-                       });
-
-               // Otherwise, assume that it's an object of key/value pairs
-               else
-                       // Serialize the key/values
-                       for ( var j in a )
-                               // If the value is an array then the key names need to be repeated
-                               if ( a[j] && a[j].constructor == Array )
-                                       jQuery.each( a[j], function(){
-                                               s.push( encodeURIComponent(j) + "=" + encodeURIComponent( this ) );
-                                       });
-                               else
-                                       s.push( encodeURIComponent(j) + "=" + encodeURIComponent( a[j] ) );
-
-               // Return the resulting serialization
-               return s.join("&");
-       },
-       
-       // evalulates a script in global context
-       // not reliable for safari
-       globalEval: function( data ) {
-               if ( window.execScript )
-                       window.execScript( data );
-               else if ( jQuery.browser.safari )
-                       // safari doesn't provide a synchronous global eval
-                       window.setTimeout( data, 0 );
-               else
-                       eval.call( window, data );
-       }
-
-});
-jQuery.fn.extend({
-
-       show: function(speed,callback){
-               var hidden = this.filter(":hidden");
-               speed ?
-                       hidden.animate({
-                               height: "show", width: "show", opacity: "show"
-                       }, speed, callback) :
-                       
-                       hidden.each(function(){
-                               this.style.display = this.oldblock ? this.oldblock : "";
-                               if ( jQuery.css(this,"display") == "none" )
-                                       this.style.display = "block";
-                       });
-               return this;
-       },
-
-       hide: function(speed,callback){
-               var visible = this.filter(":visible");
-               speed ?
-                       visible.animate({
-                               height: "hide", width: "hide", opacity: "hide"
-                       }, speed, callback) :
-                       
-                       visible.each(function(){
-                               this.oldblock = this.oldblock || jQuery.css(this,"display");
-                               if ( this.oldblock == "none" )
-                                       this.oldblock = "block";
-                               this.style.display = "none";
-                       });
-               return this;
-       },
-
-       // Save the old toggle function
-       _toggle: jQuery.fn.toggle,
-       toggle: function( fn, fn2 ){
-               var args = arguments;
-               return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?
-                       this._toggle( fn, fn2 ) :
-                       this.each(function(){
-                               jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]
-                                       .apply( jQuery(this), args );
-                       });
-       },
-       slideDown: function(speed,callback){
-               return this.animate({height: "show"}, speed, callback);
-       },
-       slideUp: function(speed,callback){
-               return this.animate({height: "hide"}, speed, callback);
-       },
-       slideToggle: function(speed, callback){
-               return this.each(function(){
-                       var state = jQuery(this).is(":hidden") ? "show" : "hide";
-                       jQuery(this).animate({height: state}, speed, callback);
-               });
-       },
-       fadeIn: function(speed, callback){
-               return this.animate({opacity: "show"}, speed, callback);
-       },
-       fadeOut: function(speed, callback){
-               return this.animate({opacity: "hide"}, speed, callback);
-       },
-       fadeTo: function(speed,to,callback){
-               return this.animate({opacity: to}, speed, callback);
-       },
-       animate: function( prop, speed, easing, callback ) {
-               return this.queue(function(){
-               
-                       this.curAnim = jQuery.extend({}, prop);
-                       var opt = jQuery.speed(speed, easing, callback);
-                       
-                       for ( var p in prop ) {
-                               var e = new jQuery.fx( this, opt, p );
-                               if ( prop[p].constructor == Number )
-                                       e.custom( e.cur(), prop[p] );
-                               else
-                                       e[ prop[p] ]( prop );
-                       }
-                       
-               });
-       },
-       queue: function(type,fn){
-               if ( !fn ) {
-                       fn = type;
-                       type = "fx";
-               }
-       
-               return this.each(function(){
-                       if ( !this.queue )
-                               this.queue = {};
-       
-                       if ( !this.queue[type] )
-                               this.queue[type] = [];
-       
-                       this.queue[type].push( fn );
-               
-                       if ( this.queue[type].length == 1 )
-                               fn.apply(this);
-               });
-       }
-
-});
-
-jQuery.extend({
-       
-       speed: function(speed, easing, fn) {
-               var opt = speed && speed.constructor == Object ? speed : {
-                       complete: fn || !fn && easing || 
-                               jQuery.isFunction( speed ) && speed,
-                       duration: speed,
-                       easing: fn && easing || easing && easing.constructor != Function && easing
-               };
-
-               opt.duration = (opt.duration && opt.duration.constructor == Number ? 
-                       opt.duration : 
-                       { slow: 600, fast: 200 }[opt.duration]) || 400;
-       
-               // Queueing
-               opt.old = opt.complete;
-               opt.complete = function(){
-                       jQuery.dequeue(this, "fx");
-                       if ( jQuery.isFunction( opt.old ) )
-                               opt.old.apply( this );
-               };
-       
-               return opt;
-       },
-       
-       easing: {},
-       
-       queue: {},
-       
-       dequeue: function(elem,type){
-               type = type || "fx";
-       
-               if ( elem.queue && elem.queue[type] ) {
-                       // Remove self
-                       elem.queue[type].shift();
-       
-                       // Get next function
-                       var f = elem.queue[type][0];
-               
-                       if ( f ) f.apply( elem );
-               }
-       },
-
-       /*
-        * I originally wrote fx() as a clone of moo.fx and in the process
-        * of making it small in size the code became illegible to sane
-        * people. You've been warned.
-        */
-       
-       fx: function( elem, options, prop ){
-
-               var z = this;
-
-               // The styles
-               var y = elem.style;
-               
-               // Store display property
-               var oldDisplay = jQuery.css(elem, "display");
-
-               // Make sure that nothing sneaks out
-               y.overflow = "hidden";
-
-               // Simple function for setting a style value
-               z.a = function(){
-                       if ( options.step )
-                               options.step.apply( elem, [ z.now ] );
-
-                       if ( prop == "opacity" )
-                               jQuery.attr(y, "opacity", z.now); // Let attr handle opacity
-                       else if ( parseInt(z.now) ) // My hate for IE will never die
-                               y[prop] = parseInt(z.now) + "px";
-                       
-                       y.display = "block"; // Set display property to block for animation
-               };
-
-               // Figure out the maximum number to run to
-               z.max = function(){
-                       return parseFloat( jQuery.css(elem,prop) );
-               };
-
-               // Get the current size
-               z.cur = function(){
-                       var r = parseFloat( jQuery.curCSS(elem, prop) );
-                       return r && r > -10000 ? r : z.max();
-               };
-
-               // Start an animation from one number to another
-               z.custom = function(from,to){
-                       z.startTime = (new Date()).getTime();
-                       z.now = from;
-                       z.a();
-
-                       z.timer = setInterval(function(){
-                               z.step(from, to);
-                       }, 13);
-               };
-
-               // Simple 'show' function
-               z.show = function(){
-                       if ( !elem.orig ) elem.orig = {};
-
-                       // Remember where we started, so that we can go back to it later
-                       elem.orig[prop] = this.cur();
-
-                       options.show = true;
-
-                       // Begin the animation
-                       z.custom(0, elem.orig[prop]);
-
-                       // Stupid IE, look what you made me do
-                       if ( prop != "opacity" )
-                               y[prop] = "1px";
-               };
-
-               // Simple 'hide' function
-               z.hide = function(){
-                       if ( !elem.orig ) elem.orig = {};
-
-                       // Remember where we started, so that we can go back to it later
-                       elem.orig[prop] = this.cur();
-
-                       options.hide = true;
-
-                       // Begin the animation
-                       z.custom(elem.orig[prop], 0);
-               };
-               
-               //Simple 'toggle' function
-               z.toggle = function() {
-                       if ( !elem.orig ) elem.orig = {};
-
-                       // Remember where we started, so that we can go back to it later
-                       elem.orig[prop] = this.cur();
-
-                       if(oldDisplay == "none")  {
-                               options.show = true;
-                               
-                               // Stupid IE, look what you made me do
-                               if ( prop != "opacity" )
-                                       y[prop] = "1px";
-
-                               // Begin the animation
-                               z.custom(0, elem.orig[prop]);   
-                       } else {
-                               options.hide = true;
-
-                               // Begin the animation
-                               z.custom(elem.orig[prop], 0);
-                       }               
-               };
-
-               // Each step of an animation
-               z.step = function(firstNum, lastNum){
-                       var t = (new Date()).getTime();
-
-                       if (t > options.duration + z.startTime) {
-                               // Stop the timer
-                               clearInterval(z.timer);
-                               z.timer = null;
-
-                               z.now = lastNum;
-                               z.a();
-
-                               if (elem.curAnim) elem.curAnim[ prop ] = true;
-
-                               var done = true;
-                               for ( var i in elem.curAnim )
-                                       if ( elem.curAnim[i] !== true )
-                                               done = false;
-
-                               if ( done ) {
-                                       // Reset the overflow
-                                       y.overflow = "";
-                                       
-                                       // Reset the display
-                                       y.display = oldDisplay;
-                                       if (jQuery.css(elem, "display") == "none")
-                                               y.display = "block";
-
-                                       // Hide the element if the "hide" operation was done
-                                       if ( options.hide ) 
-                                               y.display = "none";
-
-                                       // Reset the properties, if the item has been hidden or shown
-                                       if ( options.hide || options.show )
-                                               for ( var p in elem.curAnim )
-                                                       if (p == "opacity")
-                                                               jQuery.attr(y, p, elem.orig[p]);
-                                                       else
-                                                               y[p] = "";
-                               }
-
-                               // If a callback was provided, execute it
-                               if ( done && jQuery.isFunction( options.complete ) )
-                                       // Execute the complete function
-                                       options.complete.apply( elem );
-                       } else {
-                               var n = t - this.startTime;
-                               // Figure out where in the animation we are and set the number
-                               var p = n / options.duration;
-                               
-                               // If the easing function exists, then use it 
-                               z.now = options.easing && jQuery.easing[options.easing] ?
-                                       jQuery.easing[options.easing](p, n,  firstNum, (lastNum-firstNum), options.duration) :
-                                       // else use default linear easing
-                                       ((-Math.cos(p*Math.PI)/2) + 0.5) * (lastNum-firstNum) + firstNum;
-
-                               // Perform the next step of the animation
-                               z.a();
-                       }
-               };
-       
-       }
-});
-}
diff --git a/www/masterkey/js/jquery.pack.js b/www/masterkey/js/jquery.pack.js
deleted file mode 100644 (file)
index 8de6049..0000000
+++ /dev/null
@@ -1 +0,0 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('7(1y 1z.6=="P"){1z.P=1z.P;q 6=k(a,c){7(1z==9)l 1g 6(a,c);a=a||11;7(6.1r(a))l 1g 6(11)[6.B.26?"26":"2z"](a);7(1y a=="21"){q m=/^[^<]*(<(.|\\s)+>)[^>]*$/.2y(a);7(m)a=6.44([m[1]]);H l 1g 6(c).2p(a)}l 9.6q(a.1m==2O&&a||(a.43||a.G&&a!=1z&&!a.23&&a[0]!=P&&a[0].23)&&6.38(a)||[a])};7(1y $!="P")6.56$=$;q $=6;6.B=6.8R={43:"1.1.2",8u:k(){l 9.G},G:0,28:k(1B){l 1B==P?6.38(9):9[1B]},2i:k(a){q F=6(a);F.6s=9;l F},6q:k(a){9.G=0;[].1e.V(9,a);l 9},J:k(B,1l){l 6.J(9,B,1l)},2c:k(17){q 52=-1;9.J(k(i){7(9==17)52=i});l 52},1h:k(1Z,N,u){q 17=1Z;7(1Z.1m==3v)7(N==P)l 9.G&&6[u||"1h"](9[0],1Z)||P;H{17={};17[1Z]=N}l 9.J(k(2c){L(q D 1u 17)6.1h(u?9.1d:9,D,6.D(9,17[D],u,2c,D))})},1s:k(1Z,N){l 9.1h(1Z,N,"3e")},2N:k(e){7(1y e=="21")l 9.3t().3w(11.8v(e));q t="";6.J(e||9,k(){6.J(9.37,k(){7(9.23!=8)t+=9.23!=1?9.6y:6.B.2N([9])})});l t},2x:k(){q a,1l=1A;l 9.J(k(){7(!a)a=6.44(1l,9.32);q b=a[0].49(R);9.T.35(b,9);1V(b.18)b=b.18;b.4P(9)})},3w:k(){l 9.3k(1A,R,1,k(a){9.4P(a)})},5D:k(){l 9.3k(1A,R,-1,k(a){9.35(a,9.18)})},5m:k(){l 9.3k(1A,12,1,k(a){9.T.35(a,9)})},5t:k(){l 9.3k(1A,12,-1,k(a){9.T.35(a,9.2b)})},2h:k(){l 9.6s||6([])},2p:k(t){l 9.2i(6.5T(6.34(9,k(a){l 6.2p(t,a)})),t)},55:k(4S){l 9.2i(6.34(9,k(a){q a=a.49(4S!=P?4S:R);a.$1c=14;l a}))},1f:k(t){l 9.2i(6.1r(t)&&6.2S(9,k(2G,2c){l t.V(2G,[2c])})||6.2U(t,9))},1O:k(t){l 9.2i(t.1m==3v&&6.2U(t,9,R)||6.2S(9,k(a){l(t.1m==2O||t.43)?6.3q(a,t)<0:a!=t}))},2f:k(t){l 9.2i(6.2o(9.28(),t.1m==3v?6(t).28():t.G!=P&&(!t.1b||t.1b=="8w")?t:[t]))},40:k(1o){l 1o?6.2U(1o,9).G>0:12},15:k(15){l 15==P?(9.G?9[0].N:14):9.1h("N",15)},50:k(15){l 15==P?(9.G?9[0].2P:14):9.3t().3w(15)},3k:k(1l,1L,3M,B){q 55=9.G>1,a;l 9.J(k(){7(!a){a=6.44(1l,9.32);7(3M<0)a.8x()}q 17=9;7(1L&&6.1b(9,"1L")&&6.1b(a[0],"3o"))17=9.5K("1P")[0]||9.4P(11.6p("1P"));6.J(a,k(){B.V(17,[55?9.49(R):9])})})}};6.1x=6.B.1x=k(){q 1M=1A[0],a=1;7(1A.G==1){1M=9;a=0}q D;1V(D=1A[a++])L(q i 1u D)1M[i]=D[i];l 1M};6.1x({8z:k(){7(6.56$)$=6.56$;l 6},1r:k(B){l!!B&&1y B!="21"&&!B.1b&&B.1m!=2O&&/k/i.1D(B+"")},4j:k(v){l v.5d&&v.32&&!v.32.65},1b:k(v,16){l v.1b&&v.1b.3P()==16.3P()},J:k(17,B,1l){7(17.G==P)L(q i 1u 17)B.V(17[i],1l||[i,17[i]]);H L(q i=0,5O=17.G;i<5O;i++)7(B.V(17[i],1l||[i,17[i]])===12)2l;l 17},D:k(v,N,u,2c,D){7(6.1r(N))N=N.54(v,[2c]);q 6v=/z-?2c|8A-?8B|1t|6g|8C-?1R/i;l N&&N.1m==3B&&u=="3e"&&!6v.1D(D)?N+"4X":N},1a:{2f:k(v,c){6.J(c.33(/\\s+/),k(i,M){7(!6.1a.2V(v.1a,M))v.1a+=(v.1a?" ":"")+M})},2g:k(v,c){v.1a=c?6.2S(v.1a.33(/\\s+/),k(M){l!6.1a.2V(c,M)}).6u(" "):""},2V:k(t,c){l 6.3q(c,(t.1a||t).3T().33(/\\s+/))>-1}},4e:k(e,o,f){L(q i 1u o){e.1d["1G"+i]=e.1d[i];e.1d[i]=o[i]}f.V(e,[]);L(q i 1u o)e.1d[i]=e.1d["1G"+i]},1s:k(e,p){7(p=="1R"||p=="30"){q 1G={},3K,47,d=["8D","7i","8E","8F"];6.J(d,k(){1G["6A"+9]=0;1G["6C"+9+"8H"]=0});6.4e(e,1G,k(){7(6(e).40(\':2a\')){3K=e.8I;47=e.8J}H{e=6(e.49(R)).2p(":4p").5n("36").2h().1s({4o:"1p",48:"8K",1k:"2A",8L:"0",8M:"0"}).5l(e.T)[0];q 4C=6.1s(e.T,"48")||"4b";7(4C=="4b")e.T.1d.48="8N";3K=e.8P;47=e.8Q;7(4C=="4b")e.T.1d.48="4b";e.T.2T(e)}});l p=="1R"?3K:47}l 6.3e(e,p)},3e:k(v,D,57){q F;7(D=="1t"&&6.S.1j){F=6.1h(v.1d,"1t");l F==""?"1":F}7(D=="4V"||D=="2K")D=6.S.1j?"3W":"2K";7(!57&&v.1d[D])F=v.1d[D];H 7(11.46&&11.46.4f){7(D=="2K"||D=="3W")D="4V";D=D.1J(/([A-Z])/g,"-$1").3r();q M=11.46.4f(v,14);7(M)F=M.58(D);H 7(D=="1k")F="25";H 6.4e(v,{1k:"2A"},k(){q c=11.46.4f(9,"");F=c&&c.58(D)||""})}H 7(v.4g){q 59=D.1J(/\\-(\\w)/g,k(m,c){l c.3P()});F=v.4g[D]||v.4g[59]}l F},44:k(a,3m){q r=[];3m=3m||11;6.J(a,k(i,1v){7(!1v)l;7(1v.1m==3B)1v=1v.3T();7(1y 1v=="21"){q s=6.3g(1v),1T=3m.6p("1T"),2e=[];q 2x=!s.W("<1w")&&[1,"<3Z>","</3Z>"]||(!s.W("<6D")||!s.W("<1P")||!s.W("<6E"))&&[1,"<1L>","</1L>"]||!s.W("<3o")&&[2,"<1L><1P>","</1P></1L>"]||(!s.W("<6F")||!s.W("<6G"))&&[3,"<1L><1P><3o>","</3o></1P></1L>"]||[0,"",""];1T.2P=2x[1]+1v+2x[2];1V(2x[0]--)1T=1T.18;7(6.S.1j){7(!s.W("<1L")&&s.W("<1P")<0)2e=1T.18&&1T.18.37;H 7(2x[1]=="<1L>"&&s.W("<1P")<0)2e=1T.37;L(q n=2e.G-1;n>=0;--n)7(6.1b(2e[n],"1P")&&!2e[n].37.G)2e[n].T.2T(2e[n])}1v=6.38(1T.37)}7(1v.G===0&&!6.1b(1v,"3N"))l;7(1v[0]==P||6.1b(1v,"3N"))r.1e(1v);H r=6.2o(r,1v)});l r},1h:k(v,16,N){q 2m=6.4j(v)?{}:{"L":"6I","6J":"1a","4V":6.S.1j?"3W":"2K",2K:6.S.1j?"3W":"2K",2P:"2P",1a:"1a",N:"N",2W:"2W",36:"36",6M:"6N",2X:"2X"};7(16=="1t"&&6.S.1j){7(N!=P){v.6g=1;v.1f=(v.1f||"").1J(/6i\\([^)]*\\)/,"")+(41(N).3T()=="8a"?"":"6i(1t="+N*5c+")")}l v.1f?(41(v.1f.6Q(/1t=([^)]*)/)[1])/5c).3T():""}7(2m[16]){7(N!=P)v[2m[16]]=N;l v[2m[16]]}H 7(N==P&&6.S.1j&&6.1b(v,"3N")&&(16=="6S"||16=="84"))l v.83(16).6y;H 7(v.5d){7(N!=P)v.6W(16,N);7(6.S.1j&&/5E|3j/.1D(16)&&!6.4j(v))l v.3G(16,2);l v.3G(16)}H{16=16.1J(/-([a-z])/6Y,k(z,b){l b.3P()});7(N!=P)v[16]=N;l v[16]}},3g:k(t){l t.1J(/^\\s+|\\s+$/g,"")},38:k(a){q r=[];7(1y a!="6Z")L(q i=0,2v=a.G;i<2v;i++)r.1e(a[i]);H r=a.4B(0);l r},3q:k(b,a){L(q i=0,2v=a.G;i<2v;i++)7(a[i]==b)l i;l-1},2o:k(1Y,4y){L(q i=0;4y[i];i++)1Y.1e(4y[i]);l 1Y},5T:k(1Y){q r=[],1B=6.3l++;L(q i=0,5g=1Y.G;i<5g;i++)7(1Y[i].3l!=1B){1Y[i].3l=1B;r.1e(1Y[i])}l r},3l:0,2S:k(1K,B,4l){7(1y B=="21")B=1g 3z("a","i","l "+B);q 1F=[];L(q i=0,2G=1K.G;i<2G;i++)7(!4l&&B(1K[i],i)||4l&&!B(1K[i],i))1F.1e(1K[i]);l 1F},34:k(1K,B){7(1y B=="21")B=1g 3z("a","l "+B);q 1F=[],r=[];L(q i=0,2G=1K.G;i<2G;i++){q 15=B(1K[i],i);7(15!==14&&15!=P){7(15.1m!=2O)15=[15];1F=1F.71(15)}}l 1F}});1g k(){q b=7O.72.3r();6.S={2R:/5i/.1D(b),2M:/2M/.1D(b),1j:/1j/.1D(b)&&!/2M/.1D(b),42:/42/.1D(b)&&!/(74|5i)/.1D(b)};6.75=!6.S.1j||11.76=="7I"};6.J({5v:"a.T",4D:"6.4D(a)",78:"6.1W(a,2,\'2b\')",79:"6.1W(a,2,\'5u\')",7a:"6.2B(a.T.18,a)",7b:"6.2B(a.18)"},k(i,n){6.B[i]=k(a){q F=6.34(9,n);7(a&&1y a=="21")F=6.2U(a,F);l 9.2i(F)}});6.J({5l:"3w",7A:"5D",35:"5m",7w:"5t"},k(i,n){6.B[i]=k(){q a=1A;l 9.J(k(){L(q j=0,2v=a.G;j<2v;j++)6(a[j])[n](9)})}});6.J({5n:k(1Z){6.1h(9,1Z,"");9.7j(1Z)},7k:k(c){6.1a.2f(9,c)},7l:k(c){6.1a.2g(9,c)},7n:k(c){6.1a[6.1a.2V(9,c)?"2g":"2f"](9,c)},2g:k(a){7(!a||6.1f(a,[9]).r.G)9.T.2T(9)},3t:k(){1V(9.18)9.2T(9.18)}},k(i,n){6.B[i]=k(){l 9.J(n,1A)}});6.J(["5r","5p","5o","5w"],k(i,n){6.B[n]=k(1B,B){l 9.1f(":"+n+"("+1B+")",B)}});6.J(["1R","30"],k(i,n){6.B[n]=k(h){l h==P?(9.G?6.1s(9[0],n):14):9.1s(n,h.1m==3v?h:h+"4X")}});6.1x({1o:{"":"m[2]==\'*\'||6.1b(a,m[2])","#":"a.3G(\'3f\')==m[2]",":":{5p:"i<m[3]-0",5o:"i>m[3]-0",1W:"m[3]-0==i",5r:"m[3]-0==i",1Y:"i==0",2d:"i==r.G-1",5S:"i%2==0",5V:"i%2","1W-3s":"6.1W(a.T.18,m[3],\'2b\',a)==a","1Y-3s":"6.1W(a.T.18,1,\'2b\')==a","2d-3s":"6.1W(a.T.7r,1,\'5u\')==a","7t-3s":"6.2B(a.T.18).G==1",5v:"a.18",3t:"!a.18",5w:"6.B.2N.V([a]).W(m[3])>=0",2a:\'a.u!="1p"&&6.1s(a,"1k")!="25"&&6.1s(a,"4o")!="1p"\',1p:\'a.u=="1p"||6.1s(a,"1k")=="25"||6.1s(a,"4o")=="1p"\',7x:"!a.2W",2W:"a.2W",36:"a.36",2X:"a.2X||6.1h(a,\'2X\')",2N:"a.u==\'2N\'",4p:"a.u==\'4p\'",5e:"a.u==\'5e\'",4J:"a.u==\'4J\'",5f:"a.u==\'5f\'",4Z:"a.u==\'4Z\'",5A:"a.u==\'5A\'",5B:"a.u==\'5B\'",3y:\'a.u=="3y"||6.1b(a,"3y")\',5C:"/5C|3Z|7D|3y/i.1D(a.1b)"},".":"6.1a.2V(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z&&!z.W(m[4])","$=":"z&&z.31(z.G - m[4].G,m[4].G)==m[4]","*=":"z&&z.W(m[4])>=0","":"z","=~":"3i(m[4]).1D(z)","!~":"!3i(m[4]).1D(z)",4z:k(m){l["",m[1],m[3],m[2],m[5]]},6h:"z=a[m[3]];7(!z||/5E|3j/.1D(m[3]))z=6.1h(a,m[3]);"},"[":"4W(m[2])?6.1W(a.T.18,4W(m[2]),\'2b\',a)==a:6.2p(m[2],a).G"},5P:[/^\\[ *(@)([\\w-]+) *([!*$^=!~]*) *(\'?"?)(.*?)\\4 *\\]/,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,1g 4t("^([:.#]*)("+(6.4u="(?:[\\\\w\\7G-\\7H*-]|\\\\\\\\.)")+"+)")],3D:[/^(\\/?\\.\\.)/,"a.T",/^(>|\\/)/,"6.2B(a.18)",/^(\\+)/,"6.1W(a,2,\'2b\')",/^(~)/,k(a){q s=6.2B(a.T.18);l s.4B(6.3q(a,s)+1)}],2U:k(1o,1K,1O){q 1G,M=[];1V(1o&&1o!=1G){1G=1o;q f=6.1f(1o,1K,1O);1o=f.t.1J(/^\\s*,\\s*/,"");M=1O?1K=f.r:6.2o(M,f.r)}l M},2p:k(t,1q){7(1y t!="21")l[t];7(1q&&!1q.23)1q=14;1q=1q||11;7(!t.W("//")){1q=1q.4L;t=t.31(2,t.G)}H 7(!t.W("/")&&!1q.32){1q=1q.4L;t=t.31(1,t.G);7(t.W("/")>=1)t=t.31(t.W("/"),t.G)}q F=[1q],1S=[],2d;1V(t&&2d!=t){q r=[];2d=t;t=6.3g(t).1J(/^\\/\\//,"");q 3E=12;q 2q=/^[\\/>]\\s*([\\w*-]+)/;q m=2q.2y(t);7(m){L(q i=0;F[i];i++)L(q c=F[i].18;c;c=c.2b)7(c.23==1&&(m[1]=="*"||6.1b(c,m[1])))r.1e(c);F=r;t=t.1J(2q,"");7(t.W(" ")==0)7J;3E=R}H{L(q i=0,5H=6.3D.G;i<5H;i+=2){q 2q=6.3D[i],B=6.3D[i+1];q m=2q.2y(t);7(m){r=F=6.34(F,6.1r(B)?B:1g 3z("a","l "+B));t=6.3g(t.1J(2q,""));3E=R;2l}}}7(t&&!3E){7(!t.W(",")){7(F[0]==1q)F.4M();1S=6.2o(1S,F);r=F=[1q];t=" "+t.31(1,t.G)}H{q 3h=1g 4t("^(\\\\w+)(#)("+6.4u+"+)");q m=3h.2y(t);7(m){m=[0,m[2],m[3],m[1]]}H{3h=1g 4t("^([#.]?)("+6.4u+"*)");m=3h.2y(t)}m[2]=m[2].1J(/\\\\/g,"");q v=F[F.G-1];7(m[1]=="#"&&v&&v.53){q 2k=v.53(m[2]);7((6.S.1j||6.S.2M)&&2k&&2k.3f!=m[2])2k=6(\'[@3f="\'+m[2]+\'"]\',v)[0];F=r=2k&&(!m[3]||6.1b(2k,m[3]))?[2k]:[]}H{L(q i=0;F[i];i++){q 3A=m[1]!=""||m[0]==""?"*":m[2];7(3A=="*"&&F[i].1b.3r()=="7N")3A="3d";r=6.2o(r,F[i].5K(3A))}7(m[1]==".")r=6.4A(r,m[2]);7(m[1]=="#"){q 2w=[];L(q i=0;r[i];i++)7(r[i].3G("3f")==m[2]){2w=[r[i]];2l}r=2w}F=r}t=t.1J(3h,"")}}7(t){q 15=6.1f(t,r);F=r=15.r;t=6.3g(15.t)}}7(t)F=[];7(F&&F[0]==1q)F.4M();1S=6.2o(1S,F);l 1S},4A:k(r,m,1O){m=" "+m+" ";q 2w=[];L(q i=0;r[i];i++){q 4w=(" "+r[i].1a+" ").W(m)>=0;7(!1O&&4w||1O&&!4w)2w.1e(r[i])}l 2w},1f:k(t,r,1O){q 2d;1V(t&&t!=2d){2d=t;q p=6.5P,m;L(q i=0;p[i];i++){m=p[i].2y(t);7(m){t=t.7R(m[0].G);7(6.1o[m[1]].4z)m=6.1o[m[1]].4z(m);m[2]=m[2].1J(/\\\\/g,"");2l}}7(!m)2l;7(m[1]==":"&&m[2]=="1O")r=6.1f(m[3],r,R).r;H 7(m[1]==".")r=6.4A(r,m[2],1O);H{q f=6.1o[m[1]];7(1y f!="21")f=6.1o[m[1]][m[2]];3i("f = k(a,i){"+(6.1o[m[1]].6h||"")+"l "+f+"}");r=6.2S(r,f,1O)}}l{r:r,t:t}},4D:k(v){q 4E=[];q M=v.T;1V(M&&M!=11){4E.1e(M);M=M.T}l 4E},1W:k(M,1F,3M,v){1F=1F||1;q 1B=0;L(;M;M=M[3M]){7(M.23==1)1B++;7(1B==1F||1F=="5S"&&1B%2==0&&1B>1&&M==v||1F=="5V"&&1B%2==1&&M==v)l M}},2B:k(n,v){q r=[];L(;n;n=n.2b){7(n.23==1&&(!v||n!=v))r.1e(n)}l r}});6.E={2f:k(U,u,19,C){7(6.S.1j&&U.45!=P)U=1z;7(C)19.C=C;7(!19.2F)19.2F=9.2F++;7(!U.$1c)U.$1c={};q 39=U.$1c[u];7(!39){39=U.$1c[u]={};7(U["3a"+u])39[0]=U["3a"+u]}39[19.2F]=19;U["3a"+u]=9.60;7(!9.1n[u])9.1n[u]=[];9.1n[u].1e(U)},2F:1,1n:{},2g:k(U,u,19){q 1c=U.$1c,F;7(1c){7(u&&u.u){19=u.19;u=u.u}7(!u){L(u 1u 1c)9.2g(U,u)}H 7(1c[u]){7(19)4F 1c[u][19.2F];H L(19 1u U.$1c[u])4F 1c[u][19];L(F 1u 1c[u])2l;7(!F){F=U["3a"+u]=14;4F 1c[u]}}L(F 1u 1c)2l;7(!F)U.$1c=14}},1N:k(u,C,U){C=6.38(C||[]);7(!U)6.J(9.1n[u]||[],k(){6.E.1N(u,C,9)});H{q 19=U["3a"+u],15,B=6.1r(U[u]);7(19){C.61(9.2m({u:u,1M:U}));7((15=19.V(U,C))!==12)9.4H=R}7(B&&15!==12)U[u]();9.4H=12}},60:k(E){7(1y 6=="P"||6.E.4H)l;E=6.E.2m(E||1z.E||{});q 3R;q c=9.$1c[E.u];q 1l=[].4B.54(1A,1);1l.61(E);L(q j 1u c){1l[0].19=c[j];1l[0].C=c[j].C;7(c[j].V(9,1l)===12){E.2n();E.2H();3R=12}}7(6.S.1j)E.1M=E.2n=E.2H=E.19=E.C=14;l 3R},2m:k(E){7(!E.1M&&E.63)E.1M=E.63;7(E.66==P&&E.68!=P){q e=11.4L,b=11.65;E.66=E.68+(e.69||b.69);E.7Z=E.80+(e.6c||b.6c)}7(6.S.2R&&E.1M.23==3){q 3b=E;E=6.1x({},3b);E.1M=3b.1M.T;E.2n=k(){l 3b.2n()};E.2H=k(){l 3b.2H()}}7(!E.2n)E.2n=k(){9.3R=12};7(!E.2H)E.2H=k(){9.81=R};l E}};6.B.1x({3n:k(u,C,B){l 9.J(k(){6.E.2f(9,u,B||C,C)})},5s:k(u,C,B){l 9.J(k(){6.E.2f(9,u,k(E){6(9).6d(E);l(B||C).V(9,1A)},C)})},6d:k(u,B){l 9.J(k(){6.E.2g(9,u,B)})},1N:k(u,C){l 9.J(k(){6.E.1N(u,C,9)})},3u:k(){q a=1A;l 9.6k(k(e){9.4Q=9.4Q==0?1:0;e.2n();l a[9.4Q].V(9,[e])||12})},82:k(f,g){k 4T(e){q p=(e.u=="3Y"?e.85:e.86)||e.87;1V(p&&p!=9)2D{p=p.T}2J(e){p=9};7(p==9)l 12;l(e.u=="3Y"?f:g).V(9,[e])}l 9.3Y(4T).6l(4T)},26:k(f){7(6.3V)f.V(11,[6]);H{6.2Y.1e(k(){l f.V(9,[6])})}l 9}});6.1x({3V:12,2Y:[],26:k(){7(!6.3V){6.3V=R;7(6.2Y){6.J(6.2Y,k(){9.V(11)});6.2Y=14}7(6.S.42||6.S.2M)11.89("6o",6.26,12)}}});1g k(){6.J(("8b,8c,2z,8d,8e,4d,6k,8g,"+"8h,8i,8j,3Y,6l,8k,3Z,"+"4Z,8l,8m,8n,2E").33(","),k(i,o){6.B[o]=k(f){l f?9.3n(o,f):9.1N(o)}});7(6.S.42||6.S.2M)11.8o("6o",6.26,12);H 7(6.S.1j){11.8p("<8q"+"8r 3f=6r 8t=R "+"3j=//:><\\/29>");q 29=11.53("6r");7(29)29.3c=k(){7(9.3C!="1U")l;9.T.2T(9);6.26()};29=14}H 7(6.S.2R)6.4I=45(k(){7(11.3C=="8y"||11.3C=="1U"){4k(6.4I);6.4I=14;6.26()}},10);6.E.2f(1z,"2z",6.26)};7(6.S.1j)6(1z).5s("4d",k(){q 1n=6.E.1n;L(q u 1u 1n){q 4q=1n[u],i=4q.G;7(i&&u!=\'4d\')8G 6.E.2g(4q[i-1],u);1V(--i)}});6.B.1x({8O:k(Q,20,I){9.2z(Q,20,I,1)},2z:k(Q,20,I,1X){7(6.1r(Q))l 9.3n("2z",Q);I=I||k(){};q u="4Y";7(20)7(6.1r(20)){I=20;20=14}H{20=6.3d(20);u="6n"}q 4c=9;6.3H({Q:Q,u:u,C:20,1X:1X,1U:k(2Q,Y){7(Y=="2r"||!1X&&Y=="5I")4c.1h("2P",2Q.3X).51().J(I,[2Q.3X,Y,2Q]);H I.V(4c,[2Q.3X,Y,2Q])}});l 9},6z:k(){l 6.3d(9)},51:k(){l 9.2p("29").J(k(){7(9.3j)6.5b(9.3j);H 6.4n(9.2N||9.6B||9.2P||"")}).2h()}});6.J("5y,5N,5M,5X,5L,5G".33(","),k(i,o){6.B[o]=k(f){l 9.3n(o,f)}});6.1x({28:k(Q,C,I,u,1X){7(6.1r(C)){I=C;C=14}l 6.3H({u:"4Y",Q:Q,C:C,2r:I,4v:u,1X:1X})},6H:k(Q,C,I,u){l 6.28(Q,C,I,u,1)},5b:k(Q,I){l 6.28(Q,14,I,"29")},6K:k(Q,C,I){l 6.28(Q,C,I,"6m")},6L:k(Q,C,I,u){7(6.1r(C)){I=C;C={}}l 6.3H({u:"6n",Q:Q,C:C,2r:I,4v:u})},6O:k(22){6.3F.22=22},6P:k(6j){6.1x(6.3F,6j)},3F:{1n:R,u:"4Y",22:0,5q:"6T/x-6X-3N-70",5U:R,3S:R,C:14},3Q:{},3H:k(s){s=6.1x({},6.3F,s);7(s.C){7(s.5U&&1y s.C!="21")s.C=6.3d(s.C);7(s.u.3r()=="28"){s.Q+=((s.Q.W("?")>-1)?"&":"?")+s.C;s.C=14}}7(s.1n&&!6.4G++)6.E.1N("5y");q 4x=12;q K=1z.5k?1g 5k("7c.7d"):1g 5z();K.7e(s.u,s.Q,s.3S);7(s.C)K.3x("7f-7g",s.5q);7(s.1X)K.3x("7m-4N-7o",6.3Q[s.Q]||"7p, 7q 7s 7u 4m:4m:4m 7v");K.3x("X-7y-7z","5z");7(K.7C)K.3x("7E","7F");7(s.5F)s.5F(K);7(s.1n)6.E.1N("5G",[K,s]);q 3c=k(4r){7(K&&(K.3C==4||4r=="22")){4x=R;7(3I){4k(3I);3I=14}q Y;2D{Y=6.5Z(K)&&4r!="22"?s.1X&&6.62(K,s.Q)?"5I":"2r":"2E";7(Y!="2E"){q 3p;2D{3p=K.4R("67-4N")}2J(e){}7(s.1X&&3p)6.3Q[s.Q]=3p;q C=6.6f(K,s.4v);7(s.2r)s.2r(C,Y);7(s.1n)6.E.1N("5L",[K,s])}H 6.3L(s,K,Y)}2J(e){Y="2E";6.3L(s,K,Y,e)}7(s.1n)6.E.1N("5M",[K,s]);7(s.1n&&!--6.4G)6.E.1N("5N");7(s.1U)s.1U(K,Y);7(s.3S)K=14}};q 3I=45(3c,13);7(s.22>0)6x(k(){7(K){K.7Q();7(!4x)3c("22")}},s.22);2D{K.7S(s.C)}2J(e){6.3L(s,K,14,e)}7(!s.3S)3c();l K},3L:k(s,K,Y,e){7(s.2E)s.2E(K,Y,e);7(s.1n)6.E.1N("5X",[K,s,e])},4G:0,5Z:k(r){2D{l!r.Y&&7W.7X=="4J:"||(r.Y>=5J&&r.Y<7Y)||r.Y==6a||6.S.2R&&r.Y==P}2J(e){}l 12},62:k(K,Q){2D{q 6b=K.4R("67-4N");l K.Y==6a||6b==6.3Q[Q]||6.S.2R&&K.Y==P}2J(e){}l 12},6f:k(r,u){q 4U=r.4R("88-u");q C=!u&&4U&&4U.W("K")>=0;C=u=="K"||C?r.8f:r.3X;7(u=="29")6.4n(C);7(u=="6m")3i("C = "+C);7(u=="50")6("<1T>").50(C).51();l C},3d:k(a){q s=[];7(a.1m==2O||a.43)6.J(a,k(){s.1e(2u(9.16)+"="+2u(9.N))});H L(q j 1u a)7(a[j]&&a[j].1m==2O)6.J(a[j],k(){s.1e(2u(j)+"="+2u(9))});H s.1e(2u(j)+"="+2u(a[j]));l s.6u("&")},4n:k(C){7(1z.6w)1z.6w(C);H 7(6.S.2R)1z.6x(C,0);H 3i.54(1z,C)}});6.B.1x({1H:k(O,I){q 1p=9.1f(":1p");O?1p.27({1R:"1H",30:"1H",1t:"1H"},O,I):1p.J(k(){9.1d.1k=9.2L?9.2L:"";7(6.1s(9,"1k")=="25")9.1d.1k="2A"});l 9},1C:k(O,I){q 2a=9.1f(":2a");O?2a.27({1R:"1C",30:"1C",1t:"1C"},O,I):2a.J(k(){9.2L=9.2L||6.1s(9,"1k");7(9.2L=="25")9.2L="2A";9.1d.1k="25"});l 9},5a:6.B.3u,3u:k(B,4i){q 1l=1A;l 6.1r(B)&&6.1r(4i)?9.5a(B,4i):9.J(k(){6(9)[6(9).40(":1p")?"1H":"1C"].V(6(9),1l)})},6R:k(O,I){l 9.1f(":1p").27({1R:"1H"},O,I).2h()},6U:k(O,I){l 9.1f(":2a").27({1R:"1C"},O,I).2h()},6V:k(O,I){l 9.J(k(){q 5h=6(9).40(":1p")?"1H":"1C";6(9).27({1R:5h},O,I)})},73:k(O,I){l 9.1f(":1p").27({1t:"1H"},O,I).2h()},77:k(O,I){l 9.1f(":2a").27({1t:"1C"},O,I).2h()},7h:k(O,4a,I){l 9.27({1t:4a},O,I)},27:k(D,O,1I,I){l 9.1E(k(){9.2C=6.1x({},D);q 1w=6.O(O,1I,I);L(q p 1u D){q e=1g 6.2Z(9,1w,p);7(D[p].1m==3B)e.2s(e.M(),D[p]);H e[D[p]](D)}})},1E:k(u,B){7(!B){B=u;u="2Z"}l 9.J(k(){7(!9.1E)9.1E={};7(!9.1E[u])9.1E[u]=[];9.1E[u].1e(B);7(9.1E[u].G==1)B.V(9)})}});6.1x({O:k(O,1I,B){q 1w=O&&O.1m==7B?O:{1U:B||!B&&1I||6.1r(O)&&O,24:O,1I:B&&1I||1I&&1I.1m!=3z&&1I||"5Q"};1w.24=(1w.24&&1w.24.1m==3B?1w.24:{7K:7L,7M:5J}[1w.24])||7P;1w.1G=1w.1U;1w.1U=k(){6.64(9,"2Z");7(6.1r(1w.1G))1w.1G.V(9)};l 1w},1I:{7T:k(p,n,2j,3O){l 2j+3O*p},5Q:k(p,n,2j,3O){l((-5W.7U(p*5W.7V)/2)+0.5)*3O+2j}},1E:{},64:k(v,u){u=u||"2Z";7(v.1E&&v.1E[u]){v.1E[u].4M();q f=v.1E[u][0];7(f)f.V(v)}},2I:[],2Z:k(v,1i,D){q z=9;q y=v.1d;7(D=="1R"||D=="30"){q 3U=6.1s(v,"1k");q 6e=y.4O;y.4O="1p"}z.a=k(){7(1i.3J)1i.3J.V(v,[z.2t]);7(D=="1t")6.1h(y,"1t",z.2t);H{y[D]=4W(z.2t)+"4X";y.1k="2A"}};z.6t=k(){l 41(6.1s(v,D))};z.M=k(){q r=41(6.3e(v,D));l r&&r>-8s?r:z.6t()};z.2s=k(4s,4a){z.4h=(1g 5R()).5Y();z.2t=4s;z.a();6.2I.1e(k(){l z.3J(4s,4a)});7(6.2I.G==1){q 5j=45(k(){6.2I=6.2S(6.2I,k(B){l B()});7(!6.2I.G)4k(5j)},13)}};z.1H=k(){7(!v.1Q)v.1Q={};v.1Q[D]=6.1h(v.1d,D);1i.1H=R;z.2s(0,9.M());7(D!="1t")y[D]="5x"};z.1C=k(){7(!v.1Q)v.1Q={};v.1Q[D]=6.1h(v.1d,D);1i.1C=R;z.2s(9.M(),0)};z.3u=k(){7(!v.1Q)v.1Q={};v.1Q[D]=6.1h(v.1d,D);7(3U=="25"){1i.1H=R;7(D!="1t")y[D]="5x";z.2s(0,9.M())}H{1i.1C=R;z.2s(9.M(),0)}};z.3J=k(2j,4K){q t=(1g 5R()).5Y();7(t>1i.24+z.4h){z.2t=4K;z.a();7(v.2C)v.2C[D]=R;q 1S=R;L(q i 1u v.2C)7(v.2C[i]!==R)1S=12;7(1S){7(3U){y.4O=6e;y.1k=3U;7(6.1s(v,"1k")=="25")y.1k="2A"}7(1i.1C)y.1k="25";7(1i.1C||1i.1H)L(q p 1u v.2C)6.1h(y,p,v.1Q[p])}7(1S&&6.1r(1i.1U))1i.1U.V(v);l 12}H{q n=t-9.4h;q p=n/1i.24;z.2t=6.1I[1i.1I](p,n,2j,(4K-2j),1i.24);z.a()}l R}}})}',62,550,'||||||jQuery|if||this|||||||||||function|return|||||var||||type|elem||||||fn|data|prop|event|ret|length|else|callback|each|xml|for|cur|value|speed|undefined|url|true|browser|parentNode|element|apply|indexOf||status|||document|false||null|val|name|obj|firstChild|handler|className|nodeName|events|style|push|filter|new|attr|options|msie|display|args|constructor|global|expr|hidden|context|isFunction|css|opacity|in|arg|opt|extend|typeof|window|arguments|num|hide|test|queue|result|old|show|easing|replace|elems|table|target|trigger|not|tbody|orig|height|done|div|complete|while|nth|ifModified|first|key|params|string|timeout|nodeType|duration|none|ready|animate|get|script|visible|nextSibling|index|last|tb|add|remove|end|pushStack|firstNum|oid|break|fix|preventDefault|merge|find|re|success|custom|now|encodeURIComponent|al|tmp|wrap|exec|load|block|sibling|curAnim|try|error|guid|el|stopPropagation|timers|catch|cssFloat|oldblock|opera|text|Array|innerHTML|res|safari|grep|removeChild|multiFilter|has|disabled|selected|readyList|fx|width|substr|ownerDocument|split|map|insertBefore|checked|childNodes|makeArray|handlers|on|originalEvent|onreadystatechange|param|curCSS|id|trim|re2|eval|src|domManip|mergeNum|doc|bind|tr|modRes|inArray|toLowerCase|child|empty|toggle|String|append|setRequestHeader|button|Function|tag|Number|readyState|token|foundToken|ajaxSettings|getAttribute|ajax|ival|step|oHeight|handleError|dir|form|diff|toUpperCase|lastModified|returnValue|async|toString|oldDisplay|isReady|styleFloat|responseText|mouseover|select|is|parseFloat|mozilla|jquery|clean|setInterval|defaultView|oWidth|position|cloneNode|to|static|self|unload|swap|getComputedStyle|currentStyle|startTime|fn2|isXMLDoc|clearInterval|inv|00|globalEval|visibility|radio|els|isTimeout|from|RegExp|chars|dataType|pass|requestDone|second|_resort|classFilter|slice|parPos|parents|matched|delete|active|triggered|safariTimer|file|lastNum|documentElement|shift|Modified|overflow|appendChild|lastToggle|getResponseHeader|deep|handleHover|ct|float|parseInt|px|GET|submit|html|evalScripts|pos|getElementById|call|clone|_|force|getPropertyValue|newProp|_toggle|getScript|100|tagName|checkbox|password|fl|state|webkit|timer|ActiveXObject|appendTo|before|removeAttr|gt|lt|contentType|eq|one|after|previousSibling|parent|contains|1px|ajaxStart|XMLHttpRequest|image|reset|input|prepend|href|beforeSend|ajaxSend|tl|notmodified|200|getElementsByTagName|ajaxSuccess|ajaxComplete|ajaxStop|ol|parse|swing|Date|even|unique|processData|odd|Math|ajaxError|getTime|httpSuccess|handle|unshift|httpNotModified|srcElement|dequeue|body|pageX|Last|clientX|scrollLeft|304|xmlRes|scrollTop|unbind|oldOverflow|httpData|zoom|_prefix|alpha|settings|click|mouseout|json|POST|DOMContentLoaded|createElement|setArray|__ie_init|prevObject|max|join|exclude|execScript|setTimeout|nodeValue|serialize|padding|textContent|border|thead|tfoot|td|th|getIfModified|htmlFor|class|getJSON|post|readonly|readOnly|ajaxTimeout|ajaxSetup|match|slideDown|action|application|slideUp|slideToggle|setAttribute|www|ig|array|urlencoded|concat|userAgent|fadeIn|compatible|boxModel|compatMode|fadeOut|next|prev|siblings|children|Microsoft|XMLHTTP|open|Content|Type|fadeTo|Bottom|removeAttribute|addClass|removeClass|If|toggleClass|Since|Thu|01|lastChild|Jan|only|1970|GMT|insertAfter|enabled|Requested|With|prependTo|Object|overrideMimeType|textarea|Connection|close|u0128|uFFFF|CSS1Compat|continue|slow|600|fast|object|navigator|400|abort|substring|send|linear|cos|PI|location|protocol|300|pageY|clientY|cancelBubble|hover|getAttributeNode|method|fromElement|toElement|relatedTarget|content|removeEventListener|NaN|blur|focus|resize|scroll|responseXML|dblclick|mousedown|mouseup|mousemove|change|keydown|keypress|keyup|addEventListener|write|scr|ipt|10000|defer|size|createTextNode|FORM|reverse|loaded|noConflict|font|weight|line|Top|Right|Left|do|Width|offsetHeight|offsetWidth|absolute|right|left|relative|loadIfModified|clientHeight|clientWidth|prototype'.split('|'),0,{}))