]> granicus.if.org Git - transmission/commitdiff
(trunk web) rewrite the dialogs to use jQuery.UI instead of a homerolled dialog....
authorCharles Kerr <charles@transmissionbt.com>
Sun, 8 Aug 2010 20:06:46 +0000 (20:06 +0000)
committerCharles Kerr <charles@transmissionbt.com>
Sun, 8 Aug 2010 20:06:46 +0000 (20:06 +0000)
17 files changed:
web/images/graphics/Makefile.am
web/images/graphics/wait20.gif [new file with mode: 0644]
web/index.html
web/javascript/Makefile.am
web/javascript/common.js
web/javascript/dialog.js [deleted file]
web/javascript/jquery/Makefile.am
web/javascript/jquery/jquery.min.js [deleted file]
web/javascript/jquery/json.js [deleted file]
web/javascript/jquery/json.min.js [deleted file]
web/javascript/jquery/json2.js [new file with mode: 0644]
web/javascript/jquery/json2.min.js [new file with mode: 0644]
web/javascript/transmission.js
web/javascript/transmission.remote.js
web/stylesheets/common.css
web/stylesheets/ie7.css
web/stylesheets/iphone.css

index cf62bfb53f51fcd7b78cfbafe301b615cf71a50a..d2d46fe3de32ec57e03acc7aa98fb3da265e6d31 100644 (file)
@@ -7,4 +7,5 @@ dist_data_DATA = \
   iphone_chrome.png \
   lock_icon.png \
   logo.png \
-  transfer_arrows.png
+  transfer_arrows.png \
+  wait20.gif
diff --git a/web/images/graphics/wait20.gif b/web/images/graphics/wait20.gif
new file mode 100644 (file)
index 0000000..d42c995
Binary files /dev/null and b/web/images/graphics/wait20.gif differ
index d89cb8e76587b865cfe54494d4e2e554edf23bb0..cff2bc4d2ab67771e22ffa69da35b3496865111e 100755 (executable)
@@ -1,14 +1,16 @@
 <!DOCTYPE html>
 <html>
        <head>
-               <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-               <meta http-equiv="cache-control" content="Private" />
-               <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
-               <meta name="apple-mobile-web-app-capable" content="yes" />
+               <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+               <meta http-equiv="Cache-Control" content="Private">
+               <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
+               <meta name="apple-mobile-web-app-capable" content="yes">
                <link href="./images/favicon.ico" rel="icon" />
                <link href="./images/favicon.png" rel="shortcut icon" />
                <link rel="apple-touch-icon" href="./images/webclip-icon.png"/>
-               <script type="text/javascript" src="./javascript/jquery/jquery.min.js"></script>
+                <link type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="Stylesheet"/>
+                <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
+                <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
                <link media="only screen and (max-device-width: 480px)" href="./stylesheets/iphone.css" type= "text/css" rel="stylesheet" />
                <link media="screen and (min-device-width: 481px)" href="./stylesheets/common.css" type="text/css" rel="stylesheet" />
                <!--[if IE]>
                <script type="text/javascript" src="./javascript/jquery/jquery.contextmenu.min.js"></script>
                <script type="text/javascript" src="./javascript/menu.js"></script>
                <script type="text/javascript" src="./javascript/jquery/jquery.form.min.js"></script>
-               <script type="text/javascript" src="./javascript/jquery/json.min.js"></script>
+               <script type="text/javascript" src="./javascript/jquery/json2.min.js"></script>
                <script type="text/javascript" src="./javascript/common.js"></script>
                <script type="text/javascript" src="./javascript/transmission.remote.js"></script>
                <script type="text/javascript" src="./javascript/transmission.js"></script>
                <script type="text/javascript" src="./javascript/torrent.js"></script>
-               <script type="text/javascript" src="./javascript/dialog.js"></script>
                <script type="text/javascript" src="./javascript/formatter.js"></script>
                <title>Transmission Web Interface</title>
        </head>
                </div>
 
                <div id="torrent_container">
-                       <ul class="torrent_list" id="torrent_list"><li style="display: none;"></li></ul>
+               <ul class="torrent_list" id="torrent_list"><li style="display: none;"></li></ul>
                </div>
 
-               <div class="dialog_container" id="dialog_container" style="display:none;">
-                       <div class="dialog_top_bar"></div>
-                       <div class="dialog_window">
-                               <img src="images/graphics/logo.png" alt="Transmission Logo" />
-                               <h2 class="dialog_heading" id="dialog_heading"></h2>
-                               <div class="dialog_message" id="dialog_message"></div>
-                               <a href="#confirm" id="dialog_confirm_button">Confirm</a>
-                               <a href="#cancel" id="dialog_cancel_button">Cancel</a>
-                       </div>
+               <div id="dialog" style="display:none;">
+                       <img src="images/graphics/logo.png" style="float:left; margin: 10px;"/>
+                       <p id="dialog_body" style="text-align:left"></p>
                </div>
 
-               <div class="dialog_container" id="prefs_container" style="display:none;">
-                       <div class="dialog_top_bar"></div>
-                       <div class="dialog_window">
-                               <h2 class="dialog_heading">Preferences</h2>
-                               <div id="pref_error"></div>
-                               <form action="" id="prefs_form">
-                                       <div id="prefs_tabs">
-                                               <ul>
-                                                       <li id="prefs_tab_general_tab" class="prefs_tab_enabled">General</li>
-                                                       <li id="prefs_tab_speed_tab" class="prefs_tab_disabled">Speed</li>
-                                               </ul>
-                                               <div id="prefs_tab_general" class="prefs_tab">
-                                                       <div class="preference download_location">
-                                                               <label class="category">Add transfers:</label>
-                                                               <div class="formdiv">
-                                                                       <label for="download_location" class="item">Download to:</label>
-                                                                       <input type="text" name="download_location" id="download_location"/>
-                                                               </div>
-                                                               <div class="formdiv checkbox auto_start">
-                                                                       <input type="checkbox" name="auto_start" id="auto_start"/>
-                                                                       <label for="auto_start" class="item">Start transfers when added</label>
-                                                               </div>
-                                                       </div>
-                                                       <div class="preference port">
-                                                               <label class="category">Network:</label>
-                                                               <div class="formdiv">
-                                                                       <label for="port" class="item">Incoming TCP Port:</label>
-                                                                       <input type="text" id="port" name="port"/>
-                                                               </div>
-                                                       </div>
-                                                       <div class="preference encryption">
-                                                               <label class="category">Encryption:</label>
-                                                               <div class="formdiv checkbox">
-                                                                       <input type="checkbox" name="encryption" id="encryption"/>
-                                                                       <label for="encryption" class="item">Ignore unencrypted peers</label>
-                                                               </div>
-                                                       </div>
-                                                       <div class="preference web_gui">
-                                                               <label class="category">Web Client:</label>
-                                                               <div class="formdiv">
-                                                                       <label for="refresh_rate" class="item">Refresh Rate:</label>
-                                                                       <input type="text" name="refresh_rate" id="refresh_rate"/>
-                                                                       <label class="suffix">seconds</label>
-                                                               </div>
-                                                       </div>
-                                                       <div style="clear: both; visibility: hidden;"></div>
-                                               </div>
-                                               <div id="prefs_tab_speed" class="prefs_tab" style="display: none;">
-                                                       <div class="preference limit_total">
-                                                               <label class="category">Speed Limits:</label>
-                                                               <div class="formdiv checkbox">
-                                                                       <input type="checkbox" name="limit_download" id="limit_download"/>
-                                                                       <label for="limit_download" class="item">Download Rate:</label>
-                                                                       <input type="text" name="download_rate" id="download_rate"/>
-                                                                       <label class="suffix">kB/s</label>
-                                                               </div>
-                                                               <div class="formdiv checkbox">
-                                                                       <input type="checkbox" name="limit_upload" id="limit_upload"/>
-                                                                       <label for="limit_upload" class="item">Upload Rate:</label>
-                                                                       <input type="text" name="upload_rate" id="upload_rate"/>
-                                                                       <label class="suffix">kB/s</label>
-                                                               </div>
-                                                       </div>
-                                                       <div class="preference limit_turtle">
-                                                               <label class="category">Temporary Speed Limits: (Turtle)</label>
-                                                               <label>Override normal speed limits manually or at scheduled times</label>
-                                                               <div class="formdiv">
-                                                                       <label for="turtle_download_rate" class="item">Download Rate:</label>
-                                                                       <input type="text" name="turtle_download_rate" id="turtle_download_rate"/>
-                                                                       <label class="suffix">kB/s</label>
-                                                               </div>
-                                                               <div class="formdiv">
-                                                                       <label for="turtle_upload_rate" class="item">Upload Rate:</label>
-                                                                       <input type="text" name="turtle_upload_rate" id="turtle_upload_rate"/>
-                                                                       <label class="suffix">kB/s</label>
-                                                               </div>
-                                                               <div class="formdiv checkbox">
-                                                                       <input type="checkbox" name="turtle_schedule" id="turtle_schedule"/>
-                                                                       <label for="turtle_schedule" class="item">Scheduled times:</label>
-                                                                       <select name="turtle_start_time" id="turtle_start_time" size="1">
-                                                                       </select>
-                                                                       <select name="turtle_end_time" id="turtle_end_time" size="1">
-                                                                       </select>
-                                                               </div>
-                                                               <div class="formdiv">
-                                                                       <label for="turtle_days" class="item">On days:</label>
-                                                                       <select name="turtle_days" id="turtle_days" size="1">
-                                                                               <option value="127">Everyday</option>
-                                                                               <option value="62">Weekdays</option>
-                                                                               <option value="65">Weekends</option>
-                                                                               <option value="1">Sunday</option>
-                                                                               <option value="2">Monday</option>
-                                                                               <option value="4">Tuesday</option>
-                                                                               <option value="8">Wednesday</option>
-                                                                               <option value="16">Thursday</option>
-                                                                               <option value="32">Friday</option>
-                                                                               <option value="64">Saturday</option>
-                                                                       </select>
-                                                               </div>
-                                                       </div>
-                                                       <div style="clear: both; visibility: hidden;"></div>
-                                               </div>
-                                       </div>
-                                       <span id="transmission_version"></span>
-                                       <a href="#save" id="prefs_save_button">Save</a>
-                                       <a href="#cancel" id="prefs_cancel_button">Cancel</a>
-                               </form>
-                       </div>
+               <div id="stats_dialog" style="display:none;">
+                       <table>
+
+                       <tr><td colspan="4" class="dialog_section_title">Current Session</td></tr>
+                       <tr><td rowspan="5" class="dialog_col_1"></td><td></td><td rowspan="5" class="dialog_col_3"></td><td></td></tr>
+                       <tr><td>Uploaded:</td><td id="stats_session_uploaded"></td></tr>
+                       <tr><td>Downloaded:</td><td id="stats_session_downloaded"></td></tr>
+                       <tr><td>Ratio:</td><td id="stats_session_ratio"></td></tr>
+                       <tr><td>Duration:</td><td id="stats_session_duration"></td></tr>
+
+                       <tr><td colspan="4" class="dialog_section_title">Total Session</td></tr>
+                       <tr><td rowspan="6" class="dialog_col_1"></td><td></td><td rowspan="6" class="dialog_col_3"></td><td></td></tr>
+                       <tr><td colspan="3" id="stats_total_count"></td></tr>
+                       <tr><td>Uploaded:</td><td id="stats_total_uploaded"></td></tr>
+                       <tr><td>Downloaded:</td><td id="stats_total_downloaded"></td></tr>
+                       <tr><td>Ratio:</td><td id="stats_total_ratio"></td></tr>
+                       <tr><td>Duration:</td><td id="stats_total_duration"></td></tr>
+                       </table>
                </div>
 
-               <div class="dialog_container" id="stats_container" style="display:none;">
-                       <div class="dialog_top_bar"></div>
-                       <div class="dialog_window">
-                               <h2 class="dialog_heading">Statistics</h2>
-                               <div id="stats_error"></div>
-                               <div id="stats_info_container" class="stats_info_container">
-                                       <div class="stats_group">
-                                               <label class="category">Current Session:</label>
-                                               <div class="stats_row">
-                                                       <div class="item">Uploaded:</div>
-                                                       <div id="stats_session_uploaded"></div>
-                                               </div>
-                                               <div class="stats_row">
-                                                       <div class="item">Downloaded:</div>
-                                                       <div id="stats_session_downloaded"></div>
-                                               </div>
-                                               <div class="stats_row">
-                                                       <div class="item">Ratio:</div>
-                                                       <div id="stats_session_ratio"></div>
-                                               </div>
-                                               <div class="stats_row">
-                                                       <div class="item">Duration:</div>
-                                                       <div id="stats_session_duration"></div>
-                                               </div>
-                                       </div>
-                                       <div class="stats_group">
-                                               <label class="category">Total:</label>
-                                               <div class="stats_row">
-                                                       <div class="item2">Started </div>
-                                                       <div id="stats_total_count"></div>
-                                               </div>
-                                               <div class="stats_row">
-                                                       <div class="item">Uploaded:</div>
-                                                       <div id="stats_total_uploaded"></div>
-                                               </div>
-                                               <div class="stats_row">
-                                                       <div class="item">Downloaded:</div>
-                                                       <div id="stats_total_downloaded"></div>
-                                               </div>
-                                               <div class="stats_row">
-                                                       <div class="item">Ratio:</div>
-                                                       <div id="stats_total_ratio"></div>
+               <div id="prefs_dialog" style="display:none;">
+                       <form action="">
+                       <div id="prefs_tabs">
+                               <ul>
+                                       <li><a href="#prefs_tab_torrent">Torrents</a>
+                                       <li><a href="#prefs_tab_speed">Speed</a>
+                                       <li><a href="#prefs_tab_privacy">Privacy</a>
+                                       <li><a href="#prefs_tab_network">Network</a>
+                               </ul>
+                               <div id="prefs_tab_torrent">
+                                       <table>
+
+                                       <tr><td colspan="4" class="dialog_section_title">Adding</td></tr>
+                                       <tr><td rowspan="4" class="dialog_col_1"></td><td></td><td rowspan="4" class="dialog_col_3"></td><td></td></tr>
+                                       <tr><td>Save to Location:</td><td><input type="text" id="download-dir"/></td></tr>
+                                       <tr><td colspan="3"><input type="checkbox" id="auto-start"/>Start when added</td></tr>
+                                       <tr><td colspan="3"><input type="checkbox" id="rename-partial-files"/>Append ".part" to incomplete files' names</td></tr>
+
+                                       <tr><td colspan="4" class="dialog_section_title">Seeding Limits</td></tr>
+                                       <tr><td rowspan="3" class="dialog_col_1"></td><td></td><td rowspan="3" class="dialog_col_3"></td><td></td></tr>
+                                       <tr><td><input type="checkbox" id="seedRatioLimited"/>Stop seeding at ratio:</td><td><input type="text" id="seedRatioLimit"/></td></tr>
+                                       <tr><td><input type="checkbox" id="idle-seeding-limit-enabled"/>Stop seeding if idle for N minutes:</td><td><input type="text" id="idle-seeding-limit"/></td></tr>
+
+                                       </table>
+                               </div>
+                               <div id="prefs_tab_speed">
+                                       <table>
+
+                                       <tr><td colspan="4" class="dialog_section_title">Speed Limits</td></tr>
+                                       <tr><td rowspan="3" class="dialog_col_1"></td><td></td><td rowspan="3" class="dialog_col_3"></td><td></td></tr>
+                                       <tr><td><input type="checkbox" id="speed-limit-down-enabled"/>Limit download speed (KiB/s):</td><td><input type="text" id="speed-limit-down"></td></tr>
+                                       <tr><td><input type="checkbox" id="speed-limit-up-enabled"/>Limit upload speed (KiB/s):</td><td><input type="text" id="speed-limit-up"></td></tr>
+
+                                       <tr><td colspan="4" class="dialog_section_title">Temporary Speed Limits <img src="images/graphics/turtle.png"></td></tr>
+                                       <tr><td rowspan="6" class="dialog_col_1"></td><td></td><td rowspan="6" class="dialog_col_3"></td><td></td></tr>
+                                       <tr><td colspan="4"><i>Override normal speed limits manually or at scheduled times</i></td></tr>
+                                       <tr><td>Limit download speed (KiB/s):</td><td><input type="text" id="alt-speed-down"></td></tr>
+                                       <tr><td>Limit upload speed (KiB/s):</td><td><input type="text" id="alt-speed-up"></td></tr>
+                                       <tr><td><input type="checkbox" id="alt-speed-time-enabled"/>Scheduled times:</td>
+                                               <td><select id="alt-speed-time-begin" size="1"></select> to <select id="alt-speed-time-end" size="1"></select></td></tr>
+                                       <tr><td>On days:</td><td><select id="alt-speed-time-day" size="1">
+                                                                       <option value="127">Everyday</option>
+                                                                       <option value="62">Weekdays</option>
+                                                                       <option value="65">Weekends</option>
+                                                                       <option value="1">Sunday</option>
+                                                                       <option value="2">Monday</option>
+                                                                       <option value="4">Tuesday</option>
+                                                                       <option value="8">Wednesday</option>
+                                                                       <option value="16">Thursday</option>
+                                                                       <option value="32">Friday</option>
+                                                                       <option value="64">Saturday</option>
+                                                               </select></td></tr>
+                                       </table>
+                               </div>
+                               <div id="prefs_tab_privacy">
+                                       <table>
+                                       <tr><td colspan="4"><div class="dialog_section_title">Blocklist</div></td></tr>
+                                       <tr><td rowspan="2" class="dialog_col_1"></td>
+                                               <td><input type="checkbox" id="blocklist-enabled">Enable blocklist (<span id="blocklist-size">0</span> rules)</td>
+                                               <td class="dialog_col_3"></td>
+                                               <td><button type="button" id="blocklist-update">Update</button><img id="blocklist-update-spinner" src="images/graphics/wait20.gif"></td></tr>
+                                       <tr><td colspan="4"><div class="dialog_section_title">Privacy</div></td></tr>
+                                       <tr><td rowspan="4" class="dialog_col_1"></td><td>Encryption mode:</td><td rowspan="4" class="dialog_col_3"></td><td><select id="encryption">
+                                               <option value="tolerated">Allow encryption</option>
+                                               <option value="preferred">Prefer encryption</option>
+                                               <option value="required">Require encryption</option>
+                                               </select></td></tr>
+                                       <tr><td colspan="3"><input type="checkbox" id="pex-enabled"/>Use PEX to find more peers</td></tr>
+                                       <tr><td colspan="3"><input type="checkbox" id="dht-enabled"/>Use DHT to find more peers</td></tr>
+                                       <tr><td colspan="3"><input type="checkbox" id="lpd-enabled"/>Use Local Peer Discovery to find more peers</td></tr>
+                                       </table>
+                               </div>
+                               <div id="prefs_tab_network">
+                                       <table>
+
+                                       <tr><td colspan="4" class="dialog_section_title">Incoming Peers</td></tr>
+                                       <tr><td rowspan="5" class="dialog_col_1"></td><td></td><td rowspan="5" class="dialog_col_3"></td><td></td></tr>
+                                       <tr><td>Port for incoming connections:</td><td><input type="text" id="peer-port"/></td></tr>
+                                       <tr><td></td><td><button type="button" id="port-test">Test</button>    <span id="port-status-label">Status Unknown</span> <img id="port-status-spinner" src="images/graphics/wait20.gif"></td></tr>
+                                       <tr><td colspan="3"><input type="checkbox" id="peer-port-random-on-start"/>Pick a random port every time Transmission is started</td></tr>
+                                       <tr><td colspan="3"><input type="checkbox" id="port-forwarding-enabled"/>Use UPnP or NAT-PMP port forwarding from my router</td></tr>
+
+                                       <tr><td colspan="4" class="dialog_section_title">Limits</td></tr>
+                                       <tr><td rowspan="3" class="dialog_col_1"></td><td></td><td rowspan="3" class="dialog_col_3"></td><td></td></tr>
+                                       <tr><td>Maximum peers per torrent:</td><td><input type="text" id="peer-limit-per-torrent"/></td></tr>
+                                       <tr><td>Maximum peers overall:</td><td><input type="text" id="peer-limit-global"/></td></tr>
+                                               
+                                       </table>
+                               </div>
+<!-- <label for="port" class="item">Incoming TCP Port:</label>
+                                                               <input type="text" id="port" name="port"/>
+                                                       </div>
                                                </div>
-                                               <div class="stats_row">
-                                                       <div class="item">Duration:</div>
-                                                       <div id="stats_total_duration"></div>
+                                               <div class="preference web_gui">
+                                                       <label class="category">Web Client:</label>
+                                                       <div class="formdiv">
+                                                               <label for="refresh_rate" class="item">Refresh Rate:</label>
+                                                               <input type="text" name="refresh_rate" id="refresh_rate"/>
+                                                               <label class="suffix">seconds</label>
+                                                       </div>
                                                </div>
+                                               <div style="clear: both; visibility: hidden;"></div>
                                        </div>
                                </div>
-                               <a href="#close" id="stats_close_button">Close</a>
+-->
                        </div>
+                       </form>
                </div>
 
                <div class="dialog_container" id="upload_container" style="display:none;">
index 000247b87b51b144797c887bdb5ea405475966d8..0cee4b838cc239757c890aade2eef163da932e89 100644 (file)
@@ -2,7 +2,6 @@ datadir = ${datarootdir}/${PACKAGE_NAME}/${subdir}
 
 dist_data_DATA = \
   common.js \
-  dialog.js \
   formatter.js \
   menu.js \
   torrent.js \
index 1775c897c84a01b29cafbf6dac4099a2b20e8247..0f0f88f25a5439d5d4422e23a11a3c243a19e0d5 100644 (file)
@@ -7,7 +7,6 @@
  */
 
 var transmission;
-var dialog;
 var resizeTimer = null;
 // Test for a Webkit build that supports box-shadow: 521+ (release Safari 3 is
 // actually 523.10.3). We need 3.1 for CSS animation (dialog sheets) but as it
@@ -34,20 +33,10 @@ function testSafari3()
 };
 
 $(document).ready( function() {
-       // Initialise the dialog controller
-       dialog = new Dialog();
 
        // Initialise the main Transmission controller
        transmission = new Transmission();
 
-       // IE specific fixes here
-       if ($.browser.msie) {
-               try {
-                       document.execCommand("BackgroundImageCache", false, true);
-               } catch(err) {}
-               $('.dialog_container').css('height',$(window).height()+'px');
-       }
-
        if ($.browser.safari) {
                // Move search field's margin down for the styled input
                $('#torrent_search').css('margin-top', 3);
@@ -56,20 +45,14 @@ $(document).ready( function() {
                // Fix for non-Safari-3 browsers: dark borders to replace shadows.
                // Opera messes up the menu if we use a border on .trans_menu
                // div.outerbox so use ul instead
-               $('.trans_menu ul, div#jqContextMenu, div.dialog_container div.dialog_window').css('border', '1px solid #777');
+               $('.trans_menu ul, div#jqContextMenu').css('border', '1px solid #777');
                // and this kills the border we used to have
                $('.trans_menu div.outerbox').css('border', 'none');
        } else if (!iPhone) {
                // Used for Safari 3.1 CSS animation. Degrades gracefully (so Safari 3
                // test is good enough) but we delay our hide/unhide to wait for the
                // scrolling - no point making other browsers wait.
-               $('div#upload_container div.dialog_window').css('top', '-205px');
-               $('div#prefs_container div.dialog_window').css('top', '-425px');
-               $('div#dialog_container div.dialog_window').css('top', '-425px');
-               $('div.dialog_container div.dialog_window').css('-webkit-transition', 'top 0.3s');
-               // -webkit-appearance makes some links into buttons, but needs
-               // different padding.
-               $('div.dialog_container div.dialog_window a').css('padding', '2px 10px 3px');
+               $('div#upload_container').css('top', '-205px');
        }
        if (iPhone){
                window.onload = function(){ setTimeout(function() { window.scrollTo(0,1); },500); };
@@ -193,6 +176,41 @@ function changeTab(tab, id) {
        }
 }
 
+function tellUser( primaryText, secondaryText )
+{
+       $("#dialog_body").html("<p><b>" + primaryText + "</b></p><p>" + secondaryText + "</p>" );
+       $("#dialog" ).dialog( {
+               title: primaryText,
+               show: 'blind',
+               hide: 'blind',
+               buttons: { 'Close': function() { $(this).dialog('close'); } }
+       });
+}
+
+/**
+ * @brief Show a confirmation dialog
+ */
+function askUser(dialog_heading, dialog_message, confirm_button_label,
+                 callback_function, callback_data,
+                 cancel_button_label)
+{
+       if( cancel_button_label == null )
+               cancel_button_label = 'Cancel';
+       $("#dialog_body").html("<p><b>" + dialog_heading + "</b></p><p>" + dialog_message + "</p>" );
+       var myButtons = { };
+       myButtons[cancel_button_label] = function() { $(this).dialog('close'); }
+       myButtons[confirm_button_label] = function() {
+               callback_function.call( null, callback_data );
+               $(this).dialog('close');
+       };
+       $("#dialog" ).dialog( {
+               title: dialog_heading,
+               show: 'blind',
+               hide: 'blind',
+               buttons: myButtons
+       });
+}
+
 /***
 ****  Preferences
 ***/
@@ -227,7 +245,6 @@ Prefs._SortByProgress     = 'percent_completed';
 Prefs._SortByState        = 'state';
 Prefs._SortByTracker      = 'tracker';
 
-Prefs._TurtleState        = 'turtle-state';
 Prefs._CompactDisplayState= 'compact_display_state';
 
 Prefs._Defaults =
diff --git a/web/javascript/dialog.js b/web/javascript/dialog.js
deleted file mode 100644 (file)
index 6970391..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- *     Copyright Â© Dave Perrett and Malcolm Jarvis
- *     This code is licensed under the GPL version 2.
- *     For more details, see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
- *
- * Class Dialog
- */
-
-function Dialog(){
-       this.initialize();
-}
-
-Dialog.prototype = {
-
-       /*
-        * Constructor
-        */
-       initialize: function() {
-
-               /*
-                * Private Interface Variables
-                */
-               this._container = $('#dialog_container');
-               this._heading = $('#dialog_heading');
-               this._message = $('#dialog_message');
-               this._cancel_button = $('#dialog_cancel_button');
-               this._confirm_button = $('#dialog_confirm_button');
-               this._callback_function = '';
-               this._callback_data = null;
-
-               // Observe the buttons
-               this._cancel_button.bind('click', {dialog: this}, this.onCancelClicked );
-               this._confirm_button.bind('click', {dialog: this}, this.onConfirmClicked );
-       },
-
-       /*--------------------------------------------
-        *
-        *  E V E N T   F U N C T I O N S
-        *
-        *--------------------------------------------*/
-
-       hideDialog: function( )
-       {
-               $('body.dialog_showing').removeClass('dialog_showing');
-               if (Safari3) {
-                       $('div#dialog_container div.dialog_window').css('top', '-150px');
-                       setTimeout("dialog._container.hide();",500);
-               } else {
-                       this._container.hide();
-                       transmission.hideiPhoneAddressbar();
-               }
-               transmission.updateButtonStates();
-       },
-
-       onCancelClicked: function( event )
-       {
-               event.data.dialog.hideDialog( );
-       },
-
-       onConfirmClicked: function( event )
-       {
-               var dialog = event.data.dialog;
-               eval( dialog._callback_function + "(dialog._callback_data)" );
-               dialog.hideDialog( );
-       },
-
-       /*--------------------------------------------
-        *
-        *  I N T E R F A C E   F U N C T I O N S
-        *
-        *--------------------------------------------*/
-
-       /*
-        * Display a confirm dialog
-        */
-       confirm: function(dialog_heading, dialog_message, confirm_button_label, callback_function, callback_data, cancel_button_label) {
-               if (!iPhone && Safari3) {
-                       $('div#upload_container div.dialog_window').css('top', '-205px');
-                       $('div#prefs_container div.dialog_window').css('top', '-425px');
-                       setTimeout("$('#upload_container').hide();",500);
-                       setTimeout("$('#prefs_container').hide();",500);
-               } else if (!iPhone) {
-                       $('.dialog_container').hide();
-               }
-               setInnerHTML( this._heading[0], dialog_heading );
-               setInnerHTML( this._message[0], dialog_message );
-               setInnerHTML( this._cancel_button[0], (cancel_button_label == null) ? 'Cancel' : cancel_button_label );
-               setInnerHTML( this._confirm_button[0], confirm_button_label );
-               this._confirm_button.show();
-               this._callback_function = callback_function;
-               this._callback_data = callback_data;
-               $('body').addClass('dialog_showing');
-               this._container.show();
-               transmission.updateButtonStates();
-               if (iPhone) {
-                       transmission.hideiPhoneAddressbar();
-               } else if (Safari3) {
-                       setTimeout("$('div#dialog_container div.dialog_window').css('top', '0px');",10);
-               }
-       },
-
-       /*
-        * Display an alert dialog
-        */
-       alert: function(dialog_heading, dialog_message, cancel_button_label) {
-               if (!iPhone && Safari3) {
-                       $('div#upload_container div.dialog_window').css('top', '-205px');
-                       $('div#prefs_container div.dialog_window').css('top', '-425px');
-                       setTimeout("$('#upload_container').hide();",500);
-                       setTimeout("$('#prefs_container').hide();",500);
-               } else if (!iPhone) {
-                       $('.dialog_container').hide();
-               }
-               setInnerHTML( this._heading[0], dialog_heading );
-               setInnerHTML( this._message[0], dialog_message );
-               // jquery::hide() doesn't work here in Safari for some odd reason
-               this._confirm_button.css('display', 'none');
-               setInnerHTML( this._cancel_button[0], cancel_button_label );
-               // Just in case
-               if (!iPhone && Safari3) {
-                       $('div#upload_container div.dialog_window').css('top', '-205px');
-                       setTimeout("$('#upload_container').hide();",500);
-               } else {
-                       $('#upload_container').hide();
-               }
-               $('body').addClass('dialog_showing');
-               transmission.updateButtonStates();
-               if (iPhone) {
-                       transmission.hideiPhoneAddressbar();
-                       this._container.show();
-               } else if (Safari3) {
-                       // long pause as we just hid all the dialogs on a timeout - we'll get the error
-                       // scrolling in and immediately disappearing if we're not careful!
-                       //dialogTimeout = null;
-                       this._container.show();
-                       setTimeout("$('div#dialog_container div.dialog_window').css('top', '0px');",500);
-               } else {
-                       this._container.show();
-               }
-       }
-
-
-}
index 5fe4483813db0a7c6df13454a3b33e3faaf83a14..b311da24cc10d23812557574b86c31f84529307d 100644 (file)
@@ -1,8 +1,7 @@
 datadir = ${datarootdir}/${PACKAGE_NAME}/${subdir}
 
 dist_data_DATA = \
-  json.min.js \
+  json2.min.js \
   jquery.contextmenu.min.js \
-  jquery.min.js \
   jquery.form.min.js \
   jquery.transmenu.min.js
diff --git a/web/javascript/jquery/jquery.min.js b/web/javascript/jquery/jquery.min.js
deleted file mode 100644 (file)
index 7c24308..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.4.2
- * http://jquery.com/
- *
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Sat Feb 13 22:33:48 2010 -0500
- */
-(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
-e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
-j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
-"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
-true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
-Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
-(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
-a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
-"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
-function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
-c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
-L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
-"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
-a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
-d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
-a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
-!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
-true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
-parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
-false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
-s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
-applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
-else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
-a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
-w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
-cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
-i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
-" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
-this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
-e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
-c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
-a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
-function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
-k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
-C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
-null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
-e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
-f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
-if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
-d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
-"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
-a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
-isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
-{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
-if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
-e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
-"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
-d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
-!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
-toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
-u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
-function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
-if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
-t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
-g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
-for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
-1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
-CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
-relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
-l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
-h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
-CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
-g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
-text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
-setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
-h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
-m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
-"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
-h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
-!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
-h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
-q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
-if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
-(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
-function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
-gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
-c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
-{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
-"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
-d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
-a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
-1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
-a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
-c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
-wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
-prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
-this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
-return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
-""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
-this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
-u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
-1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
-return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
-""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
-c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
-c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
-function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
-Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
-"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
-a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
-a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
-"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
-serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
-function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
-global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
-e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
-"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
-false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
-false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
-c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
-d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
-g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
-1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
-"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
-if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
-this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
-"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
-animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
-j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
-this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
-"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
-c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
-this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
-this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
-e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
-c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
-function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
-this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
-k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
-f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
-a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
-c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
-d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
-f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
-"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
-e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
diff --git a/web/javascript/jquery/json.js b/web/javascript/jquery/json.js
deleted file mode 100644 (file)
index 78e843a..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-(function ($) {
-    var m = {
-            '\b': '\\b',
-            '\t': '\\t',
-            '\n': '\\n',
-            '\f': '\\f',
-            '\r': '\\r',
-            '"' : '\\"',
-            '\\': '\\\\'
-        },
-        s = {
-            'array': function (x) {
-                var a = ['['], b, f, i, l = x.length, v;
-                for (i = 0; i < l; i += 1) {
-                    v = x[i];
-                    f = s[typeof v];
-                    if (f) {
-                        v = f(v);
-                        if (typeof v == 'string') {
-                            if (b) {
-                                a[a.length] = ',';
-                            }
-                            a[a.length] = v;
-                            b = true;
-                        }
-                    }
-                }
-                a[a.length] = ']';
-                return a.join('');
-            },
-            'boolean': function (x) {
-                return String(x);
-            },
-            'null': function (x) {
-                return "null";
-            },
-            'number': function (x) {
-                return isFinite(x) ? String(x) : 'null';
-            },
-            'object': function (x) {
-                if (x) {
-                    if (x instanceof Array) {
-                        return s.array(x);
-                    }
-                    var a = ['{'], b, f, i, v;
-                    for (i in x) {
-                        v = x[i];
-                        f = s[typeof v];
-                        if (f) {
-                            v = f(v);
-                            if (typeof v == 'string') {
-                                if (b) {
-                                    a[a.length] = ',';
-                                }
-                                a.push(s.string(i), ':', v);
-                                b = true;
-                            }
-                        }
-                    }
-                    a[a.length] = '}';
-                    return a.join('');
-                }
-                return 'null';
-            },
-            'string': function (x) {
-                if (/["\\\x00-\x1f]/.test(x)) {
-                    x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) {
-                        var c = m[b];
-                        if (c) {
-                            return c;
-                        }
-                        c = b.charCodeAt();
-                        return '\\u00' +
-                            Math.floor(c / 16).toString(16) +
-                            (c % 16).toString(16);
-                    });
-                }
-                return '"' + x + '"';
-            }
-        };
-
-       $.toJSON = function(v) {
-               var f = isNaN(v) ? s[typeof v] : s['number'];
-               if (f) return f(v);
-       };
-       
-       $.parseJSON = function(v, safe) {
-               if (safe === undefined) safe = $.parseJSON.safe;
-               if (safe && !/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(v))
-                       return undefined;
-               return eval('('+v+')');
-       };
-       
-       $.parseJSON.safe = false;
-
-})(jQuery);
diff --git a/web/javascript/jquery/json.min.js b/web/javascript/jquery/json.min.js
deleted file mode 100644 (file)
index 67dae43..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-(function($){var m={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},s={'array':function(x){var a=['['],b,f,i,l=x.length,v;for(i=0;i<l;i+=1){v=x[i];f=s[typeof v];if(f){v=f(v);if(typeof v=='string'){if(b){a[a.length]=',';}
-a[a.length]=v;b=true;}}}
-a[a.length]=']';return a.join('');},'boolean':function(x){return String(x);},'null':function(x){return"null";},'number':function(x){return isFinite(x)?String(x):'null';},'object':function(x){if(x){if(x instanceof Array){return s.array(x);}
-var a=['{'],b,f,i,v;for(i in x){v=x[i];f=s[typeof v];if(f){v=f(v);if(typeof v=='string'){if(b){a[a.length]=',';}
-a.push(s.string(i),':',v);b=true;}}}
-a[a.length]='}';return a.join('');}
-return'null';},'string':function(x){if(/["\\\x00-\x1f]/.test(x)){x=x.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c;}
-c=b.charCodeAt();return'\\u00'+
-Math.floor(c/16).toString(16)+
-(c%16).toString(16);});}
-return'"'+x+'"';}};$.toJSON=function(v){var f=isNaN(v)?s[typeof v]:s['number'];if(f)return f(v);};$.parseJSON=function(v,safe){if(safe===undefined)safe=$.parseJSON.safe;if(safe&&!/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(v))
-return undefined;return eval('('+v+')');};$.parseJSON.safe=false;})(jQuery);
\ No newline at end of file
diff --git a/web/javascript/jquery/json2.js b/web/javascript/jquery/json2.js
new file mode 100644 (file)
index 0000000..0b889a3
--- /dev/null
@@ -0,0 +1,483 @@
+alert('IMPORTANT: Remove this line from json2.js before deployment.');
+/*
+    http://www.JSON.org/json2.js
+    2010-03-20
+
+    Public Domain.
+
+    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
+
+    See http://www.JSON.org/js.html
+
+
+    This code should be minified before deployment.
+    See http://javascript.crockford.com/jsmin.html
+
+    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
+    NOT CONTROL.
+
+
+    This file creates a global JSON object containing two methods: stringify
+    and parse.
+
+        JSON.stringify(value, replacer, space)
+            value       any JavaScript value, usually an object or array.
+
+            replacer    an optional parameter that determines how object
+                        values are stringified for objects. It can be a
+                        function or an array of strings.
+
+            space       an optional parameter that specifies the indentation
+                        of nested structures. If it is omitted, the text will
+                        be packed without extra whitespace. If it is a number,
+                        it will specify the number of spaces to indent at each
+                        level. If it is a string (such as '\t' or '&nbsp;'),
+                        it contains the characters used to indent at each level.
+
+            This method produces a JSON text from a JavaScript value.
+
+            When an object value is found, if the object contains a toJSON
+            method, its toJSON method will be called and the result will be
+            stringified. A toJSON method does not serialize: it returns the
+            value represented by the name/value pair that should be serialized,
+            or undefined if nothing should be serialized. The toJSON method
+            will be passed the key associated with the value, and this will be
+            bound to the value
+
+            For example, this would serialize Dates as ISO strings.
+
+                Date.prototype.toJSON = function (key) {
+                    function f(n) {
+                        // Format integers to have at least two digits.
+                        return n < 10 ? '0' + n : n;
+                    }
+
+                    return this.getUTCFullYear()   + '-' +
+                         f(this.getUTCMonth() + 1) + '-' +
+                         f(this.getUTCDate())      + 'T' +
+                         f(this.getUTCHours())     + ':' +
+                         f(this.getUTCMinutes())   + ':' +
+                         f(this.getUTCSeconds())   + 'Z';
+                };
+
+            You can provide an optional replacer method. It will be passed the
+            key and value of each member, with this bound to the containing
+            object. The value that is returned from your method will be
+            serialized. If your method returns undefined, then the member will
+            be excluded from the serialization.
+
+            If the replacer parameter is an array of strings, then it will be
+            used to select the members to be serialized. It filters the results
+            such that only members with keys listed in the replacer array are
+            stringified.
+
+            Values that do not have JSON representations, such as undefined or
+            functions, will not be serialized. Such values in objects will be
+            dropped; in arrays they will be replaced with null. You can use
+            a replacer function to replace those with JSON values.
+            JSON.stringify(undefined) returns undefined.
+
+            The optional space parameter produces a stringification of the
+            value that is filled with line breaks and indentation to make it
+            easier to read.
+
+            If the space parameter is a non-empty string, then that string will
+            be used for indentation. If the space parameter is a number, then
+            the indentation will be that many spaces.
+
+            Example:
+
+            text = JSON.stringify(['e', {pluribus: 'unum'}]);
+            // text is '["e",{"pluribus":"unum"}]'
+
+
+            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
+            // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
+
+            text = JSON.stringify([new Date()], function (key, value) {
+                return this[key] instanceof Date ?
+                    'Date(' + this[key] + ')' : value;
+            });
+            // text is '["Date(---current time---)"]'
+
+
+        JSON.parse(text, reviver)
+            This method parses a JSON text to produce an object or array.
+            It can throw a SyntaxError exception.
+
+            The optional reviver parameter is a function that can filter and
+            transform the results. It receives each of the keys and values,
+            and its return value is used instead of the original value.
+            If it returns what it received, then the structure is not modified.
+            If it returns undefined then the member is deleted.
+
+            Example:
+
+            // Parse the text. Values that look like ISO date strings will
+            // be converted to Date objects.
+
+            myData = JSON.parse(text, function (key, value) {
+                var a;
+                if (typeof value === 'string') {
+                    a =
+/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
+                    if (a) {
+                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+                            +a[5], +a[6]));
+                    }
+                }
+                return value;
+            });
+
+            myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
+                var d;
+                if (typeof value === 'string' &&
+                        value.slice(0, 5) === 'Date(' &&
+                        value.slice(-1) === ')') {
+                    d = new Date(value.slice(5, -1));
+                    if (d) {
+                        return d;
+                    }
+                }
+                return value;
+            });
+
+
+    This is a reference implementation. You are free to copy, modify, or
+    redistribute.
+*/
+
+/*jslint evil: true, strict: false */
+
+/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
+    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
+    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
+    lastIndex, length, parse, prototype, push, replace, slice, stringify,
+    test, toJSON, toString, valueOf
+*/
+
+
+// Create a JSON object only if one does not already exist. We create the
+// methods in a closure to avoid creating global variables.
+
+if (!this.JSON) {
+    this.JSON = {};
+}
+
+(function () {
+
+    function f(n) {
+        // Format integers to have at least two digits.
+        return n < 10 ? '0' + n : n;
+    }
+
+    if (typeof Date.prototype.toJSON !== 'function') {
+
+        Date.prototype.toJSON = function (key) {
+
+            return isFinite(this.valueOf()) ?
+                   this.getUTCFullYear()   + '-' +
+                 f(this.getUTCMonth() + 1) + '-' +
+                 f(this.getUTCDate())      + 'T' +
+                 f(this.getUTCHours())     + ':' +
+                 f(this.getUTCMinutes())   + ':' +
+                 f(this.getUTCSeconds())   + 'Z' : null;
+        };
+
+        String.prototype.toJSON =
+        Number.prototype.toJSON =
+        Boolean.prototype.toJSON = function (key) {
+            return this.valueOf();
+        };
+    }
+
+    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+        gap,
+        indent,
+        meta = {    // table of character substitutions
+            '\b': '\\b',
+            '\t': '\\t',
+            '\n': '\\n',
+            '\f': '\\f',
+            '\r': '\\r',
+            '"' : '\\"',
+            '\\': '\\\\'
+        },
+        rep;
+
+
+    function quote(string) {
+
+// If the string contains no control characters, no quote characters, and no
+// backslash characters, then we can safely slap some quotes around it.
+// Otherwise we must also replace the offending characters with safe escape
+// sequences.
+
+        escapable.lastIndex = 0;
+        return escapable.test(string) ?
+            '"' + string.replace(escapable, function (a) {
+                var c = meta[a];
+                return typeof c === 'string' ? c :
+                    '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+            }) + '"' :
+            '"' + string + '"';
+    }
+
+
+    function str(key, holder) {
+
+// Produce a string from holder[key].
+
+        var i,          // The loop counter.
+            k,          // The member key.
+            v,          // The member value.
+            length,
+            mind = gap,
+            partial,
+            value = holder[key];
+
+// If the value has a toJSON method, call it to obtain a replacement value.
+
+        if (value && typeof value === 'object' &&
+                typeof value.toJSON === 'function') {
+            value = value.toJSON(key);
+        }
+
+// If we were called with a replacer function, then call the replacer to
+// obtain a replacement value.
+
+        if (typeof rep === 'function') {
+            value = rep.call(holder, key, value);
+        }
+
+// What happens next depends on the value's type.
+
+        switch (typeof value) {
+        case 'string':
+            return quote(value);
+
+        case 'number':
+
+// JSON numbers must be finite. Encode non-finite numbers as null.
+
+            return isFinite(value) ? String(value) : 'null';
+
+        case 'boolean':
+        case 'null':
+
+// If the value is a boolean or null, convert it to a string. Note:
+// typeof null does not produce 'null'. The case is included here in
+// the remote chance that this gets fixed someday.
+
+            return String(value);
+
+// If the type is 'object', we might be dealing with an object or an array or
+// null.
+
+        case 'object':
+
+// Due to a specification blunder in ECMAScript, typeof null is 'object',
+// so watch out for that case.
+
+            if (!value) {
+                return 'null';
+            }
+
+// Make an array to hold the partial results of stringifying this object value.
+
+            gap += indent;
+            partial = [];
+
+// Is the value an array?
+
+            if (Object.prototype.toString.apply(value) === '[object Array]') {
+
+// The value is an array. Stringify every element. Use null as a placeholder
+// for non-JSON values.
+
+                length = value.length;
+                for (i = 0; i < length; i += 1) {
+                    partial[i] = str(i, value) || 'null';
+                }
+
+// Join all of the elements together, separated with commas, and wrap them in
+// brackets.
+
+                v = partial.length === 0 ? '[]' :
+                    gap ? '[\n' + gap +
+                            partial.join(',\n' + gap) + '\n' +
+                                mind + ']' :
+                          '[' + partial.join(',') + ']';
+                gap = mind;
+                return v;
+            }
+
+// If the replacer is an array, use it to select the members to be stringified.
+
+            if (rep && typeof rep === 'object') {
+                length = rep.length;
+                for (i = 0; i < length; i += 1) {
+                    k = rep[i];
+                    if (typeof k === 'string') {
+                        v = str(k, value);
+                        if (v) {
+                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
+                        }
+                    }
+                }
+            } else {
+
+// Otherwise, iterate through all of the keys in the object.
+
+                for (k in value) {
+                    if (Object.hasOwnProperty.call(value, k)) {
+                        v = str(k, value);
+                        if (v) {
+                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
+                        }
+                    }
+                }
+            }
+
+// Join all of the member texts together, separated with commas,
+// and wrap them in braces.
+
+            v = partial.length === 0 ? '{}' :
+                gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
+                        mind + '}' : '{' + partial.join(',') + '}';
+            gap = mind;
+            return v;
+        }
+    }
+
+// If the JSON object does not yet have a stringify method, give it one.
+
+    if (typeof JSON.stringify !== 'function') {
+        JSON.stringify = function (value, replacer, space) {
+
+// The stringify method takes a value and an optional replacer, and an optional
+// space parameter, and returns a JSON text. The replacer can be a function
+// that can replace values, or an array of strings that will select the keys.
+// A default replacer method can be provided. Use of the space parameter can
+// produce text that is more easily readable.
+
+            var i;
+            gap = '';
+            indent = '';
+
+// If the space parameter is a number, make an indent string containing that
+// many spaces.
+
+            if (typeof space === 'number') {
+                for (i = 0; i < space; i += 1) {
+                    indent += ' ';
+                }
+
+// If the space parameter is a string, it will be used as the indent string.
+
+            } else if (typeof space === 'string') {
+                indent = space;
+            }
+
+// If there is a replacer, it must be a function or an array.
+// Otherwise, throw an error.
+
+            rep = replacer;
+            if (replacer && typeof replacer !== 'function' &&
+                    (typeof replacer !== 'object' ||
+                     typeof replacer.length !== 'number')) {
+                throw new Error('JSON.stringify');
+            }
+
+// Make a fake root object containing our value under the key of ''.
+// Return the result of stringifying the value.
+
+            return str('', {'': value});
+        };
+    }
+
+
+// If the JSON object does not yet have a parse method, give it one.
+
+    if (typeof JSON.parse !== 'function') {
+        JSON.parse = function (text, reviver) {
+
+// The parse method takes a text and an optional reviver function, and returns
+// a JavaScript value if the text is a valid JSON text.
+
+            var j;
+
+            function walk(holder, key) {
+
+// The walk method is used to recursively walk the resulting structure so
+// that modifications can be made.
+
+                var k, v, value = holder[key];
+                if (value && typeof value === 'object') {
+                    for (k in value) {
+                        if (Object.hasOwnProperty.call(value, k)) {
+                            v = walk(value, k);
+                            if (v !== undefined) {
+                                value[k] = v;
+                            } else {
+                                delete value[k];
+                            }
+                        }
+                    }
+                }
+                return reviver.call(holder, key, value);
+            }
+
+
+// Parsing happens in four stages. In the first stage, we replace certain
+// Unicode characters with escape sequences. JavaScript handles many characters
+// incorrectly, either silently deleting them, or treating them as line endings.
+
+            text = String(text);
+            cx.lastIndex = 0;
+            if (cx.test(text)) {
+                text = text.replace(cx, function (a) {
+                    return '\\u' +
+                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+                });
+            }
+
+// In the second stage, we run the text against regular expressions that look
+// for non-JSON patterns. We are especially concerned with '()' and 'new'
+// because they can cause invocation, and '=' because it can cause mutation.
+// But just to be safe, we want to reject all unexpected forms.
+
+// We split the second stage into 4 regexp operations in order to work around
+// crippling inefficiencies in IE's and Safari's regexp engines. First we
+// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
+// replace all simple value tokens with ']' characters. Third, we delete all
+// open brackets that follow a colon or comma or that begin the text. Finally,
+// we look to see that the remaining characters are only whitespace or ']' or
+// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
+
+            if (/^[\],:{}\s]*$/.
+test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
+replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
+replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
+
+// In the third stage we use the eval function to compile the text into a
+// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
+// in JavaScript: it can begin a block or an object literal. We wrap the text
+// in parens to eliminate the ambiguity.
+
+                j = eval('(' + text + ')');
+
+// In the optional fourth stage, we recursively walk the new structure, passing
+// each name/value pair to a reviver function for possible transformation.
+
+                return typeof reviver === 'function' ?
+                    walk({'': j}, '') : j;
+            }
+
+// If the text is not JSON parseable, then a SyntaxError is thrown.
+
+            throw new SyntaxError('JSON.parse');
+        };
+    }
+}());
diff --git a/web/javascript/jquery/json2.min.js b/web/javascript/jquery/json2.min.js
new file mode 100644 (file)
index 0000000..e31dba7
--- /dev/null
@@ -0,0 +1,24 @@
+/* json2.js 
+ * 2008-01-17
+ * Public Domain
+ * No warranty expressed or implied. Use at your own risk.
+ * See http://www.JSON.org/js.html
+*/
+if(!this.JSON){JSON=function(){function f(n){return n<10?'0'+n:n;}
+Date.prototype.toJSON=function(){return this.getUTCFullYear()+'-'+
+f(this.getUTCMonth()+1)+'-'+
+f(this.getUTCDate())+'T'+
+f(this.getUTCHours())+':'+
+f(this.getUTCMinutes())+':'+
+f(this.getUTCSeconds())+'Z';};var m={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'};function stringify(value,whitelist){var a,i,k,l,r=/["\\\x00-\x1f\x7f-\x9f]/g,v;switch(typeof value){case'string':return r.test(value)?'"'+value.replace(r,function(a){var c=m[a];if(c){return c;}
+c=a.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+
+(c%16).toString(16);})+'"':'"'+value+'"';case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}
+if(typeof value.toJSON==='function'){return stringify(value.toJSON());}
+a=[];if(typeof value.length==='number'&&!(value.propertyIsEnumerable('length'))){l=value.length;for(i=0;i<l;i+=1){a.push(stringify(value[i],whitelist)||'null');}
+return'['+a.join(',')+']';}
+if(whitelist){l=whitelist.length;for(i=0;i<l;i+=1){k=whitelist[i];if(typeof k==='string'){v=stringify(value[k],whitelist);if(v){a.push(stringify(k)+':'+v);}}}}else{for(k in value){if(typeof k==='string'){v=stringify(value[k],whitelist);if(v){a.push(stringify(k)+':'+v);}}}}
+return'{'+a.join(',')+'}';}}
+return{stringify:stringify,parse:function(text,filter){var j;function walk(k,v){var i,n;if(v&&typeof v==='object'){for(i in v){if(Object.prototype.hasOwnProperty.apply(v,[i])){n=walk(i,v[i]);if(n!==undefined){v[i]=n;}}}}
+return filter(k,v);}
+if(/^[\],:{}\s]*$/.test(text.replace(/\\./g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof filter==='function'?walk('',j):j;}
+throw new SyntaxError('parseJSON');}};}();}
index c240e77bea91f026b125ea0fec7a20e435ab9be1..c74aa8dd47b42812e887a93b082bbf43858d9269 100644 (file)
@@ -27,6 +27,7 @@ Transmission.prototype =
                this._current_search         = '';
                this._torrents               = { };
                this._rows                   = [ ];
+               this._prefs                  = { };
 
                // Initialize the clutch preferences
                Prefs.getClutchPrefs( this );
@@ -45,9 +46,6 @@ Transmission.prototype =
                $('#filter_downloading_link').parent().bind('click', function(e){ tr.showDownloadingClicked(e); });
                $('#filter_seeding_link').parent().bind('click', function(e){ tr.showSeedingClicked(e); });
                $('#filter_paused_link').parent().bind('click', function(e){ tr.showPausedClicked(e); });
-               $('#prefs_save_button').bind('click', function(e) { tr.savePrefsClicked(e); return false;});
-               $('#prefs_cancel_button').bind('click', function(e){ tr.cancelPrefsClicked(e); return false; });
-               $('#stats_close_button').bind('click', function(e){ tr.closeStatsClicked(e); return false; });
                $('.inspector_tab').bind('click', function(e){ tr.inspectorTabClicked(e, this); });
                $('.file_wanted_control').live('click', function(e){ tr.fileWantedClicked(e, this); });
                $('.file_priority_control').live('click', function(e){ tr.filePriorityClicked(e, this); });
@@ -74,6 +72,7 @@ Transmission.prototype =
                        this.createSettingsMenu();
                }
                this.initTurtleDropDowns();
+               this.initPrefs();
 
                this._torrent_list             = $('#torrent_list')[0];
                this._inspector_file_list      = $('#inspector_file_list')[0];
@@ -338,8 +337,8 @@ Transmission.prototype =
                var i, out, hour, mins, start, end, value, content;
                // Build the list of times
                out = "";
-               start = $('#turtle_start_time')[0];
-               end = $('#turtle_end_time')[0];
+               start = $('#alt-speed-time-begin')[0];
+               end = $('#alt-speed-time-end')[0];
                for (i = 0; i < 24 * 4; i++) {
                        hour = parseInt(i / 4);
                        mins = ((i % 4) * 15);
@@ -632,50 +631,6 @@ Transmission.prototype =
                this.hidePrefsDialog( );
        },
 
-       savePrefsClicked: function(event)
-       {
-               // handle the clutch prefs locally
-               var tr = this;
-               var rate = parseInt( $('#prefs_form #refresh_rate')[0].value );
-               if( rate != tr[Prefs._RefreshRate] ) {
-                       tr.setPref( Prefs._RefreshRate, rate );
-                       tr.togglePeriodicRefresh( false );
-                       tr.togglePeriodicRefresh( true );
-               }
-
-               var up_bytes        = parseInt( $('#prefs_form #upload_rate'  )[0].value );
-               var dn_bytes        = parseInt( $('#prefs_form #download_rate')[0].value );
-               var turtle_up_bytes = parseInt( $('#prefs_form #turtle_upload_rate'  )[0].value );
-               var turtle_dn_bytes = parseInt( $('#prefs_form #turtle_download_rate')[0].value );
-
-               // pass the new prefs upstream to the RPC server
-               var o = { };
-               o[RPC._StartAddedTorrent]    = $('#prefs_form #auto_start')[0].checked;
-               o[RPC._PeerPort]             = parseInt( $('#prefs_form #port')[0].value );
-               o[RPC._UpSpeedLimit]         = up_bytes;
-               o[RPC._DownSpeedLimit]       = dn_bytes;
-               o[RPC._DownloadDir]          = $('#prefs_form #download_location')[0].value;
-               o[RPC._UpSpeedLimited]       = $('#prefs_form #limit_upload'  )[0].checked;
-               o[RPC._DownSpeedLimited]     = $('#prefs_form #limit_download')[0].checked;
-               o[RPC._Encryption]           = $('#prefs_form #encryption')[0].checked
-                                                  ? RPC._EncryptionRequired
-                                                  : RPC._EncryptionPreferred;
-               o[RPC._TurtleDownSpeedLimit] = turtle_dn_bytes;
-               o[RPC._TurtleUpSpeedLimit]   = turtle_up_bytes;
-               o[RPC._TurtleTimeEnabled]    = $('#prefs_form #turtle_schedule')[0].checked;
-               o[RPC._TurtleTimeBegin]      = parseInt( $('#prefs_form #turtle_start_time').val() );
-               o[RPC._TurtleTimeEnd]        = parseInt( $('#prefs_form #turtle_end_time').val() );
-               o[RPC._TurtleTimeDay]        = parseInt( $('#prefs_form #turtle_days').val() );
-
-               tr.remote.savePrefs( o );
-
-               tr.hidePrefsDialog( );
-       },
-
-       closeStatsClicked: function(event) {
-               this.hideStatsDialog( );
-       },
-
        removeClicked: function( event ) {
                var tr = this;
                if( tr.isButtonEnabled( event ) ) {
@@ -869,11 +824,11 @@ Transmission.prototype =
                var tr = this;
                if (state && this._periodic_session_refresh == null) {
                        // sanity check
-                       if( !this[Prefs._SessionRefreshRate] )
-                            this[Prefs._SessionRefreshRate] = 5;
+                       if( !this._prefs[Prefs._SessionRefreshRate] )
+                            this._prefs[Prefs._SessionRefreshRate] = 10;
                        remote = this.remote;
                        this._periodic_session_refresh = setInterval(
-                               function(){ tr.loadDaemonPrefs(); }, this[Prefs._SessionRefreshRate] * 1000
+                               function(){ tr.loadDaemonPrefs(); }, this._prefs[Prefs._SessionRefreshRate] * 1000
                        );
                } else {
                        clearInterval(this._periodic_session_refresh);
@@ -901,12 +856,8 @@ Transmission.prototype =
        },
 
        toggleTurtleClicked: function() {
-               // Toggle the value
-               this[Prefs._TurtleState] = !this[Prefs._TurtleState];
-               // Store the result
-               var args = { };
-               args[RPC._TurtleState] = this[Prefs._TurtleState];
-               this.remote.savePrefs( args );
+               var key = RPC._TurtleState;
+               this.setPrefIfDifferent( key, !this._prefs[key] );
        },
 
        updateSelectedData: function()
@@ -921,7 +872,7 @@ Transmission.prototype =
        updateTurtleButton: function() {
                var w = $('#turtle_button');
                var t;
-               if ( this[Prefs._TurtleState] ) {
+               if ( this._prefs[RPC._TurtleState] ) {
                        w.addClass('turtleEnabled');
                        w.removeClass('turtleDisabled');
                        t = "Click to disable Temporary Speed Limits";
@@ -942,29 +893,125 @@ Transmission.prototype =
         *--------------------------------------------*/
 
        showPrefsDialog: function( ) {
-               $('body').addClass('prefs_showing');
-               $('#prefs_container').show();
-               this.hideiPhoneAddressbar();
-               if( Safari3 )
-                       setTimeout("$('div#prefs_container div.dialog_window').css('top', '0px');",10);
-               this.updateButtonStates( );
-               this.togglePeriodicSessionRefresh(false);
+               var tr = this;
+               $("#update_blocklist_button").button();
+               $("#prefs_tabs").tabs();
+               var args = { };
+               if( iPhone ) { // tailor the dialog geometry for iPhone
+                       $.extend( args, {
+                               width: 320,
+                               height: 360,
+                               resizable: false,
+                               draggable: false,
+                               position: [ 0, 0 ]
+                       } );
+               } else {
+                       $.extend( args, {
+                               width: 450,
+                               height: 400
+                       } );
+               }
+               $.extend( args, {
+                        title: 'Preferences',
+                        show: 'blind',
+                        hide: 'blind',
+                        buttons: {
+                               'Close': function() {
+                                       $(this).dialog('close');
+                                       tr.togglePeriodicSessionRefresh( true );
+                               }
+                       }
+               } );
+                $("#prefs_dialog" ).dialog( args );
+               tr.togglePeriodicSessionRefresh( false );
+       },
+
+       prefsKeys: [ 'alt-speed-down', 'alt-speed-enabled',
+                    'alt-speed-time-begin', 'alt-speed-time-enabled',
+                    'alt-speed-time-end', 'alt-speed-time-day',
+                    'alt-speed-up', 'blocklist-enabled',
+                    'blocklist-size', 'cache-size', 'config-dir',
+                    'download-dir', 'dht-enabled', 'encryption',
+                    'idle-seeding-limit', 'idle-seeding-limit-enabled',
+                    'incomplete-dir', 'incomplete-dir-enabled',
+                    'lpd-enabled',
+                    'peer-limit-global', 'peer-limit-per-torrent',
+                    'pex-enabled',
+                    'peer-port', 'peer-port-random-on-start',
+                    'port-forwarding-enabled', 'rename-partial-files',
+                    'rpc-version', 'rpc-version-minimum',
+                    'script-torrent-done-filename',
+                    'script-torrent-done-enabled',
+                    'seedRatioLimit', 'seedRatioLimited',
+                    'speed-limit-down', 'speed-limit-down-enabled',
+                    'speed-limit-up', 'speed-limit-up-enabled',
+                    'start-added-torrents',
+                    'trash-original-torrent-files',
+                    'version' ],
+
+       setPrefIfDifferent: function( key, value ) {
+               var tr = this;
+               if( tr._prefs[key] != value ) {
+                       var args = { };
+                       args[key] = value;
+                       tr.updatePrefs( args ); // tell our local copy about the change
+                       tr.remote.savePrefs( args ); // tell our server about the change
+               }
        },
 
-       hidePrefsDialog: function( )
+       initPrefs: function( )
        {
-               $('body.prefs_showing').removeClass('prefs_showing');
-               if (iPhone) {
-                       this.hideiPhoneAddressbar();
-                       $('#prefs_container').hide();
-               } else if (Safari3) {
-                       $('div#prefs_container div.dialog_window').css('top', '-425px');
-                       setTimeout("$('#prefs_container').hide();",500);
-               } else {
-                       $('#prefs_container').hide();
-               }
-               this.updateButtonStates( );
-               this.togglePeriodicSessionRefresh(true);
+               var tr = this;
+
+               $.each( this.prefsKeys, function( index, key ) {
+                       $(':input#'+key).change( function( e ) {
+                               var control = e.target;
+                               var value;
+                               if( control.type == 'checkbox' )
+                                       value = control.checked;
+                               else {
+                                       value = parseFloat( e.target.value );
+                                       if( value == NaN ) value = parseInt( e.target.value );
+                                       if( value == NaN ) value = e.target.value;
+                               }
+                               tr.setPrefIfDifferent( key, value );
+
+                               if( key == 'peer-port' ) {
+                                       // changing the port invalidates the port status
+                                       delete tr._prefs['port-is-open'];
+                                       tr.updatePrefs( tr._prefs );
+                               }
+                       });
+               });
+
+               $('#port-status-spinner').hide();
+               $(':button#port-test').click(function(e) {
+                       e.target.disabled = true;
+                       $('#port-status-label' ).html( 'Testing...' );
+                       var img = $('#port-status-spinner');
+                       img.show();
+                       var args = { };
+                       tr.remote.portTest( function(data){
+                               //console.log(data.arguments);
+                               e.target.disabled = false;
+                               img.hide();
+                               tr.updatePrefs( data.arguments );
+                       }, true );
+               });
+
+               $('#blocklist-update-spinner').hide();
+               $(':button#blocklist-update').click(function(e) {
+                       e.target.disabled = true;
+                       var img = $('#blocklist-update-spinner');
+                       img.show();
+                       var args = { };
+                       tr.remote.blocklistUpdate( function(data){
+                               console.log(data.arguments);
+                               e.target.disabled = false;
+                               img.hide();
+                               tr.updatePrefs( data.arguments );
+                       }, true );
+               });
        },
 
        /*
@@ -972,74 +1019,66 @@ Transmission.prototype =
         */
        updatePrefs: function( prefs )
        {
+               var tr = this;
+               var updateTurtle = false;
+
                // remember them for later
-               this._prefs = prefs;
-
-               var up_limited        = prefs[RPC._UpSpeedLimited];
-               var dn_limited        = prefs[RPC._DownSpeedLimited];
-               var up_limit_k        = prefs[RPC._UpSpeedLimit];
-               var dn_limit_k        = prefs[RPC._DownSpeedLimit];
-               var turtle_up_limit_k = prefs[RPC._TurtleUpSpeedLimit];
-               var turtle_dn_limit_k = prefs[RPC._TurtleDownSpeedLimit];
-
-               $('div.download_location input')[0].value = prefs[RPC._DownloadDir];
-               $('div.port input')[0].value              = prefs[RPC._PeerPort];
-               $('div.auto_start input')[0].checked      = prefs[RPC._StartAddedTorrent];
-               $('input#limit_download')[0].checked      = dn_limited;
-               $('input#download_rate')[0].value         = dn_limit_k;
-               $('input#limit_upload')[0].checked        = up_limited;
-               $('input#upload_rate')[0].value           = up_limit_k;
-               $('input#refresh_rate')[0].value          = prefs[Prefs._RefreshRate];
-               $('div.encryption input')[0].checked      = prefs[RPC._Encryption] == RPC._EncryptionRequired;
-               $('input#turtle_download_rate')[0].value  = turtle_dn_limit_k;
-               $('input#turtle_upload_rate')[0].value    = turtle_up_limit_k;
-               $('input#turtle_schedule')[0].checked     = prefs[RPC._TurtleTimeEnabled];
-               $('select#turtle_start_time').val(          prefs[RPC._TurtleTimeBegin] );
-               $('select#turtle_end_time').val(            prefs[RPC._TurtleTimeEnd] );
-               $('select#turtle_days').val(                prefs[RPC._TurtleTimeDay] );
-               $('#transmission_version').text(            prefs[RPC._DaemonVersion] );
-
-               if (!iPhone)
-               {
-                       setInnerHTML( $('#limited_download_rate')[0], 'Limit (' + Transmission.fmt.speed(dn_limit_k) + ')' );
-                       var key = dn_limited ? '#limited_download_rate'
-                                              : '#unlimited_download_rate';
-                       $(key).deselectMenuSiblings().selectMenuItem();
-
-                       setInnerHTML( $('#limited_upload_rate')[0], 'Limit (' + Transmission.fmt.speed(up_limit_k) + ')' );
-                       key = up_limited ? '#limited_upload_rate'
-                                        : '#unlimited_upload_rate';
-                       $(key).deselectMenuSiblings().selectMenuItem();
+               $.extend(this._prefs, prefs);
+
+               // update the prefs dialog
+               var key;
+               for( key in prefs ) {
+                       $(':input#'+key).each(function(index,e) {
+                               if( e.type=='checkbox')
+                                       e.checked = prefs[key];
+                               else
+                                       e.value = prefs[key];
+                       });
+
+                       // extra pieces
+                       if( key === RPC._DownSpeedLimit )
+                               $('#limited_download_rate').html('Limit (' + Transmission.fmt.speed(this._prefs[RPC._DownSpeedLimit]) + ')' );
+                       else if( key === RPC._DownSpeedLimited )
+                               $(this._prefs[RPC._DownSpeedLimited] ? '#limited_download_rate' : '#unlimited_download_rate').deselectMenuSiblings().selectMenuItem();
+                       else if( key == RPC._UpSpeedLimit )
+                               $('#limited_upload_rate').html('Limit (' + Transmission.fmt.speed(this._prefs[RPC._UpSpeedLimit]) + ')' );
+                       else if( key === RPC._UpSpeedLimited )
+                               $(this._prefs[RPC._UpSpeedLimited] ? '#limited_upload_rate' : '#unlimited_upload_rate').deselectMenuSiblings().selectMenuItem();
+                       else if( key === RPC._TurtleState )
+                               updateTurtle = true;
+                       else if( key === RPC._TurtleUpSpeedLimit )
+                               updateTurtle = true;
+                       else if( key === RPC._TurtleDownSpeedLimit )
+                               updateTurtle = true;
+                       else if( key == 'blocklist-size' )
+                               $('#' + key).html( '' + prefs[key] );
+                       else if( key == 'port-is-open' )
+                               $('#port-status-label' ).html( 'Port is ' + (prefs[key] ? 'open' : 'closed') );
                }
 
-               this[Prefs._TurtleState] = prefs[RPC._TurtleState];
-               this.updateTurtleButton();
-       },
+               if( this._prefs['port-is-open'] == undefined )
+                       $('#port-status-label').html( '<i>Status unknown</i>' );
 
-       showStatsDialog: function( ) {
-               this.loadDaemonStats();
-               $('body').addClass('stats_showing');
-               $('#stats_container').show();
-               this.hideiPhoneAddressbar();
-               if( Safari3 )
-                       setTimeout("$('div#stats_container div.dialog_window').css('top', '0px');",10);
-               this.updateButtonStates( );
-               this.togglePeriodicStatsRefresh(true);
+               if( updateTurtle )
+                       this.updateTurtleButton();
        },
 
-       hideStatsDialog: function( ){
-               $('body.stats_showing').removeClass('stats_showing');
-               if (iPhone) {
-                       this.hideiPhoneAddressbar();
-                       $('#stats_container').hide();
-               } else if (Safari3) {
-                       $('div#stats_container div.dialog_window').css('top', '-425px');
-                       setTimeout("$('#stats_container').hide();",500);
-               } else {
-                       $('#stats_container').hide();
-               }
-               this.updateButtonStates( );
-               this.togglePeriodicStatsRefresh(false);
+       showStatsDialog: function( ) {
+               var tr = this;
+               tr.loadDaemonStats();
+               tr.togglePeriodicStatsRefresh(true);
+                $("#stats_dialog" ).dialog( {
+                        title: 'Statistics',
+                        show: 'blind',
+                        hide: 'blind',
+                       width: 200,
+                        buttons: {
+                               'Close': function() {
+                                       tr.togglePeriodicStatsRefresh(false);
+                                       $(this).dialog('close');
+                               }
+                       }
+                });
        },
 
        /*
@@ -1057,7 +1096,7 @@ Transmission.prototype =
                setInnerHTML( $('#stats_session_downloaded')[0], Transmission.fmt.size(session["downloadedBytes"]) );
                setInnerHTML( $('#stats_session_ratio')[0], Transmission.fmt.ratioString(Math.ratio(session["uploadedBytes"],session["downloadedBytes"])));
                setInnerHTML( $('#stats_session_duration')[0], Transmission.fmt.timeInterval(session["secondsActive"]) );
-               setInnerHTML( $('#stats_total_count')[0], total["sessionCount"] + " times" );
+               setInnerHTML( $('#stats_total_count')[0], 'Started ' + total["sessionCount"] + " times" );
                setInnerHTML( $('#stats_total_uploaded')[0], Transmission.fmt.size(total["uploadedBytes"]) );
                setInnerHTML( $('#stats_total_downloaded')[0], Transmission.fmt.size(total["downloadedBytes"]) );
                setInnerHTML( $('#stats_total_ratio')[0], Transmission.fmt.ratioString(Math.ratio(total["uploadedBytes"],total["downloadedBytes"])));
@@ -1113,21 +1152,18 @@ Transmission.prototype =
 
                        // Limit the download rate
                        case 'footer_download_rate_menu':
-                               var args = { };
+                               //var args = { };
                                if ($element.is('#unlimited_download_rate')) {
                                        $element.deselectMenuSiblings().selectMenuItem();
-                                       args[RPC._DownSpeedLimited] = false;
+                                       tr.setPrefIfDifferent( RPC._DownSpeedLimited, false );
                                } else {
                                        var rate_str = ($element[0].innerHTML).replace(/[^0-9]/ig, '');
                                        var rate_val = parseInt( rate_str );
                                        setInnerHTML( $('#limited_download_rate')[0], 'Limit (' + Transmission.fmt.speed(rate_val) + ')' );
                                        $('#limited_download_rate').deselectMenuSiblings().selectMenuItem();
-                                       $('div.preference input#download_rate')[0].value = rate_str;
-                                       args[RPC._DownSpeedLimit] = rate_val;
-                                       args[RPC._DownSpeedLimited] = true;
+                                       tr.setPrefIfDifferent( RPC._DownSpeedLimit, rate_val );
+                                       tr.setPrefIfDifferent( RPC._DownSpeedLimited, true );
                                }
-                               $('div.preference input#limit_download')[0].checked = args[RPC._DownSpeedLimited];
-                               tr.remote.savePrefs( args );
                                break;
 
                        // Limit the upload rate
@@ -1135,18 +1171,15 @@ Transmission.prototype =
                                var args = { };
                                if ($element.is('#unlimited_upload_rate')) {
                                        $element.deselectMenuSiblings().selectMenuItem();
-                                       args[RPC._UpSpeedLimited] = false;
+                                       tr.setPrefIfDifferent( RPC._UpSpeedLimited, false );
                                } else {
                                        var rate_str = ($element[0].innerHTML).replace(/[^0-9]/ig, '');
                                        var rate_val = parseInt( rate_str );
                                        setInnerHTML( $('#limited_upload_rate')[0], 'Limit (' + Transmission.fmt.speed(rate_val) + ')' );
                                        $('#limited_upload_rate').deselectMenuSiblings().selectMenuItem();
-                                       $('div.preference input#upload_rate')[0].value = rate_str;
-                                       args[RPC._UpSpeedLimit] = rate_val;
-                                       args[RPC._UpSpeedLimited] = true;
+                                       tr.setPrefIfDifferent( RPC._UpSpeedLimit, rate_val );
+                                       tr.setPrefIfDifferent( RPC._UpSpeedLimited, true );
                                }
-                               $('div.preference input#limit_upload')[0].checked = args[RPC._UpSpeedLimited];
-                               tr.remote.savePrefs( args );
                                break;
 
                        // Sort the torrent list
@@ -1824,16 +1857,24 @@ Transmission.prototype =
                        var torrent = torrents[0];
                        var header = 'Remove ' + torrent.name() + '?';
                        var message = 'Once removed, continuing the transfer will require the torrent file. Are you sure you want to remove it?';
-                       dialog.confirm( header, message, 'Remove', 'transmission.removeTorrents', torrents );
+                       askUser( header, message, 'Remove', transmission.removeTorrents, torrents );
                }
                else
                {
                        var header = 'Remove ' + torrents.length + ' transfers?';
                        var message = 'Once removed, continuing the transfers will require the torrent files. Are you sure you want to remove them?';
-                       dialog.confirm( header, message, 'Remove', 'transmission.removeTorrents', torrents );
+                       askUser( header, message, 'Remove', transmission.removeTorrents, torrents );
                }
        },
 
+       removeTorrents: function( torrents ) {
+               console.log( "in removeTorrents" );
+               console.log( torrents );
+               var torrent_ids = jQuery.map(torrents, function(t) { return t.id(); } );
+               var tr = this;
+               //this.remote.removeTorrents( torrent_ids, function(){ tr.refreshTorrents() } );
+       },
+
        promptToRemoveTorrentsAndData:function( torrents )
        {
                if( torrents.length == 1 )
@@ -1841,22 +1882,16 @@ Transmission.prototype =
                        var torrent = torrents[0],
                                header = 'Remove ' + torrent.name() + ' and delete data?',
                                message = 'All data downloaded for this torrent will be deleted. Are you sure you want to remove it?';
-                       dialog.confirm( header, message, 'Remove', 'transmission.removeTorrentsAndData', torrents );
+                       askUser( header, message, 'Remove', transmission.removeTorrentsAndData, torrents );
                }
                else
                {
                        var header = 'Remove ' + torrents.length + ' transfers and delete data?',
                                message = 'All data downloaded for these torrents will be deleted. Are you sure you want to remove them?';
-                       dialog.confirm( header, message, 'Remove', 'transmission.removeTorrentsAndData', torrents );
+                       askUser( header, message, 'Remove', transmission.removeTorrentsAndData, torrents );
                }
        },
 
-       removeTorrents: function( torrents ) {
-               var torrent_ids = jQuery.map(torrents, function(t) { return t.id(); } );
-               var tr = this;
-               this.remote.removeTorrents( torrent_ids, function(){ tr.refreshTorrents() } );
-       },
-
        removeTorrentsAndData: function( torrents ) {
                this.remote.removeTorrentsAndData( torrents );
        },
index 7383b562575476a41322bca50e734703f91b67de..341d56db9809ba3f9ee583bb9812b024f04b7ba3 100644 (file)
@@ -67,13 +67,8 @@ TransmissionRemote.prototype =
                                        : "";
                if( !remote._error.length )
                        remote._error = 'Server not responding';
-
-               dialog.confirm('Connection Failed',
-                       'Could not connect to the server. You may need to reload the page to reconnect.',
-                       'Details',
-                       'alert(remote._error);',
-                       null,
-                       'Dismiss');
+               tellUser( 'Connection failed',
+                         'Could not connect to the server. You may need to reload the page to reconnect.' );
                remote._controller.togglePeriodicRefresh(false);
                remote._controller.togglePeriodicSessionRefresh(false);
        },
@@ -93,7 +88,7 @@ TransmissionRemote.prototype =
                        contentType: 'json',
                        dataType: 'json',
                        cache: false,
-                       data: $.toJSON(data),
+                       data: JSON.stringify(data),
                        beforeSend: function(XHR){ remote.appendSessionId(XHR) },
                        error: function(request, error_string, exception){ remote.ajaxError(request, error_string, exception, ajaxSettings) },
                        success: success,
@@ -115,6 +110,19 @@ TransmissionRemote.prototype =
                this.sendRequest( o, callback, async );
        },
 
+       blocklistUpdate: function( callback, async ) {
+               var tr = this._controller;
+               var o = { method: 'blocklist-update' };
+               this.sendRequest( o, callback, async );
+       },
+
+       portTest: function( callback, async ) {
+               var tr = this._controller;
+               var o = { method: 'port-test' };
+               this.sendRequest( o, callback, async );
+       },
+
+
        getInitialDataFor: function(torrent_ids, callback) {
                var o = {
                        method: 'torrent-get',
index 58d3104119f5eaac63352e062d763c9aeedb680c..0b175fc885129ee5a2d88caddb6e8949173b41d3 100644 (file)
@@ -976,127 +976,32 @@ div.torrent_footer div#turtle_button {
  *
  *--------------------------------------*/
 
-div.dialog_container {
-       position: absolute;
-       top: 0;
-       left: 0px;
-       margin: 0px;
-       width: 100%;
-       height: 100%;
-       text-align: center;
-       color: black;
-       font-size: 1.1em;
-}
-
-div.dialog_container div.dialog_window {
-       background-color: #eee;
-       margin: 0 auto;
-       filter: alpha(opacity=95);
-       -moz-opacity: .95;
-       opacity: .95;
-       border-top: none;
-       text-align: left;
-       width: 420px;
-       z-index: 4;
-       overflow: hidden;
-       position: relative;
-       -webkit-box-shadow: 0 3px 6px rgba(0,0,0,0.7);
-       top: 80px;
-}
-@media screen and (-webkit-min-device-pixel-ratio:0) {
-       div.dialog_container div.dialog_window {
-               top: 0;
-               margin-top: 71px;
-               z-index: 2
-       }
-}
-
-div#prefs_container div.dialog_window {
-       width: 410px;
-       padding: 0 15px;
-}
-
-div#stats_container div.dialog_window {
-       width: 255px;
-       padding: 0 15px;
-}
-
-div.dialog_container div.dialog_window img {
-       margin: 20px 20px 0 20px;
-       float: left;
-}
-
-div.dialog_container div.dialog_window h2.dialog_heading {
-       display: block;
-       float: left;
-       width: 305px;
-       font-size: 1.2em;
-       color: black;
-       margin-top: 20px;
-}
-
-div.dialog_container div.dialog_window div.dialog_message {
-       float: left;
-       padding-left: 3px;
-       margin-left: -3px;
-       width: 305px;
-       overflow: hidden;
-}
-
-div.dialog_container div.dialog_window a {
-       display: block;
-       float: right;
-       margin: 10px 20px 10px -8px;
-       padding: 5px;
-       background-color: #EEE;
-       border: 1px solid #787878;
-       width: 50px;
-       height: 15px;
-       text-align: center;
-       font-weight: bold;
-       text-decoration: none;
-       color: #323232;
-       -webkit-appearance: button;
-       font: -webkit-control;
-       cursor: default;
-}
-
-div.dialog_container div.dialog_window a:hover,
-div.dialog_container div.dialog_window a:active {
-       background: #C0C8D6 url('../images/graphics/filter_bar.png') bottom repeat-x;
-}
-
-div#upload_container div.dialog_window div.dialog_message label {
+div#upload_container label {
        margin-top: 15px;
        display: block;
 }
 
-div#upload_container div.dialog_window div.dialog_message input {
+div#upload_container input {
        width: 249px;
        margin: 3px 0 0 0;
        display: block;
 }
 
-div#upload_container div.dialog_window div.dialog_message input[type=text] {
+div#upload_container input[type=text] {
        width: 245px;
        padding: 2px;
 }
 
-div#upload_container div.dialog_window div.dialog_message input[type=checkbox] {
+div#upload_container input[type=checkbox] {
        margin: 15px 3px 0 0;
        display: inline;
        width: auto;
 }
 
-div#upload_container div.dialog_window div.dialog_message #auto_start_label {
+div#upload_container #auto_start_label {
        display: inline;
 }
 
-div.dialog_container div.dialog_window form {
-       margin: 0;
-       padding: 0px;
-}
-
 iframe#torrent_upload_frame {
        display: block; /* Don't change this : safari forms won't target hidden frames (they open a new window) */
        position: absolute;
@@ -1109,187 +1014,28 @@ iframe#torrent_upload_frame {
        margin: 0;
 }
 
-div#prefs_container label {
-       display: block;
-       margin: 0 0 0 2px;
-}
-
-div#prefs_container label.category {
-       clear: both;
-       font-size: 1.2em;
-}
-
-div#prefs_container label.item {
-       font-size: 11px !important;
-       margin: 0 5px 0 20px;
-       float: left;
-}
-
-div#prefs_container label.suffix {
-       margin: 0 5px 0 10px;
-       float: left;
-}
-
-div#prefs_container div.formdiv.checkbox label.item {
-       margin: 0 5px 0 2px;
-}
-
-div#prefs_container div.limit_total label.item {
-       width: 102px;
-}
-
-div#prefs_container div.limit_turtle label.item {
-       width: 120px;
-}
-
-div#prefs_container div.preference input[type=checkbox] {
-       float: left;
-       margin-left: 20px;
-       margin-top: 9px;
-}
-@-moz-document url-prefix() {
-       div#prefs_container div.preference input[type=checkbox] {
-               margin-top: 8px;
-       }
-}
-
-div#prefs_container div.preference input[type=text] {
-       width: 50px;
-       padding: 0px !important;
-       height: 18px;
-       margin-top: 2px;
-}
-
-div#prefs_container div.preference input {
-       float: left;
-}
-
-div#prefs_container div.download_location input {
-       width: 256px !important;
-}
-div#prefs_container div.download_location .checkbox input {
-       width: auto !important;
-}
-
-div#prefs_container div.formdiv {
-       clear: both;
-       line-height: 30px;
+#stats_dialog * {
+       text-align: left;
 }
-
-div#prefs_container a {
-       clear: left;
-       margin: 10px 5px 10px 7px;
+.dialog_section_title {
+       padding-top: 8px;
+       font-weight: bold;
+       text-align: left;
 }
 
-div#prefs_container h2.dialog_heading {
-       display: none;
+.dialog_col_1 {
+       width: 12px;
 }
-
-div#prefs_container div#prefs_tabs {
-       clear: both;
+.dialog_col_3 {
+       width: 8px;
 }
 
-div#prefs_container div#prefs_tabs ul {
-       margin: 0;
-       padding: 0 0 0 10px;
-}
-div#prefs_container div#prefs_tabs ul li {
-       display: block;
-       float: left;
-       font-size: 1.2em;
-       color: #323232;
-       text-align: center;
-       padding: 2px 20px;
-       border-left: 1px solid #787878;
-       border-right: 1px solid #787878;
-       border-top: 1px solid #787878;
-       margin-bottom: -1px;
-}
-.prefs_tab_disabled {
-       background: #C0C8D6 url('../images/graphics/filter_bar.png') bottom repeat-x;
-       border-bottom: 1px solid #787878;
-}
-.prefs_tab_enabled {
-       background: none;
-       border-bottom: 1px solid #efefef;
-}
-div#stats_container h2.dialog_heading {
-       display: none;
-}
-div#stats_container div#stats_error {
-       display: none;
-       width: 395px;
-       margin: 6px auto 6px auto;
-       padding: 3px 0 3px 0;
-       border: 2px solid #cc3333;
-       color: #cc3333;
-       font-size: 1.2em;
+#prefs_dialog * {
+       text-align: left;
        vertical-align: middle;
-       text-align: center;
-       height: 20px;
-       line-height: 20px;
-       background-color: #FFEFEF;
-}
-.stats_info_container {
-       clear: both;
-       padding: 0px 7px 0px 7px;
-}
-.stats_group {
-       display: table;
-       margin: 5px 0px 0px 0px;
-       padding: 5px 0px 0px 0px;
-       width: 100%;
-}
-.stats_row {
-       display: table-row;
-}
-.stats_row > div {
-       padding-top: 4px;
-}
-div#stats_container label.category {
-       clear: both;
-       font-size: 1.2em;
-       margin: 5px 0px;
-}
-div#stats_container div.item {
-       font-size: 11px !important;
-       margin: 0 5px 0 20px;
-       float: left;
-       width: 100px;
-}
-div#stats_container div.item2 {
-       font-size: 11px !important;
-       margin: 0 5px 0 20px;
-       float: left;
-}
-div#stats_container a {
-       clear: left;
-       margin: 10px 5px 10px 7px;
-}
-
-div.dialog_container div#prefs_tabs ul li.prefs_tab_disabled:hover,
-div.dialog_container div#prefs_tabs ul li.prefs_tab_disabled:active {
-       background: none;
 }
-div#prefs_container div#prefs_tabs div.prefs_tab {
-       border-top: 1px solid #787878;
-       clear: both;
-       padding: 7px;
-}
-
-div#prefs_container div#pref_error {
-       display: none;
-       width: 395px;
-       margin: 6px auto 6px auto;
-       padding: 3px 0 3px 0;
-       border: 2px solid #cc3333;
-       color: #cc3333;
-       font-size: 1.2em;
-       vertical-align: middle;
-       text-align: center;
-       height: 20px;
-       line-height: 20px;
-       background-color: #FFEFEF;
+#prefs_tabs {
+       border: 0px;
 }
 
 #transmission_version{
index 58ed180d08256ebb820b18d94f0ec353c7c73229..044061b86ea090ec87655fc9b94aa9670cbb46a9 100644 (file)
@@ -58,6 +58,3 @@ div.torrent_footer ul#settings_menu li#button:hover {
        top: auto !important;
        bottom: 0px !important;
 }
-.dialog_container{
-       z-index: 4
-}
index 4c24dea46d9d0070ab478ab01ec164a8a2537674..f513a11ac3db2fda500b5f0b333e4c0c31e97f62 100644 (file)
@@ -26,9 +26,22 @@ body div#torrent_container {
        min-height: 295px;
 }
 
-body div.dialog_container {
-       min-height: 291px;
+.ui-dialog-titlebar {
+        display: none;
 }
+.ui-dialog .ui-dialog-content {
+        padding: 0px;
+}
+.ui-tabs .ui-tabs-panel {
+        padding: 0px;
+}
+.dialog_col_1 {
+        width: 0px;
+}
+.dialog_col_3 {
+        width: 5px;
+}
+
 
 body div#torrent_inspector {
        min-height: 323px;
@@ -38,13 +51,11 @@ body.landscape div#torrent_container {
        min-height: 147px;
 }
 
-body.landscape div#dialog_container, body.landscape div#torrent_inspector {
+body.landscape body.landscape div#torrent_inspector {
        min-height: 143px;
 }
 
 body.inspector_showing #torrent_filter_bar, body.inspector_showing #torrent_container,
-body.dialog_showing #torrent_filter_bar, body.dialog_showing #torrent_container, body.dialog_showing #torrent_inspector, body.dialog_showing #prefs_container,
-body.prefs_showing #torrent_inspector, body.prefs_showing #torrent_filter_bar, body.prefs_showing #torrent_container,
 body.open_showing #torrent_filter_bar, body.open_showing #torrent_container {
        display: none !important;
 }
@@ -371,183 +382,10 @@ ul.torrent_list li.torrent div.torrent_progress_bar.incomplete {
        margin-right: -10px;
 }
 
-div.dialog_container {
-       background: rgba(0,0,0,0.85);
-       color: white;
-       padding: 15px 10px;
-}
-
-div.dialog_container .dialog_window {
-       height: auto;
-       font-size: 13px;
-       text-shadow: black 1px 1px 1px !important;
-}
-
-div#dialog_message.dialog_message {
-       width: 280px;
-       margin: 10px auto 25px;
-       font-size: 13px;
-       line-height: 14px;
-       word-wrap: break-word;
-       overflow: hidden;
-       padding-bottom: 0;
-}
-
 #torrent_upload_file, label[for="torrent_upload_file"]{
        display:none;
 }
 
-h2.dialog_heading {
-       text-align: center;
-       width: 300px;
-       margin: 0 auto;
-       font-size: 17px;
-}
-
-div.dialog_container a {
-       color: white;
-       padding: 7px 0;
-       background: #222;
-       text-decoration: none;
-       border: 2px solid white;
-       margin: 5px 5px 0;
-       font-weight: bold;
-       -webkit-border-radius: 16px;
-       display: inline-block;
-       width: 90px;
-       font-size: 12px;
-       text-align: center;
-}
-
-div.dialog_container a#dialog_cancel_button, div.dialog_container a#prefs_cancel_button {
-       left: 55px;
-}
-
-div.dialog_container a#dialog_confirm_button, div.dialog_container a#prefs_save_button {
-       right: 55px;
-       color: black;
-       text-shadow: none;
-       background: #fff;
-}
-
-#dialog_container div.dialog_window img {
-       margin: 5px auto 12px;
-}
-
-.landscape div.dialog_container a#dialog_cancel_button {
-       left: 155px;
-}
-
-.landscape div.dialog_container a#dialog_confirm_button {
-       right: 110px;
-}
-
-.landscape div.dialog_container img {
-       float: left !important;
-       margin: 0 0 0 50px;
-}
-
-.landscape h2#dialog_heading.dialog_heading {
-       margin: 5px auto 0;
-       margin-left: 150px;
-       text-align: left;
-}
-
-.landscape div#dialog_message.dialog_message {
-       width: 300px;
-       margin: 10px 0 20px 150px;
-       text-align: left;
-}
-
-/*--------------------------------------
- *
- * P R E F S   C O N T A I N E R
- *
- *--------------------------------------*/
-
-div#prefs_container {
-       text-align: left;
-}
-
-div#prefs_container label.item {
-       margin: 0 5px 0 15px;
-       float: left;
-}
-
-form#prefs_form {
-       height: 365px;
-       padding: 0 5px;
-}
-
-div#prefs_container label.suffix {
-       margin: 0 5px 0 10px;
-       float: left;
-}
-
-div#prefs_container input {
-       float: left;
-}
-
-div#prefs_container div.preference input[type=checkbox] {
-       margin: 3px 7px 0 16px;
-       width: 18px;
-       height: 18px;
-       clear: left;
-}
-
-div#prefs_container label {
-       line-height: 25px;
-       display: block;
-}
-
-div#prefs_container div.download_location label.item,
-div#prefs_container div.port label.item,
-div#prefs_container div.web_gui label.item {
-       width: 127px;
-       clear: left;
-}
-
-div#prefs_container div.auto_start label.item,
-div#prefs_container div.encryption label.item,
-div#prefs_container div.limit_total label.item {
-       margin: 0 5px 0 0;
-}
-
-div#prefs_container div.limit_total label.item {
-       width: 101px;
-}
-
-div#prefs_container div.preference input[type=text] {
-       padding: 2px 2px 1px;
-       text-shadow: none !important;
-       font-size: 13px;
-       width: 50px;
-}
-
-div#prefs_container div.download_location input {
-       position: absolute;
-       right: 20px;
-       left: 160px;
-       width: auto !important;
-}
-
-div#prefs_container label.category {
-       clear: both;
-       font-weight: bold;
-}
-
-div#prefs_container a {
-       margin-top: 42px !important;
-}
-
-.landscape div.dialog_container a#prefs_cancel_button {
-       left: 135px;
-}
-
-.landscape div.dialog_container a#prefs_save_button {
-       right: 135px;
-}
-
 /*--------------------------------------
  *
  * T O R R E N T   I N S P E C T O R
@@ -833,7 +671,7 @@ div.torrent_footer a#preferences_link {
        margin: 1px 0 0 6px;
 }
 
-body.prefs_showing div.torrent_footer a#preferences_link, body.dialog_showing div.torrent_footer a#preferences_link {
+body.prefs_showing div.torrent_footer a#preferences_link, div.torrent_footer a#preferences_link {
        display: none;
 }