Remove deprecated sample applications; version up 97/23797/1
authorDongxing Liu <dongxing.x.liu@intel.com>
Thu, 3 Jul 2014 06:50:24 +0000 (14:50 +0800)
committerDongxing Liu <dongxing.x.liu@intel.com>
Thu, 3 Jul 2014 06:50:24 +0000 (14:50 +0800)
Remove MediaPlayer, Saythis and SettingsApp.

Change-Id: I20de8c80f91930613d9bc0995db6a4f3274af8b3
Signed-off-by: Dongxing Liu <dongxing.x.liu@intel.com>
112 files changed:
package/changelog
package/pkginfo.manifest
samples/web/Sample/Tizen/Web App/MediaPlayer/description.xml [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/description.xsl [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/mediaplayer-snapshot.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/AUTHORS [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/LICENSE.Apache-2.0 [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/Makefile [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/MediaPlayer.desktop [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/MediaPlayer.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/README [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/config.xml [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/css/main.css [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/albumButton.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/albumButtonNight.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/allButton.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/allButtonNight.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/artistButton.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/artistButtonNight.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/backButton.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/backButtonNight.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/imageButton.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/imageButtonNight.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/imageIcon.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/imageIconNight.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/listIcon.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/listIconNight.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/musicButton.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/musicButtonNight.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/musicIcon.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/musicIconNight.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/nextButton.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/nextButtonNight.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/pauseButton.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/pauseButtonNight.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/playButton.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/playButtonNight.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/returnButton.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/returnButtonNight.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/tizen_32.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/videoButton.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/videoButtonNight.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/videoIcon.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/videoIconNight.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/index.html [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/audioPlayer.js [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/dlna.js [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/imageControls.js [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/imagePlayer.js [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/jquery-1.9.1.min.js [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/listFunctions.js [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/main.js [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/player.js [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/textObject.js [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/videoPlayer.js [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/manifest.json [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/packaging/MediaPlayer.changes [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/project/packaging/MediaPlayer.spec [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/tizen-app-template.xml [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/tizen_32.png [deleted file]
samples/web/Sample/Tizen/Web App/MediaPlayer/tizen_64.png [deleted file]
samples/web/Sample/Tizen/Web App/Saythis/description.xml [deleted file]
samples/web/Sample/Tizen/Web App/Saythis/description.xsl [deleted file]
samples/web/Sample/Tizen/Web App/Saythis/project/LICENSE [deleted file]
samples/web/Sample/Tizen/Web App/Saythis/project/Makefile [deleted file]
samples/web/Sample/Tizen/Web App/Saythis/project/README.txt [deleted file]
samples/web/Sample/Tizen/Web App/Saythis/project/config.xml [deleted file]
samples/web/Sample/Tizen/Web App/Saythis/project/css/main.css [deleted file]
samples/web/Sample/Tizen/Web App/Saythis/project/index.html [deleted file]
samples/web/Sample/Tizen/Web App/Saythis/project/js/jquery-2.0.3.min.js [deleted file]
samples/web/Sample/Tizen/Web App/Saythis/project/js/main.js [deleted file]
samples/web/Sample/Tizen/Web App/Saythis/project/packaging/saythis.changes [deleted file]
samples/web/Sample/Tizen/Web App/Saythis/project/packaging/saythis.spec [deleted file]
samples/web/Sample/Tizen/Web App/Saythis/project/saythis.png [deleted file]
samples/web/Sample/Tizen/Web App/Saythis/saythis-snapshot.png [deleted file]
samples/web/Sample/Tizen/Web App/Saythis/tizen-app-template.xml [deleted file]
samples/web/Sample/Tizen/Web App/Saythis/tizen_32.png [deleted file]
samples/web/Sample/Tizen/Web App/Saythis/tizen_64.png [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/description.xml [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/description.xsl [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/LICENSE.Apache-2.0 [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/Makefile [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/Settings.desktop [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/Settings.png [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/config.xml [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/ajax-loader.gif [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/icons-18-black.png [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/icons-18-white.png [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/icons-36-black.png [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/icons-36-white.png [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/css/jquery.mobile-1.3.1.css [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/css/style.css [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/images/bluetooth.png [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/index.html [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/js/api-bluetooth.js [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/js/api-datetime.js [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/js/api-wifi.js [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/js/jquery-1.10.1.js [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/js/jquery.mobile-1.3.1.js [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/js/main.js [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/js/panel-bluetooth.js [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/js/panel-datetime.js [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/js/panel-wifi.js [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/js/utils.js [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/js/websocket.js [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/manifest.json [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/packaging/Settings.changes [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/project/packaging/Settings.spec [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/settingsapp-snapshot.png [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/tizen-app-template.xml [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/tizen_32.png [deleted file]
samples/web/Sample/Tizen/Web App/SettingsApp/tizen_64.png [deleted file]

index b443cce..543beb4 100644 (file)
@@ -1,3 +1,7 @@
+* 3.0.16
+* Remove deprecated sample applications
+== Dongxing Liu <dongxing.x.liu@intel.com> 2014-07-03
+
 * 3.0.15
 * Update Modello web samples from upstream
 == Dongxing Liu <dongxing.x.liu@intel.com> 2014-07-03
index 5e7560c..564c45b 100644 (file)
@@ -1,4 +1,4 @@
-Version:3.0.15
+Version:3.0.16
 Maintainer: Ziv Chang<ziv.chang@intel.com>
 
 Package:ivi-3.0-web-sample
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/description.xml b/samples/web/Sample/Tizen/Web App/MediaPlayer/description.xml
deleted file mode 100644 (file)
index 1187e6e..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<?xml-stylesheet type="text/xsl" href="description.xsl"?>\r
-<Overview version="1.0">\r
-  <SampleName>MediaPlayer</SampleName>\r
-  <SampleVersion>1.0.0</SampleVersion>\r
-  <Preview>mediaplayer-snapshot.png</Preview>\r
-  <Description>\r
-         A sample application demonstrating the ivi special api mediaserver usage.\r
-  </Description>\r
-</Overview>\r
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/description.xsl b/samples/web/Sample/Tizen/Web App/MediaPlayer/description.xsl
deleted file mode 100644 (file)
index 1f4f57f..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 
-    This file provides a functionality to show template's description.xml in the project wizard.
-    Don't delete or move this file.
- -->
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-  <xsl:template match="/">
-    <html>
-      <head>
-        <style type="text/css">
-          html,body {
-          font-family:Arial;
-          margin: 0px;
-          }
-          td
-          {
-          font-size:13px;
-          }
-          .samplename
-          {
-          font-size:16px;
-          color:#ffffff;
-          height:26px;
-          background-color:#6d96ac;
-          }
-          .category
-          {
-          font-size:16px;
-          color:#ffffff;
-          height:30px;
-          background-color:#6d96ac;
-          }
-          .contents
-          {
-          padding: 6px 10px 14px 10px;
-          }
-          table#widgets td
-          {
-          border: solid 1px #6d96ac;
-          border-collapse: collapse;
-          }
-          .widgetname
-          {
-          font-weight: bold;
-          text-align: center;
-          width: 20%;
-          word-break:break-all;
-          }
-          table#references td
-          {
-          width: 100%;
-          border: 0px;
-          border-spacing: 0px;
-          padding: 5px;
-          }
-          .refname
-          {
-          width: 100%;
-          font-weight: bold;
-          }
-        </style>
-      </head>
-      <body>
-        <table width="400px" border="0" cellspacing="0">
-          <tr>
-            <td class="samplename" align="center">
-              <xsl:value-of select="Overview/SampleName"/>
-              <xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>
-                         <!--
-              <xsl:value-of select="Overview/SampleVersion"/>
-                         -->
-            </td>
-          </tr>
-          <tr bgcolor="#FFFFFF">
-            <td class="contents">
-                         <strong>Type</strong>: JavaScript
-                         <p>
-              <xsl:value-of select="Overview/Description"/>
-                         </p>
-            </td>
-          </tr>
-          <tr>
-            <td align="center" bgcolor="#FFFFFF" height="260px">
-              <img>
-                <xsl:attribute name="src">
-                  <xsl:value-of select="Overview/Preview"/>
-                </xsl:attribute>
-              </img>
-            </td>
-          </tr>
-        </table>
-      </body>
-    </html>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/mediaplayer-snapshot.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/mediaplayer-snapshot.png
deleted file mode 100644 (file)
index f47a748..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/mediaplayer-snapshot.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/AUTHORS b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/AUTHORS
deleted file mode 100644 (file)
index db232fb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Brian Jones <brian.j.jones at intel dot com>
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/LICENSE.Apache-2.0 b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/LICENSE.Apache-2.0
deleted file mode 100755 (executable)
index c720c61..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!) The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/Makefile b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/Makefile
deleted file mode 100644 (file)
index aaaa520..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-PROJECT = MediaPlayer
-INSTALL_FILES = images js MediaPlayer.png index.html
-
-VERSION := 0.0.1
-PACKAGE = $(PROJECT)-$(VERSION)
-
-INSTALL_DIR = ${DESTDIR}/opt/usr/apps/.preinstallWidgets
-
-all:
-       @echo "Nothing to build"
-
-wgtPkg:
-       zip -r $(PROJECT).wgt js images css index.html manifest.json config.xml MediaPlayer.png
-
-install:
-       @echo "Installing MediaPlayer, stand by..."
-       mkdir -p $(INSTALL_DIR)/
-       cp $(PROJECT).wgt $(INSTALL_DIR)/
-
-dist:
-       tar czf ../$(PACKAGE).tar.bz2 . 
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/MediaPlayer.desktop b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/MediaPlayer.desktop
deleted file mode 100644 (file)
index a1a0c45..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-[Desktop Entry]
-Version=1.0
-Name=MediaPlayer
-Comment=Media Playing application for music, video, and images
-GenericName=MediaPlayer
-Exec=chromium-browser --enable-plugins --enable-extensions --enable-user-scripts --enable-printing --enable-sync --use-gl=egl --ignore-gpu-blacklist --auto-ssl-client-auth %U --app-id=t8j6HTRpuz --load-extension=/usr/share/MediaPlayer/ --no-first-run
-Terminal=false
-X-MultipleArgs=false
-Type=Application
-Icon=MediaPlayer
-StartupWMClass=Chromium
-StartupNotify=true
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/MediaPlayer.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/MediaPlayer.png
deleted file mode 100644 (file)
index 45e082c..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/MediaPlayer.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/README b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/README
deleted file mode 100644 (file)
index 91ff06a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
--=== MediaPlayer ===-
-
-This is a HTML media player capable of playing video, audio, as well as displaying images. 
-It takes uses the <video> <audio> and <img> tags to accomplish this.  In order for the
-application to discover your media, put your files in /opt/usr/media.  Make sure they 
-go in the appropriate folders, for example music goes in Sounds.
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/config.xml b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/config.xml
deleted file mode 100644 (file)
index b8b32d9..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/MediaPlayer" version="1.0.0" viewmodes="maximized">
-    <tizen:application id="t8j6HTRpuz.MediaPlayer" package="t8j6HTRpuz" required_version="2.1"/>
-    <content src="index.html"/>
-    <icon src="MediaPlayer.png"/>
-    <name>MediaPlayer</name>
-    <access origin="*" />
-    <tizen:privilege name="http://tizen.org/privilege/speech"/>
-    <tizen:privilege name="http://tizen.org/privilege/content.read"/>
-    <tizen:privilege name="http://tizen.org/privilege/content.write"/>
-</widget>
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/css/main.css b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/css/main.css
deleted file mode 100644 (file)
index 340be7c..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-
-*
-{
-       z-index : 2;
-}
-
-html
-{
-       background-color: white;
-       min-height: 100%;
-       background-size:cover;
-}
-
-#mainMusicButton
-{
-       display:none;
-       content:url(../images/musicButton.png);
-}
-
-#mainVideoButton
-{
-       display:none;
-       content:url(../images/videoButton.png);
-}
-
-#mainImageButton
-{
-       display:none;
-       content:url(../images/imageButton.png);
-}
-
-#backButton
-{
-       content:url(../images/backButton.png);
-}
-
-#nextButton
-{
-       content:url(../images/nextButton.png);
-}
-
-#returnButton
-{
-       content:url(../images/returnButton.png);
-}
-
-#listButton
-{
-       content:url(../images/listIcon.png);
-}
-
-#playButton
-{
-       content:url(../images/playButton.png);
-}
-
-#playButton.playing
-{
-       content:url(../images/pauseButton.png);
-}
-
-#sortAllButton
-{
-       display:none;
-       content:url(../images/allButton.png);
-}
-
-#sortArtistButton
-{
-       display:none;
-       content:url(../images/artistButton.png);
-}
-
-#sortAlbumButton
-{
-       display:none;
-       content:url(../images/albumButton.png);
-}
-
-#mainMenuButtons
-{
-       position: absolute;
-       display: block;
-       vertical-align: middle;
-}
-
-.mainButton
-{
-       position: relative;
-       padding: 20px;
-}
-
-#sortButtons
-{
-       position: absolute;
-       display: block;
-       top: 35%;
-       left: 0%;
-       height: 5%;
-       width: 100%;
-}
-
-.sortButton
-{
-       position: relative;
-       float: left;
-       height: 100%;
-       width: 33.333%;
-}
-
-#sortButtons.landscape
-{
-       height: 10%;
-}
-
-#mediaName
-{
-       display:none;
-}
-
-#trackTime
-{
-       display:none;
-}
-
-#audioPlayer
-{
-       position:absolute;
-       display:none;
-       width: 90%;
-       height: 80%;
-       left: 5%;
-       right: 5%;
-       top: 10%;
-       bottom: 10%;
-}
-
-#videoPlayer
-{
-       position:absolute;
-       display:none;
-       width: 100%;
-       height: 100%;
-       left: 0%;
-       right: 0%;
-       top: 0%;
-       bottom: 0%;
-}
-
-#imagePlayer
-{
-       position:absolute;
-       background-size: contain;
-       display:none;
-       width: 100%;
-       height: 100%;
-       left: 0%;
-       right: 0%;
-       top: 0%;
-       bottom: 0%;
-}
-
-.mediaList
-{
-       position:absolute;
-       display:none;
-       width: 90%;
-       height: 80%;
-       left: 5%;
-       right: 5%;
-       top: 10%;
-       bottom: 10%;
-}
-
-.mediaList.mediaListAudioList
-{
-       height: 58%;
-       left: 5%;
-       right: 5%;
-       top: 40%;
-}
-
-.mediaList.mediaListAudioList.landscape
-{
-       height: 50%;
-       top: 45%;
-}
-
-.mediaList { overflow: auto; width:90%; height: 75%; left: 5%; right: 5%; }
-
-.mediaList ul { list-style: none;  overflow: auto; -webkit-padding-start: 0px;}
-
-.mediaList ul li a { position:absolute; display:block; overflow: auto; background-color:rgba(50, 50, 50, 0.5);
-   padding-left:15px; padding-top:5px; padding-bottom:5px;  border-radius: 20px; -webkit-border-radius: 20px;}
-
-.mediaList ul li a.lightColor { position:absolute; display:block; overflow: auto; background-color:rgba(150, 150, 250, 0.5);
-   padding-left:15px; padding-top:5px; padding-bottom:5px;  border-radius: 20px; -webkit-border-radius: 20px;}
-
-/********************** Night versions ***********************/
-
-html.night
-{
-       background-color: black;
-       min-height: 100%;
-       background-size:cover;
-}
-
-.mediaList ul li a.night { position:absolute; display:block; overflow: auto; background-color:rgba(180, 180, 180, 0.5);
-   padding-left:15px; padding-top:5px; padding-bottom:5px;  border-radius: 20px; -webkit-border-radius: 20px;}
-
-.mediaList ul li a.lightColor.night { position:absolute; display:block; overflow: auto; background-color:rgba(18, 18, 18, 0.5);
-   padding-left:15px; padding-top:5px; padding-bottom:5px;  border-radius: 20px; -webkit-border-radius: 20px;}
-
-#mainMusicButton.night
-{
-       content:url(../images/musicButtonNight.png);
-}
-
-#mainVideoButton.night
-{
-       content:url(../images/videoButtonNight.png);
-}
-
-#mainImageButton.night
-{
-       content:url(../images/imageButtonNight.png);
-}
-
-#backButton.night
-{
-       content:url(../images/backButtonNight.png);
-}
-
-#nextButton.night
-{
-       content:url(../images/nextButtonNight.png);
-}
-
-#returnButton.night
-{
-       content:url(../images/returnButtonNight.png);
-}
-
-#listButton.night
-{
-       content:url(../images/listIconNight.png);
-}
-
-#playButton.night
-{
-       content:url(../images/playButtonNight.png);
-}
-
-#playButton.night.playing
-{
-       content:url(../images/pauseButtonNight.png);
-}
-
-#sortAllButton.night
-{
-       content:url(../images/allButtonNight.png);
-}
-
-#sortArtistButton.night
-{
-       content:url(../images/artistButtonNight.png);
-}
-
-#sortAlbumButton.night
-{
-       content:url(../images/albumButtonNight.png);
-}
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/albumButton.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/albumButton.png
deleted file mode 100644 (file)
index 0531fbf..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/albumButton.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/albumButtonNight.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/albumButtonNight.png
deleted file mode 100644 (file)
index 28273f0..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/albumButtonNight.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/allButton.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/allButton.png
deleted file mode 100644 (file)
index b352651..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/allButton.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/allButtonNight.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/allButtonNight.png
deleted file mode 100644 (file)
index 103d417..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/allButtonNight.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/artistButton.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/artistButton.png
deleted file mode 100644 (file)
index 06181af..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/artistButton.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/artistButtonNight.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/artistButtonNight.png
deleted file mode 100644 (file)
index 309c77a..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/artistButtonNight.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/backButton.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/backButton.png
deleted file mode 100644 (file)
index f70a914..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/backButton.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/backButtonNight.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/backButtonNight.png
deleted file mode 100644 (file)
index aa206df..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/backButtonNight.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/imageButton.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/imageButton.png
deleted file mode 100644 (file)
index 6fdf7f3..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/imageButton.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/imageButtonNight.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/imageButtonNight.png
deleted file mode 100644 (file)
index 9533c7e..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/imageButtonNight.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/imageIcon.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/imageIcon.png
deleted file mode 100644 (file)
index a844e88..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/imageIcon.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/imageIconNight.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/imageIconNight.png
deleted file mode 100644 (file)
index b97b91c..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/imageIconNight.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/listIcon.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/listIcon.png
deleted file mode 100644 (file)
index 95d9700..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/listIcon.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/listIconNight.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/listIconNight.png
deleted file mode 100644 (file)
index 4c41e52..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/listIconNight.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/musicButton.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/musicButton.png
deleted file mode 100644 (file)
index 575daee..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/musicButton.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/musicButtonNight.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/musicButtonNight.png
deleted file mode 100644 (file)
index df6e7b5..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/musicButtonNight.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/musicIcon.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/musicIcon.png
deleted file mode 100644 (file)
index 0caf708..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/musicIcon.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/musicIconNight.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/musicIconNight.png
deleted file mode 100644 (file)
index c2ba72e..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/musicIconNight.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/nextButton.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/nextButton.png
deleted file mode 100644 (file)
index f93e175..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/nextButton.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/nextButtonNight.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/nextButtonNight.png
deleted file mode 100644 (file)
index c65e347..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/nextButtonNight.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/pauseButton.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/pauseButton.png
deleted file mode 100644 (file)
index ca5c2b6..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/pauseButton.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/pauseButtonNight.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/pauseButtonNight.png
deleted file mode 100644 (file)
index 39f525f..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/pauseButtonNight.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/playButton.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/playButton.png
deleted file mode 100644 (file)
index ab63532..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/playButton.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/playButtonNight.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/playButtonNight.png
deleted file mode 100644 (file)
index 11d3f08..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/playButtonNight.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/returnButton.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/returnButton.png
deleted file mode 100644 (file)
index bdf95f1..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/returnButton.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/returnButtonNight.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/returnButtonNight.png
deleted file mode 100644 (file)
index 22c4012..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/returnButtonNight.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/tizen_32.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/tizen_32.png
deleted file mode 100644 (file)
index 983c883..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/tizen_32.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/videoButton.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/videoButton.png
deleted file mode 100644 (file)
index 73b7643..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/videoButton.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/videoButtonNight.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/videoButtonNight.png
deleted file mode 100644 (file)
index afbf2aa..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/videoButtonNight.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/videoIcon.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/videoIcon.png
deleted file mode 100644 (file)
index 041cf0e..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/videoIcon.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/videoIconNight.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/videoIconNight.png
deleted file mode 100644 (file)
index 0ed45e5..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/images/videoIconNight.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/index.html b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/index.html
deleted file mode 100644 (file)
index 1943409..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
-* Copyright (c) 2013, Intel Corporation.
-*
-* This program is licensed under the terms and conditions of the
-* Apache License, version 2.0.  The full text of the Apache License is at
-* http://www.apache.org/licenses/LICENSE-2.0
-*
--->
-<html>
-       <head>
-               <title>Media Player</title>
-               <meta name="viewport" content="user-scable=no, height=1000, width=520">
-               <link rel="stylesheet" href="css/main.css">
-               <script src="js/jquery-1.9.1.min.js"></script>
-               <script src="js/listFunctions.js"></script>
-               <script src="js/player.js"></script>
-               <script src="js/audioPlayer.js"></script>
-               <script src="js/videoPlayer.js"></script>
-               <script src="js/imagePlayer.js"></script>
-               <script src="js/main.js"></script>
-               <script src="js/textObject.js"></script>
-               <script src="js/imageControls.js"></script>
-               <script src="js/dlna.js"></script>
-
-       </head>
-       <body>
-       <div id="background"></div>
-               <audio id="audioPlayer" class="player" onended="nextButtonClick()" oncanplaythrough="playLoadedMedia()" onerror="mediaError()" >
-
-                       <source id=audioSrc type="audio/mpeg">
-               </audio>
-
-               <video id="videoPlayer" onClick="playButtonClick()" class="player" oncanplaythrough="videoLoaded()">
-                       <source id=videoSrc>
-               </video>
-
-               <div id="imagePlayer" class="player"></div>
-
-               <div id="audioMediaList" class="mediaList mediaListAudioList">
-                  <ul id="audioMediaListItems">
-                  </ul>
-               </div>
-
-               <div id="videoMediaList" class="mediaList">
-                  <ul id="videoMediaListItems">
-                  </ul>
-               </div>
-
-               <div id="imageMediaList" class="mediaList">
-                  <ul id="imageMediaListItems">
-                  </ul>
-               </div>
-
-               <div id="mainMenuButtons">
-                       <img id="mainMusicButton" class="mainButton" onClick="changeMenu(this.id)">
-                       <img id="mainVideoButton" class="mainButton" onClick="changeMenu(this.id)">
-                       <img id="mainImageButton" class="mainButton" onClick="changeMenu(this.id)">
-               </div>
-
-               <div id="navigationButtons" style="position:absolute; visible:hidden">
-                       <img id="backButton" class="navButton" onClick="backButtonClick()" style="position:absolute; display: none">
-                       <img id="nextButton" class="navButton" onClick="nextButtonClick()" style="position:absolute; display: none">
-                       <img id="returnButton" class="navButton" onClick="showMainMenu()" style="position:absolute; display: none">
-                       <img id="listButton" class="navButton" onClick="showMediaList()" style="position:absolute; display: none">
-                       <img id="playButton" class="navButton" onClick="playButtonClick()" style="position:absolute; display: none">
-
-               </div>
-
-               <div id="sortButtons">
-                               <img id="sortAllButton" class="sortButton" onClick="sortByAlpha()">
-                               <img id="sortArtistButton" class="sortButton" onClick="sortByArtist()">
-                               <img id="sortAlbumButton" class="sortButton" onClick="sortByAlbum()">
-                       </div>
-
-               <canvas id="mediaName" style="position:absolute; z-index : 0"></canvas>
-               <canvas id="trackTime" style="position:absolute; z-index : 0"></canvas>
-       </body>
-</html>
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/audioPlayer.js b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/audioPlayer.js
deleted file mode 100644 (file)
index 5a5dafd..0000000
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-
-var mainArtistText;
-var songDurationSec;
-
-AudioPlayer = function()
-{
-       this.clearAudioTimeInterval = undefined;
-       this.currentAudioContent = undefined;
-}
-
-/*
- * Play function for when play button is clicked
- */
-
-AudioPlayer.prototype.play = function()
-{
-       console.log("MediaPlayer in AudioPlayer::play");
-
-       if (this.currentFileLoaded)
-       {
-               if (this.playerControls.paused)
-               {
-                       this.playerControls.play();
-
-                       //Start tracking the current time of the media.  This is used to play from previous position on restart.
-                       //Currently this isn't supported for remote files
-                       if (!this.content[this.listIndex].remoteFile)
-                       {
-                               var timeoutFunction = function()
-                               {
-                                       localStorage.prevAudioTime = this.playerControls.currentTime;
-                                       this.updateTrackTime();
-                               }
-
-                               this.clearAudioTimeInterval = setInterval(timeoutFunction.bind(this),500);
-                       }
-               }
-       }
-       else
-               console.log(this.content[this.listIndex].artists[0] + " : " + this.content[this.listIndex].title + " can't play yet, it hasn't loaded");
-}
-
-/*
- * Pause function for when pause button is clicked
- */
-
-AudioPlayer.prototype.pause = function()
-{
-       if (!this.playerControls.paused)
-       {
-               this.playerControls.pause();
-               clearInterval(this.clearAudioTimeInterval);
-       }
-}
-
-/*
- * Next function for when next button is clicked
- */
-
-AudioPlayer.prototype.next = function()
-{
-       if (this.content)
-       {
-               if (this.content.length > (this.listIndex + 1))
-                       this.listIndex++;
-               else
-                       this.listIndex = 0;
-
-               this.load(this.listIndex, true);
-       }
-}
-
-/*
- * Previous function for when previous button is clicked
- */
-
-AudioPlayer.prototype.previous = function()
-{
-       if (this.content)
-       {
-               if (this.listIndex > 0 )
-                       this.listIndex--;
-               else
-                       this.listIndex = this.content.length - 1;
-
-               this.load(this.listIndex, true);
-       }
-}
-
-/*
- * Returns play state
- */
-
-AudioPlayer.prototype.playing = function()
-{
-       return !(this.playerControls.paused);
-}
-
-/*
- * Load the file located at the index.  If play is true, play immediately once file is loaded
- */
-
-AudioPlayer.prototype.load = function(index, play)
-{
-       this.listIndex = index;
-       this.loadAndPlay = play;
-       this.playerControls.pause();
-       this.updateMediaName(this.content[this.listIndex].artists[0], this.content[this.listIndex].title, this.content[this.listIndex].coverArt);
-       $("#audioSrc").attr("src", this.content[this.listIndex].contentURI);
-       this.playerControls.load();
-}
-
-/*
- * Redraws the media bar with the new artist, title, and cover album
- */
-
-AudioPlayer.prototype.updateMediaName = function(newArtist, newTitle, newCover)
-{
-       playBarHeight = mediaNameCanvas.height;
-       boxWidth = playBarHeight * 0.75;
-       textStartX = boxWidth + 50;
-       songDurationSec = this.playerControls.duration;
-       mediaNameCTX.clearRect(0,0,mediaNameCanvas.width, mediaNameCanvas.height);
-
-       mediaNameCTX.fillStyle="rgba(30,30,30,0.5)";
-       mediaNameCTX.strokeStyle="rgba(130,130,130,1)";
-       mediaNameCTX.lineWidth = 5;
-       mediaNameCTX.fillRect(0,0,mediaNameCanvas.width, playBarHeight);
-       mediaNameCTX.strokeRect(-20,0,mediaNameCanvas.width + 40, playBarHeight);
-
-       if (newCover === undefined || newCover.naturalWidth === undefined || newCover.naturalWidth <= 0)
-       {
-               newCover = musicIcon;
-       }
-
-       mediaNameCTX.drawImage(newCover, 20, (playBarHeight - boxWidth) / 2, boxWidth, boxWidth);
-
-       if (screenOrientation === "portrait")
-       {
-               var trackText = new TextObject(mediaNameCTX,{"text" : newTitle, "xLoc" : textStartX, "yLoc" : 70 , "zLoc" : 0,
-                                                       "width" : mediaNameCanvas.width - textStartX, "height" : 50, "lineHeight" : 65, "wordWrap" : true});
-
-               trackText.applyTemplate(mainMenuTitleTemplate);
-
-               mainArtistText = new TextObject(mediaNameCTX,{"text" : newArtist, "xLoc" : textStartX, "yLoc" : 70, "zLoc" : 0,
-                                                               "width" : mediaNameCanvas.width - textStartX, "height" : 50, "lineHeight" : 50, "wordWrap" : true});
-
-               mainArtistText.applyTemplate(mainTrackTemplate);
-       }
-       else
-       {
-               var trackText = new TextObject(mediaNameCTX,{"text" : newTitle, "xLoc" : textStartX, "yLoc" : 50 , "zLoc" : 0,
-                                                               "width" : mediaNameCanvas.width - textStartX, "height" : 30, "lineHeight" : 30, "wordWrap" : true});
-               trackText.applyTemplate(mainMenuTitleTemplateLandscape);
-               mainArtistText = new TextObject(mediaNameCTX,{"text" : newArtist, "xLoc" : textStartX, "yLoc" : 50, "zLoc" : 0,
-                                                               "width" : mediaNameCanvas.width - textStartX, "height" : 30, "lineHeight" : 30, "wordWrap" : true});
-               mainArtistText.applyTemplate(mainTrackTemplateLandscape);
-       }
-
-       trackText.drawObj();
-       trackText.drawLargeShadow();
-       mainArtistText.yLoc += trackText.height;
-       mainArtistText.drawObj();
-
-       this.updateTrackTime();
-}
-
-/*
- * Redraws the current track time
- */
-
-AudioPlayer.prototype.updateTrackTime = function()
-{
-       playBarHeight = mediaNameCanvas.height;
-       boxWidth = playBarHeight * 0.75;
-       textStartX = boxWidth + 50;
-       var timeText = '';
-       var songDurationSec = Math.floor(this.playerControls.duration % 60) > 9 ? Math.floor(this.playerControls.duration % 60) : '0' + Math.floor(this.playerControls.duration % 60);
-       var songDurationMin = Math.floor(this.playerControls.duration / 60) > 9 ?  Math.floor(this.playerControls.duration / 60) : '0' +  Math.floor(this.playerControls.duration / 60);
-       var songCurrentMin = Math.floor(this.playerControls.currentTime / 60) > 9 ? Math.floor(this.playerControls.currentTime / 60) :  '0' + Math.floor(this.playerControls.currentTime / 60);
-       var songCurrentSec = Math.floor(this.playerControls.currentTime % 60) > 9 ? Math.floor(this.playerControls.currentTime % 60) : '0' + Math.floor(this.playerControls.currentTime % 60);
-
-       if ((songCurrentMin !== undefined && songCurrentSec !== undefined) && (!isNaN(songCurrentMin) && !isNaN(songCurrentSec)))
-               timeText += songCurrentMin + ':' + songCurrentSec + ' / ';
-       else
-               timeText += "00:00 / ";
-
-       if ((songDurationSec !== undefined && songDurationMin !== undefined) && (!isNaN(songDurationMin) && !isNaN(songDurationSec)))
-               timeText += songDurationMin + ':' + songDurationSec;
-       else
-               timeText += "00:00";
-
-
-       var trackTimeText = new TextObject(trackTimeCTX,{"text" : timeText, "xLoc" : textStartX, "yLoc" : 50, "zLoc" : 0,
-                                                               "width" : mediaNameCanvas.width - textStartX, "height" : 20, "lineHeight" : 20, "wordWrap" : false});
-
-       trackTimeText.applyTemplate(timeTemplate);
-       trackTimeCTX.clearRect(0, 0, trackTimeCanvas.width, trackTimeCanvas.height);
-
-       trackTimeText.yLoc = ((playBarHeight - boxWidth) / 2) + boxWidth;
-       trackTimeText.drawObj();
-}
-
-/*
- * Plays the currently loaded media file
- */
-
-AudioPlayer.prototype.playLoadedMedia = function()
-{
-       console.log("MediaPlayer in playLoadedMedia");
-       this.currentFileLoaded = true;
-
-       //Only store track to localStorage if it's a local file, and current menu is the Audio menu
-       if (!this.content[this.listIndex].remoteFile && localStorage.prevMenu === "mainMusicButton")
-       {
-               localStorage.prevAudioTrack = this.content[this.listIndex].contentURI;
-       }
-       else
-       {
-               localStorage.prevAudioTime = undefined;
-               localStorage.prevAudioTrack = undefined;
-       }
-
-       this.currentAudioContent = this.content[this.listIndex];
-
-       if (this.loadPrevAudio)
-       {
-               this.playerControls.currentTime = localStorage.prevAudioTime;
-               this.loadPrevAudio = false;
-               this.play();
-       }
-
-       if (this.loadAndPlay)
-       {
-               this.play();
-               this.loadAndPlay = false;
-       }
-
-       this.updateMediaName(this.content[this.listIndex].artists[0], this.content[this.listIndex].title, this.content[this.listIndex].coverArt);
-       this.currentFileLoaded = true;
-}
-
-/*
- * Sort the file list alphabetically
- */
-
-AudioPlayer.prototype.sortByAlpha = function()
-{
-       console.log("MediaPlayer in sortByAlpha");
-
-       this.emptyTimeouts();
-
-       this.content.sort(function (a,b)
-       {
-               var first = a.title.toLowerCase();
-               var second = b.title.toLowerCase();
-
-               if (first < second)
-                       return -1;
-               if (first > second)
-                       return 1;
-
-               return 0;
-       });
-
-       this.fillMediaList();
-}
-
-/*
- * Sort the file list by artist name
- */
-
-AudioPlayer.prototype.sortByArtist = function()
-{
-       console.log("MediaPlayer in sortByArtist");
-
-       this.emptyTimeouts();
-
-       this.content.sort(function (a,b)
-       {
-               var first = a.artists[0].toLowerCase();
-               var second = b.artists[0].toLowerCase();
-
-               if (first < second)
-                       return -1;
-               if (first > second)
-                       return 1;
-
-               return 0;
-       });
-
-       this.fillMediaList();
-}
-
-/*
- * Sort the file list by album name
- */
-
-AudioPlayer.prototype.sortByAlbum =function()
-{
-       console.log("MediaPlayer in sortByAlbum");
-
-       this.emptyTimeouts();
-
-       this.content.sort(function (a,b)
-       {
-               var first = a.album.toLowerCase();
-               var second = b.album.toLowerCase();
-
-               if (first < second)
-                       return -1;
-               if (first > second)
-                       return 1;
-
-               return 0;
-       });
-
-       this.fillMediaList();
-}
-
-/*
- * Callback for when the local content has been successfully read using tizen.content.
- */
-
-AudioPlayer.prototype.onContentLoaded = function()
-{
-       try
-       {
-               if (localStorage.prevAudioTrack && localStorage.prevAudioTrack !== "undefined")
-               {
-                       for (var i = 0; i < this.content.length; i++)
-                       {
-
-                               if (this.content[i].contentURI === localStorage.prevAudioTrack)
-                               {
-                                       this.listIndex = i;
-                                       console.log("MediaPlayer: Previous audio found, loading " + this.content[this.listIndex].contentURI);
-                                       this.loadPrevAudio = true;
-                                       this.fillMediaList();
-                                       this.load(i, true);
-                               }
-                       }
-               }
-               else
-               {
-                       console.log("MediaPlayer: No previous audio found, loading first");
-                       this.load(0, false);
-                       this.updateMediaName(this.content[this.listIndex].artists[0], this.content[this.listIndex].title, this.content[this.listIndex].coverArt);
-
-                       if (currentMenu === "audio")
-                               this.fillMediaList();
-               }
-
-               var imgSources = [];
-
-               for (var i = 0; i < this.content.length; i++)
-               {
-                       var iconURI = (this.content[i].thumbnailURIs !== undefined && this.content[i].thumbnailURIs !== null) ? this.content[i].thumbnailURIs[0] : "images/musicIcon.png";
-                       this.content[i].coverArtURI = iconURI;
-               }
-
-               loadImages();
-       }
-       catch (err)
-       {
-               console.log("MediaPlayer: Error when parsing audioContent");
-       }
-}
-
-/*
- * Create and draw an item in the media list
- */
-
-AudioPlayer.prototype.makeListItem = function(j, k)
-{
-       var canvasH = mediaListItemH * 0.95 ;
-
-    for (var i = j; (i < (j+k) && i < this.content.length); i++)
-    {
-               if (typeof this.content[i].title !== "string")
-                       this.content[i].title = "Unknown";
-
-           //Check if album art is done loading, if not draw default until it is
-            if (this.content[i].artists === undefined)
-            {
-               this.content[i].artists = new Array();
-               this.content[i].artists[0] = "Unknown";
-            }
-
-            else if (typeof this.content[i].artists[0] !== "string")
-                       this.content[i].artists[0] = "Unknown";
-
-           var trackText = {"text" : this.content[i].title, "xLoc" : canvasH + 20, "yLoc" : canvasH / 2.5 , "zLoc" : 0};
-           var artistText = {"text" : this.content[i].artists[0], "xLoc" : canvasH + 20, "yLoc" : canvasH / 1.1 , "zLoc" : 0};
-
-           if (this.content[i].coverArt && this.content[i].coverArt.complete && (this.content[i].coverArt.naturalWidth !== 0 || this.content[i].coverArt.naturalHeight !== 0) )
-               this.makeListBar(this.content[i].coverArt, i, artistText, trackText);
-           else
-               this.makeListBar(musicIcon, i, artistText, trackText);
-
-               // Set callback function for the new list item
-               $("#" + this.type + "CanvasNum" + i).click(function () {
-                       try
-                       {
-                               audioPlayer.load($(this).parent().parent().index(), true);
-                       }
-                       catch(err)
-                       {
-                               console.log("MediaPlayer: load audio error " + err.message);
-                       }
-               });
-    }
-}
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/dlna.js b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/dlna.js
deleted file mode 100644 (file)
index 64b6a15..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-var stopConnectionSearch = undefined;
-var remoteMediaPreviouslyLoaded = false;
-
-function convertMediaServerContent(item)
-{
-       console.log(">>> MediaObject2 >>> " + JSON.stringify(item));
-       var content = { id: item.Path, title: item.DisplayName };
-
-       if (item.Type.indexOf("container") == 0)
-       {
-               content.directoryURI = "";
-               content.storageType = "EXTERNAL";
-       }
-
-       else
-       {
-               content.editableAttributes = [];
-               content.name = content.title;
-               content.contentURI = item.URLs[0];
-               content.mimeType = item.MIMEType;
-               content.size = item.Size;
-               content.rating = 0;
-               content.remoteFile = true;
-
-               if (item.Type.indexOf("video") == 0)
-               {
-                       content.type = "VIDEO";
-                       content.artists = new Array();
-                       content.artists[0] = "Unknown";
-                       content.duration = item.Duration;
-                       content.width = item.Width;
-                       content.height = item.Height;
-               }
-
-               else if (item.Type.indexOf("audio") == 0 ||
-               item.Type.indexOf("music") == 0)
-               {
-                       content.type = "AUDIO";
-                       content.album = item.Album ? item.Album : "Unknown";
-                       content.coverArt = musicIcon;
-                       content.artists = new Array();
-                       content.artists[0] = item.Artist ? item.Artist : "Unknown";
-                       content.bitrate = item.SampleRate;
-                       content.duration = item.Duration;
-               }
-
-               if (item.Type.indexOf("image") == 0)
-               {
-                       content.type = "IMAGE";
-                       content.width = item.Width;
-                       content.height = item.Height;
-                       content.orientation = "NORMAL";
-               }
-       }
-
-       return content;
-}
-
-function browseCallback(medias)
-{
-       console.log("MediaPlayer: MediaServer has called browseCallback");
-       console.log("found " + medias.length + " medias.");
-
-       for (var i=0; i<medias.length; i++)
-               convertMediaServerContent(medias[i]);
-}
-
-function findAllCallback(medias)
-{
-       console.log("MediaServer findAllCallback");
-       console.log("found " + medias.length + " medias.");
-
-       clearInterval(stopConnectionSearch);
-       stopConnectionSearch = undefined;
-
-       var itemsAdded = 0;
-       var audioContent = new Array();
-       var videoContent = new Array();
-       var imageContent = new Array();
-
-       for (var i=0; i < medias.length; i++)
-       {
-               var current = convertMediaServerContent(medias[i]);
-
-               if (current)
-               {
-                       switch(current.type)
-                       {
-                               case "AUDIO":
-                                       audioContent.push(current);
-                                       itemsAdded += 1;
-                                       break;
-                               case "VIDEO":
-                                       videoContent.push(current);
-                                       itemsAdded += 1;
-                                       break;
-                               case "IMAGE":
-                                       imageContent.push(current);
-                                       itemsAdded += 1;
-                                       break;
-                               default:
-                       }
-               }
-       }
-
-       //Force MediaPlayer to reload the lists so the new items show
-       audioMediaListLoaded = false;
-       videoMediaListLoaded = false;
-       imageMediaListLoaded = false;
-
-       audioPlayer.updateContent(audioContent, true);
-       videoPlayer.updateContent(videoContent, true);
-       imagePlayer.updateContent(imageContent, true);
-}
-
-function foundMediaServer(srv)
-{
-       console.log("MediaPlayer: New MediaServer Found");
-       console.log("MediaServer id: " + srv.id);
-       console.log("MediaServer friendlyName: " + srv.friendlyName);
-
-       clearInterval(stopServerSearch);
-
-       if (srv.root)
-       {
-               console.log("MediaPlayer: MediaServer root folder: " + srv.root.id);
-               srv.browse(srv.root.id, "+DisplayName", 0, 0, browseCallback);
-               srv.find(srv.root.id, "*", "+DisplayName", 0, 0, findAllCallback);
-
-       // Removing this for now to keep from spamming.  Note Rygel must be running when launched or it will never find it
-       //      if (stopConnectionSearch !== undefined)
-       //              clearInterval(stopConnectionSearch);
-
-       //      stopConnectionSearch = setInterval(function(){console.log("MediaPlayer searching for remote media..."); tizen.mediaserver.scanNetwork(foundMediaServer);}, 3000);
-
-       }
-       else
-               console.log("MediaServer not browsable");
-}
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/imageControls.js b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/imageControls.js
deleted file mode 100644 (file)
index 59fd473..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-
-var slideshowInterval;
-
-ImageControls = function()
-{
-    this.paused = true;
-}
-
-ImageControls.prototype.play = function()
-{
-    this.paused = false;
-    $("#playButton").toggleClass('playing', true);
-    $("#navigationButtons").hide();
-    slideshowInterval = setInterval(function(){
-       nextButtonClick();
-    }, 3000);
-}
-
-ImageControls.prototype.pause = function()
-{
-    this.paused = true;
-    $("#playButton").toggleClass('playing', false);
-    $("#navigationButtons").show();
-    clearInterval(slideshowInterval);
-}
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/imagePlayer.js b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/imagePlayer.js
deleted file mode 100644 (file)
index 97da62c..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-
-ImagePlayer = function()
-{
-
-}
-
-ImagePlayer.prototype.play = function()
-{
-       console.log("MediaPlayer in ImagePlayer::play");
-       if (this.playerControls.paused)
-               this.playerControls.play();
-}
-
-ImagePlayer.prototype.pause = function()
-{
-       if (!this.playerControls.paused)
-               this.playerControls.pause();
-}
-
-ImagePlayer.prototype.playing = function()
-{
-       return !(this.playerControls.paused);
-}
-
-ImagePlayer.prototype.next = function()
-{
-       if (this.content)
-       {
-               if (this.content.length > (this.listIndex + 1))
-                       this.listIndex++;
-               else
-                       this.listIndex = 0;
-
-               this.load(this.listIndex);
-       }
-}
-
-ImagePlayer.prototype.previous = function()
-{
-       if (this.content)
-       {
-               if (this.listIndex > 0 )
-                       this.listIndex--;
-               else
-                       this.listIndex = this.content.length - 1;
-
-               this.load(this.listIndex);
-       }
-}
-
-ImagePlayer.prototype.onContentLoaded = function()
-{
-       try
-       {
-               this.listIndex = 0;
-
-               if (localStorage.prevImage && localStorage.prevImage !== "undefined")
-               {
-                       for (var i = 0; i < this.content.length; i++)
-                       {
-                               if (this.content[i].contentURI === localStorage.prevImage)
-                               {
-                                       console.log("MediaPlayer: using previous image " + localStorage.prevImage);
-                                       this.listIndex = i;
-                                       this.fillMediaList();
-                                       this.load(i);
-                               }
-                       }
-               }
-               else
-               {
-                       console.log("MediaPlayer: using first image " + this.content[this.listIndex].contentURI);
-                       this.load(this.listIndex);
-               }
-       }
-
-       catch (err)
-       {
-               console.log("MediaPlayer: Error when parsing imageContent");
-       }
-}
-
-ImagePlayer.prototype.load = function(index)
-{
-       this.listIndex = index;
-
-       $("#imagePlayer").css("background", "url(" + this.content[this.listIndex].contentURI + ") no-repeat center");
-       $("#imagePlayer").css("background-size", "contain");
-
-       if (!this.content[this.listIndex].remoteFile)
-       {
-               localStorage.prevImage = this.content[this.listIndex].contentURI;
-       }
-       else
-       {
-               localStorage.prevImage = undefined;
-       }
-}
-
-ImagePlayer.prototype.makeListItem = function(j, k)
-{
-       var canvasH = mediaListItemH * 0.95 ;
-
-    for (var i = j; (i < (j+k) && i < this.content.length); i++)
-    {
-       var artistText = {"text" : this.content[i].title, "xLoc" : canvasH + 20, "yLoc" : canvasH / 2.5 , "zLoc" : 0};
-        var trackText = {"text" : " ", "xLoc" : canvasH + 20, "yLoc" : canvasH / 1.1 , "zLoc" : 0};
-
-               this.makeListBar(imgIcon, i, artistText, trackText);
-
-               // Set callback function for the new list item
-               $("#" + this.type + "CanvasNum" + i).click(function () {
-
-                       try
-                       {
-                               imagePlayer.load($(this).parent().parent().index());
-                               $("#imageMediaList").hide();
-                       }
-                       catch(err)
-                       {
-                           console.log("MediaPlayer: load image error: " + err.message);
-                       }
-               });
-    }
-}
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/jquery-1.9.1.min.js b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/jquery-1.9.1.min.js
deleted file mode 100644 (file)
index 006e953..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license
-//@ sourceMappingURL=jquery.min.map
-*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;
-return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="<a name='"+x+"'></a><div name='"+x+"'></div>",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&&gt(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Nt=/^(?:checkbox|radio)$/i,Ct=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:b.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l)
-}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.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 contextmenu".split(" "),function(e,t){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window);
\ No newline at end of file
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/listFunctions.js b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/listFunctions.js
deleted file mode 100644 (file)
index f5960ed..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-
-function mediaError()
-{
-    console.log("MediaPlayer: file failed to load");
-}
-
-var drawCanvasImage = function(imageSrc)
-{
-    return function()
-    {
-       drawAlbumArt(imageSrc);
-    }
-}
-
-function drawAlbumArt(imageSrc)
-{
-    var canvasH = mediaListItemH * 0.95 ;
-    var audioContent = audioPlayer.getContent();
-
-    for (var i=0; i < audioContent.length; i++)
-    {
-       if (audioContent[i].coverArt.src !== musicIcon.src && audioContent[i].coverArt.src === imageSrc)
-       {
-           try
-           {
-               if (i === audioPlayer.currentIndex())
-               {
-                   audioPlayer.updateMediaName(audioContent[audioPlayer.currentIndex()].artists[0], audioContent[audioPlayer.currentIndex()].title, audioContent[audioPlayer.currentIndex()].coverArt);
-               }
-
-               if(audioContent[i].ctx)
-                   audioContent[i].ctx.drawImage(audioContent[i].coverArt, 0, 0, canvasH, canvasH);
-           }
-           catch(err)
-           {
-               console.log("MediaPlayer: drawImage failed - " + err);
-           }
-       }
-    }
-}
-
-function loadImages()
-{
-    console.log("MediaPlayer in loadImages");
-
-    var audioContent = audioPlayer.getContent();
-
-    for (var src in audioContent)
-    {
-       try
-       {
-           var imgSrc = (audioContent[src].coverArtURI !== undefined && audioContent[src].coverArtURI !== "") ? audioContent[src].coverArtURI : "images/musicIcon.png";
-           audioContent[src].coverArt = new Image();
-           audioContent[src].coverArt.onload = drawCanvasImage(imgSrc);
-
-           audioContent[src].coverArt.onerror = function(e){
-               audioContent[src].coverArt.src = "images/musicIcon.png";
-           };
-
-           audioContent[src].coverArt.src = imgSrc;
-       }
-       catch(err)
-       {
-           console.log("Failed to load audio cover image: " + err);
-       }
-    }
-}
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/main.js b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/main.js
deleted file mode 100644 (file)
index 3f27f62..0000000
+++ /dev/null
@@ -1,698 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-
-var currentMenu = "main";
-var mouseDownEvent;
-var resizeCB = resizeMainMenu;
-var screenWidth;
-var screenHeight;
-var screenOrientation;
-var iconWidth;
-var padding;
-var contentType = "AUDIO";
-var currentPlayer;
-var currentMediaList = $("#audioMediaList");
-var audioMediaListLoaded = false;
-var videoMediaListLoaded = false;
-var imageMediaListLoaded = false;
-var audioPlayer;
-var videoPlayer;
-var imagePlayer;
-var vidIcon = new Image();
-var imgIcon = new Image();
-var musicIcon = new Image();
-var imagesLoaded = false;
-var mediaListItemW;
-var mediaListItemH;
-var playOnConnect = false;
-var mediaNameCanvas;
-var mediaNameCTX;
-var trackTimeCanvas;
-var trackTimeCTX;
-var speechObj;
-var nightMode = false;
-var waitingToResumeVideo = false;              //Media has been paused by exterior forces.  If set to true, resume previous media when given the signal.
-var stopServerSearch;
-var playBarHeight;
-var boxWidth;
-var textStartX;
-
-var mainMenuTitleTemplateLandscape = {"font" : "oblique bolder 30pt arial", "lineWidth" : 9.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "left",
-               "largeShadow" : 8, "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 45, "shadowColor" : "rgba(255, 187, 0, 0.4)"};
-
-var mainMenuTitleTemplate = {"font" : "oblique bolder 40pt arial", "lineWidth" : 9.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "left",
-               "largeShadow" : 8, "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 45, "shadowColor" : "rgba(255, 187, 0, 0.4)"};
-
-var mainTrackTemplateLandscape = {"font" : "bold 20pt Arial", "lineWidth" : 7.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "left",
-               "largeShadow" : 8, "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 45, "shadowColor" : "rgba(255, 187, 0, 0.5))"};
-
-var mainTrackTemplate = {"font" : "bold 30pt Arial", "lineWidth" : 7.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "left",
-               "largeShadow" : 8, "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 45, "shadowColor" : "rgba(255, 187, 0, 0.5))"};
-
-var timeTemplate = {"font" : "bold 25pt Arial", "lineWidth" : 7.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "left",
-               "largeShadow" : 8, "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 45, "shadowColor" : "rgba(255, 187, 0, 0.5))"};
-
-var mediaTextTemplate2 = {"font" : "bold 20pt Arial", "lineWidth" : 10.0, "fillStyle" : "white", "strokeStyle" : "rgba(0, 0, 0, 1.0)", "textAlign" : "left",
-               "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 0, "shadowColor" : "rgba(0, 0, 0, 1.0)"};
-
-var mediaTextTemplate3 = {"font" : "bold 20pt Arial", "lineWidth" : 3.0, "fillStyle" : "white", "strokeStyle" : "rgba(100, 0, 0, 1.0)", "textAlign" : "left"};
-
-var trackTextTemplate  = {"font" : "bold 16pt Arial", "lineWidth" : 3.0, "fillStyle" : "white", "strokeStyle" : "black", "textAlign" : "left"};
-
-var mediaTextTemplate2Landscape = {"font" : "bold 13pt Arial", "lineWidth" : 10.0, "fillStyle" : "white", "strokeStyle" : "rgba(0, 0, 0, 1.0)", "textAlign" : "left",
-               "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 0, "shadowColor" : "rgba(0, 0, 0, 1.0)"};
-
-var mediaTextTemplate3Landscape = {"font" : "bold 13pt Arial", "lineWidth" : 3.0, "fillStyle" : "white", "strokeStyle" : "rgba(100, 0, 0, 1.0)", "textAlign" : "left"};
-
-var trackTextTemplateLandscape  = {"font" : "bold 11pt Arial", "lineWidth" : 3.0, "fillStyle" : "white", "strokeStyle" : "black", "textAlign" : "left"};
-
-
-var mediaTextTemplate = {"font" : "bold 20pt Arial", "fillStyle" : "", "textAlign" : "left",
-               "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 12, "shadowColor" : "red"};
-
-function onError()
-{
-       console.log("Content discovery failed");
-}
-
-function setupSpeech()
-{
-       console.log("MediaPlayer in setupSpeech");
-
-       speechObj = tizen.speech;
-       speechObj.vocalizeString(" ");
-
-       try
-       {
-               var speechEventListener = {
-                       onaudiostart: function(){console.log("MediaPlayer: onaudiostart received");},
-                       onsoundstart: function(){console.log("MediaPlayer: onsoundstart received");},
-                       onspeechstart: function(){console.log("MediaPlayer: onspeechstart received");},
-                       onspeechend: function(){console.log("MediaPlayer: onspeechend received");},
-                       onsoundend: function(){console.log("MediaPlayer: onsoundend received");},
-                       onaudioend: function(){console.log("MediaPlayer: onaudioend received");},
-                       onresult: function(result){
-
-                               console.log("MediaPlayer: onresult received");
-
-                               for (var i = 0; i < result.length; i++)
-                               {
-                                       console.log("MediaPlayer: forloop, command = " + result[i]);
-                                       var commandFound = false;
-
-                                       switch(result[i])
-                                       {
-                                               case "play":
-                                                       playButtonClick();
-                                                       commandFound = true;
-                                               break;
-                                               case "next":
-                                                       nextButtonClick();
-                                                       commandFound = true;
-                                               break;
-                                               case "previous":
-                                                       backButtonClick();
-                                                       commandFound = true;
-                                               break;
-                                               case "stop":
-                                               case "pause":
-                                                       pauseButtonClick();
-                                                       commandFound = true;
-                                               break;
-                                               default:
-                                               break;
-                                       }
-
-                                       if (commandFound)
-                                               break;
-                               }
-                       },
-                       onnomatch: function(result){console.log("MediaPlayer: onnomatch received ");},
-                       onerror: function(error){console.log("MediaPlayer: onerror received");},
-                       onstart: function(){console.log("MediaPlayer: onstart received");},
-                       onend: function(){console.log("MediaPlayer: onend received");}
-               }
-
-               speechObj.setCBListener(speechEventListener);
-
-       }
-       catch(err)
-       {
-               console.log("MediaPlayer setupSpeech FAILED + " + err.message);
-       }
-
-}
-
-function onAudioContentLoaded(newContent)
-{
-       if (!newContent || newContent.length === 0)
-       {
-               console.log("MediaPlayer: some content failed to load, trying again for " + audioPlayer.type);
-               audioPlayer.clearContent();
-               setTimeout(function(){getMedia(onAudioContentLoaded, "AUDIO");}, 3000);
-               return;
-       }
-       else
-       {
-               audioPlayer.updateContent(newContent, true);
-               audioPlayer.onContentLoaded();
-       }
-}
-
-function onVideoContentLoaded(newContent)
-{
-       if (!newContent || newContent.length === 0)
-       {
-               console.log("MediaPlayer: some content failed to load, trying again for " + videoPlayer.type);
-               videoPlayer.clearContent();
-               setTimeout(function(){getMedia(onVideoContentLoaded, "VIDEO");}, 3000);
-               return;
-       }
-       else
-       {
-               videoPlayer.updateContent(newContent, true);
-               videoPlayer.onContentLoaded();
-       }
-}
-
-function onImageContentLoaded(newContent)
-{
-       if (!newContent || newContent.length === 0)
-       {
-               console.log("MediaPlayer: some content failed to load, trying again for " + imagePlayer.type);
-               imagePlayer.clearContent();
-               setTimeout(function(){getMedia(onImageContentLoaded, "IMAGE");}, 3000);
-               return;
-       }
-       else
-       {
-               imagePlayer.updateContent(newContent, true);
-               imagePlayer.onContentLoaded();
-       }
-}
-
-function getMedia(callback, filterType)
-{
-       console.log("MediaPlayer in getMedia");
-       var manager = tizen.content;
-       if (manager)
-       {
-               var filter = new tizen.AttributeFilter("type", "EXACTLY", filterType);
-               manager.find(callback, onError, null, filter);
-       }
-       else
-               console.log("MediaPlayer failed to receive media, tizen.content is unavailable");
-}
-
-function showMediaMenu()
-{
-       console.log("MediaPlayer in showMediaMenu");
-       $(".navButton").show();
-
-       switch(currentPlayer.type)
-       {
-               case "audio":
-                       $("#mediaName").show();
-                       $("#trackTime").show();
-                       $(".sortButton").show();
-                       currentPlayer.show();
-
-                       if (screenOrientation === "landscape" )
-                               $("#audioMediaList").addClass("landscape");
-                       else
-                               $("#audioMediaList").removeClass("landscape");
-
-                       $("#audioMediaList").show();
-                       break;
-
-               case "video":
-                       //show video
-                       currentPlayer.show();
-                       //setTimeout(function(){currentPlayer.show()}, 800);            //The video element can't be faded, so wait a moment before showing
-                       break;
-
-               case "image":
-                       //show image
-                       currentPlayer.show();
-                       break;
-
-               default:
-                       console.log("Invalid player type");
-               break;
-       }
-}
-
-function showMediaList()
-{
-       console.log("MediaPlayer in showMediaList");
-
-       if (currentMediaList.is(":visible"))
-               currentMediaList.hide();
-       else
-       {
-               currentMediaList.show();
-       }
-}
-
-function changeMenu(menuButtonId)
-{
-       console.log("MediaPlayer in changeMenu");
-       var clickedButton  = $("#" + menuButtonId);
-       var buttonWidth  = clickedButton.width();
-       var buttonHeight = clickedButton.height();
-       var buttonBottom = clickedButton.css("bottom");
-       var buttonRight  = clickedButton.css("right");
-
-/*
-       //Animate the clicked button slightly
-       clickedButton.animate({
-               bottom: screenOrientation === "portrait" ? "+=0" : "+=50",
-                               right: screenOrientation === "portrait" ? "+=50" : "+=0",
-                                               opacity: "0"
-       }, 300 ,
-
-       //Reset the size once done
-       function() {
-               clickedButton.width(buttonWidth);
-               clickedButton.height(buttonHeight);
-
-               if (screenOrientation === "portrait")
-                       clickedButton.css({"right": buttonRight});
-               else
-                       clickedButton.css({"bottom": buttonBottom});
-       }
-       );
-*/
-       $(".mainButton").hide();
-
-       switch(menuButtonId)
-       {
-               case ("mainMusicButton"):
-                       speechObj.vocalizeString("Music player");
-                       currentMenu = "audio";
-                       currentPlayer = audioPlayer;
-                       currentMediaList = $("#audioMediaList");
-                       localStorage.prevMenu = "mainMusicButton";
-
-                       if (audioPlayer.currentAudioContent && audioPlayer.currentAudioContent.contentURI)
-                       {
-                               localStorage.prevAudioTrack = audioPlayer.currentAudioContent.contentURI
-                               localStorage.prevAudioTime = audioPlayer.playerControls.currentTime;
-                       }
-
-                       localStorage.prevVideo = undefined;
-                       localStorage.prevVideoTime = undefined;
-
-                       if (!audioMediaListLoaded)
-                               audioPlayer.fillMediaList();
-
-                       showMediaMenu();
-               break;
-
-               case ("mainVideoButton"):
-                       speechObj.vocalizeString("Video player");
-                       currentMenu = "video";
-                       currentPlayer = videoPlayer;
-                       currentMediaList = $("#videoMediaList");
-                       localStorage.prevMenu = "mainVideoButton";
-
-                       if (videoPlayer.currentVideoContent && videoPlayer.currentVideoContent.contentURI)
-                       {
-                               localStorage.prevVideo = videoPlayer.currentVideoContent.contentURI
-                               localStorage.prevVideoTime = videoPlayer.playerControls.currentTime;
-                       }
-
-                       localStorage.prevAudioTime = undefined;
-                       localStorage.prevAudioTrack = undefined;
-
-                       if (!videoMediaListLoaded)
-                               videoPlayer.fillMediaList();
-
-                       showMediaMenu();
-               break;
-
-               case ("mainImageButton"):
-                       speechObj.vocalizeString("Picture viewer");
-                       currentMenu = "image";
-                       currentPlayer = imagePlayer;
-                       currentMediaList = $("#imageMediaList");
-                       localStorage.prevMenu = "mainImageButton";
-
-                       if (!imageMediaListLoaded)
-                               imagePlayer.fillMediaList();
-
-                       showMediaMenu();
-               break;
-               default:
-                       console.log("Error: No menu by that name");
-               break;
-       }
-}
-
-function showMainMenu()
-{
-       console.log("MediaPlayer in showMainMenu, clearing all localStorage...");
-       currentMenu = "main";
-       localStorage.prevMenu = "MAIN";
-       localStorage.prevAudioTime = undefined;
-       localStorage.prevAudioTrack = undefined;
-       localStorage.prevVideo = undefined;
-       localStorage.prevVideoTime = undefined;
-       localStorage.prevImage = undefined;
-
-       currentPlayer.pause();
-
-       //If the media list is showing, hide it.  Remove the mediaListAudioList class if it exists so that it will resize properly
-       if (currentMediaList.is(":visible"))
-               currentMediaList.hide();
-
-       $(".navButton").hide();
-       $(".sortButton").hide();
-       $("#mediaName").hide();
-       $("#trackTime").hide();
-       $(".player").hide();
-       $(".mainButton").css({"opacity": "100"});
-       $(".mainButton").show();
-}
-
-function sortByAlpha(contentToSort)
-{
-       currentPlayer.sortByAlpha();
-}
-
-function sortByArtist(contentToSort)
-{
-       currentPlayer.sortByArtist();
-}
-
-function sortByAlbum(contentToSort)
-{
-       currentPlayer.sortByAlbum();
-}
-
-/**************************************** NAVIGATION FUNCTIONS *******************************************/
-
-// This function is called once a file being loaded is ready to play
-function playLoadedMedia()
-{
-       audioPlayer.playLoadedMedia();
-}
-
-function videoLoaded()
-{
-    videoPlayer.videoLoaded();
-}
-
-function playButtonClick()
-{
-       console.log("MediaPlayer in playButtonClick");
-       if (!currentPlayer.playing())
-               currentPlayer.play();
-       else
-               currentPlayer.pause();
-}
-
-function pauseButtonClick()
-{
-       console.log("MediaPlayer in pauseButtonClick");
-       if (currentPlayer.playing())
-       {
-               currentPlayer.pause();
-       }
-}
-
-function backButtonClick()
-{
-       console.log("MediaPlayer in backButtonClick");
-       currentPlayer.previous();
-}
-
-
-function nextButtonClick()
-{
-       console.log("MediaPlayer in nextButtonClick");
-       currentPlayer.next();
-}
-
-/**************************************** END NAVIGATION FUNCTIONS *******************************************/
-
-function resizeMainMenu()
-{
-       console.log("MediaPlayer in resizeMainMenu");
-
-       currentMediaList.hide();
-       screenWidth = window.innerWidth;
-       screenHeight = window.innerHeight;
-       screenOrientation = screenWidth < screenHeight ? "portrait" : "landscape";
-       iconWidth = screenOrientation === "portrait" ? screenHeight / 4 : screenWidth / 4;
-       var padding = 20;
-
-       $(".mainButton").width(iconWidth + "px");
-       $(".mainButton").height(iconWidth + "px");
-
-       var iconsTop  = screenOrientation === "portrait" ? ((screenHeight - (iconWidth * 3)) / 2) - (padding * 3) : (screenHeight - iconWidth) / 2;
-
-       if (screenOrientation === "portrait")
-               $("#mainMenuButtons").css({"top": iconsTop + "px", "left" : (screenWidth / 2) - (iconWidth /2) - padding + "px", "width" : "50%"});
-       else
-       {
-               $("#mainMenuButtons").css({"top": iconsTop + "px", "left" : ((iconWidth / 2) - (padding * 3)) + "px", "width" : "100%"});
-               $("#sortButtons").addClass("landscape");
-       }
-}
-
-function resizePlayerPage()
-{
-       console.log("MediaPlayer in resizePlayerPage");
-
-       screenWidth = window.innerWidth;
-       screenHeight = window.innerHeight;
-
-       var padding = 15;
-       var buttonWidth = screenOrientation === "portrait" ? screenHeight * 0.05 : screenWidth * 0.05;
-
-       $("#backButton").css({"width": buttonWidth + "px", "height": buttonWidth + "px", "top": padding + "px", "left": ((screenWidth / 2) - (buttonWidth *3)) + "px"});
-       $("#nextButton").css({"width": buttonWidth + "px", "height": buttonWidth + "px", "top": padding + "px", "left": ((screenWidth / 2) + (buttonWidth *2)) + "px"});
-       $("#returnButton").css({"width": buttonWidth + "px", "height": buttonWidth + "px", "top": padding + "px", "left": padding + "px"});
-       $("#listButton").css({"width": buttonWidth + "px", "height": buttonWidth + "px", "top": padding + "px", "left": (screenWidth - buttonWidth - padding * 2) + "px"});
-       $("#playButton").css({"width": buttonWidth * 1.15 + "px", "height": buttonWidth * 1.15 + "px", "top": padding * 0.3 + "px", "left": (screenWidth / 2) - (buttonWidth / 2) + "px"});
-
-       trackTimeCanvas.width = mediaNameCanvas.width = (screenWidth);
-       trackTimeCanvas.height = mediaNameCanvas.height = (screenHeight * 0.34) - (buttonWidth + (2 * padding));
-       trackTimeCanvas.style.top = mediaNameCanvas.style.top = (buttonWidth + (2 * padding) ) + "px";
-       trackTimeCanvas.style.left = mediaNameCanvas.style.left = "0px";
-
-       var sortButtonTop = (buttonWidth + (2 * padding) ) + mediaNameCanvas.height - (buttonWidth * 1.3);
-       var sortButtonWidth = buttonWidth * 2.5;
-       var buttonSpacing = screenWidth / 5;
-
-       mediaListItemW = $("#videoMediaList").width() * 0.92;
-       mediaListItemH = $("#videoMediaList").height() / 10;
-}
-
-function resizeAll()
-{
-       console.log("MediaPlayer in resizeAll");
-       resizeMainMenu();
-       resizePlayerPage();
-}
-
-/*
- * swipe - Handles swipe events.  Currently it just acts as another way to hit the next / back buttons, but
- * it could be expanded to other things in the future.
- */
-
-function swipe(direction, object)
-{
-       console.log("MediaPlayer in swipe");
-       switch (object)
-       {
-       case "mediaName":
-               if (direction === "right")
-                       nextButtonClick();
-               else if (direction === "left")
-                       backButtonClick();
-               break;
-
-       default:
-               break;
-       }
-}
-
-function toggleNightMode(nightModeValue)
-{
-       if (nightMode !== nightModeValue)
-       {
-               Array.prototype.forEach.call (document.querySelectorAll ('*'), function (el) {el.classList.toggle('night');});
-               nightMode = nightModeValue;
-       }
-}
-
-function init()
-{
-       console.log("MediaPlayer in init");
-
-       musicIcon.src = "images/musicIcon.png";
-       vidIcon.src = "images/videoIcon.png";
-       imgIcon.src = "images/imageIcon.png";
-       mediaNameCanvas = document.getElementById("mediaName");
-       mediaNameCTX = mediaNameCanvas.getContext("2d");
-       trackTimeCanvas = document.getElementById("trackTime");
-       trackTimeCTX = trackTimeCanvas.getContext("2d");
-       playBarHeight = mediaNameCanvas.height;
-       boxWidth = playBarHeight * 0.75;
-       textStartX = boxWidth + 50;
-
-       var vehicle = tizen.vehicle;
-
-
-       /* Subscribe to AMB NightMode signal, and switch colors
-        * upon receipt of the signal
-        */
-
-       if (vehicle && vehicle !== undefined)
-       {
-               var getVal = vehicle.get("NightMode");
-
-               //Check that NightMode returned a value before trying to hook up to it
-               if (getVal)
-               {
-                       toggleNightMode(getVal.nightMode);
-               }
-
-               /* Subscribe to AMB NightMode signal, and switch colors
-               * upon receipt of the signal
-               */
-
-               vehicle.subscribe("NightMode",function(value) {
-                                console.log("MediaPlayer: Day / Night mode changed to " + value.nightMode);
-                               toggleNightMode(value.nightMode);
-                });
-
-
-               /* Subscribe to AMB DrivingMode signal, and pause video
-                * upon receipt of the signal
-                */
-
-
-               vehicle.subscribe("DrivingMode",function(value) {
-                       console.log("MediaPlayer: DrivingMode changed to " + value.drivingMode);
-
-                       if (value.drivingMode > 0 && currentPlayer.type === "video" && currentPlayer.playing())
-                       {
-                               console.log("MediaPlayer: pausing video due to vehicle motion");
-                               currentPlayer.pause();
-                               waitingToResumeVideo = true;
-                       }
-                       else if (value.drivingMode === 0 && currentPlayer.type === "video" && waitingToResumeVideo)
-                       {
-                               console.log("MediaPlayer: vehicle has stopped, resuming video");
-                               currentPlayer.play();
-                               waitingToResumeVideo = false;
-                       }
-               });
-       }
-
-       //Setup voice control
-       if (tizen.speech)
-               setupSpeech();
-       else {
-               console.log("MediaPlayer: Speech Recognition not running, voice control will be unavailable");
-                speechObj = {
-                    vocalizeString: function(item) { console.log(item); }
-                };
-        }
-
-       audioPlayer = new MediaPlayer("audio");
-       videoPlayer = new MediaPlayer("video");
-       imagePlayer = new MediaPlayer("image");
-       currentPlayer = audioPlayer;
-
-       //Resize all items and search for local media
-       resizeAll();
-
-       if (localStorage.prevMenu && localStorage.prevMenu !== "MAIN")
-               changeMenu(localStorage.prevMenu)
-       else
-               showMainMenu();
-
-       getMedia(onAudioContentLoaded, "AUDIO");
-       getMedia(onVideoContentLoaded, "VIDEO");
-       getMedia(onImageContentLoaded, "IMAGE");
-
-       //Check if DLNA plugin is installed.  If so, scan for media.
-       if (tizen.mediaserver)
-       {
-               //Currently no success signal, so continue trying until a server is found.  Once that
-               //happens, clear the stopServerSearch interval
-
-               stopServerSearch = setInterval(function(){console.log("MediaPlayer searching for remote media..."); tizen.mediaserver.scanNetwork(foundMediaServer);}, 5000);
-       }
-       else
-               console.log("MediaPlayer: No DLNA server running, using local media only...");
-
-       //Prevent highlighting
-       window.ondragstart = function() { return false; }
-
-       $(window).bind('resize', resizeAll);
-
-       //Simple swipe detection
-       $("#mediaName").mousedown(function(e){mouseDownEvent = e;});
-       $("#mediaName").mouseup(function(e){
-               if (Math.abs(mouseDownEvent.clientY - e.clientY) < 100)
-               {
-                       if (Math.abs(mouseDownEvent.clientX - e.clientX) > 100)
-                       {
-                               if (mouseDownEvent.clientX > e.clientX)
-                                       swipe("left", "mediaName");
-                               else
-                                       swipe("right", "mediaName");
-                       }
-               }
-       });
-
-    document.getElementById('videoPlayer').addEventListener("playing", function() {
-        $("#playButton").toggleClass('playing', true);
-        $("#navigationButtons").hide();
-    }, false);
-    document.getElementById('videoPlayer').addEventListener("pause", function() {
-        $("#playButton").toggleClass('playing', false);
-        $("#navigationButtons").show();
-    }, false);
-    document.getElementById('videoPlayer').addEventListener("ended", function() {
-        $("#playButton").toggleClass('playing', false);
-        $("#navigationButtons").show();
-    }, false);
-    document.getElementById('audioPlayer').addEventListener("playing", function() {
-        $("#playButton").toggleClass('playing', true);
-    }, false);
-    document.getElementById('audioPlayer').addEventListener("pause", function() {
-        $("#playButton").toggleClass('playing', false);
-    }, false);
-    document.getElementById('audioPlayer').addEventListener("ended", function() {
-        $("#playButton").toggleClass('playing', false);
-    }, false);
-    document.getElementById('imagePlayer').addEventListener("click", function() {
-       if (!imagePlayer.playing)
-        {
-            // next picture
-            nextButtonClick();
-        }
-        else
-        {
-            // pause the slideshow and fade in the controls
-            imagePlayer.pause();
-            $("#navigationButtons").show();
-        }
-    }, false);
-}
-
-$(document).ready(function () {
-       init();
-});
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/player.js b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/player.js
deleted file mode 100644 (file)
index 3675222..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-
-MediaPlayer = function(type)
-{
-       this.type = type;
-       this.content = new Array();
-       this.mediaList = $("#" + type + "MediaList");
-       this.mediaListItems = $("#" + type + "MediaListItems");
-       this.playerControls = undefined;
-       this.mediaListLoaded = false;
-       this.listIndex = 0;
-       this.imagesLoaded = false;
-       this.loadAndPlay = false;
-       this.loadPrev = false;
-       this.currentFileLoaded = false;
-       this.fillingList = false;
-       this.clearDrawTimeouts = new Array();
-
-       switch(type)
-       {
-               case "audio":
-                       console.log("MediaPlayer creating AudioPlayer");
-                       audioPlayer = new AudioPlayer;
-                       $.extend(this, audioPlayer);
-                       this.playerControls = document.getElementById("audioPlayer");
-               break;
-               case "video":
-                       console.log("MediaPlayer creating VideoPlayer");
-                       videoPlayer = new VideoPlayer;
-                       $.extend(this, videoPlayer);
-                       this.playerControls = document.getElementById("videoPlayer");
-               break;
-               case "image":
-                       console.log("MediaPlayer creating ImagePlayer");
-                       imagePlayer = new ImagePlayer;
-                       $.extend(this, imagePlayer);
-                       this.playerControls = new ImageControls();
-               break;
-               default:
-                       console.log("MediaPlayer: Trying to make an invalid player type " + type);
-               break;
-       }
-}
-
-MediaPlayer.prototype.updateContent = function(newContent, append)
-{
-       console.log("MediaPlayer: updating content for " + this.type);
-       if (newContent && newContent !== undefined && newContent.length > 0)
-       {
-               if (append)
-               {
-                       this.content = this.content.concat(newContent);
-               }
-               else
-               {
-                       this.content.length = 0;
-                       this.content = newContent;
-               }
-       }
-       else
-               console.log("MediaPlayer: invalid content update for " + this.type);
-}
-
-MediaPlayer.prototype.getContent = function()
-{
-       return this.content;
-}
-
-MediaPlayer.prototype.contentLength = function()
-{
-       return this.content.length;
-}
-
-MediaPlayer.prototype.show = function()
-{
-       $("#" + this.type + "Player").show();
-}
-
-MediaPlayer.prototype.clearContent = function()
-{
-       console.log("MediaPlayer: clearing content for " + this.type);
-       this.emptyTimeouts();
-       this.content.length = 0;
-}
-
-MediaPlayer.prototype.currentIndex = function()
-{
-       return this.listIndex;
-}
-
-MediaPlayer.prototype.emptyTimeouts = function()
-{
-    var clearItem;
-
-    while (clearItem = this.clearDrawTimeouts.pop())
-    {
-               clearTimeout(clearItem);
-    }
-}
-
-MediaPlayer.prototype.makeListBar = function(icon, i, artistTextObj, trackTextObj)
-{
-       var lightColor = (i+1)%2 !== 0 ? "lightColor " : "";
-       var nightColor = nightMode ? "night" : "";
-       var canvasW = Math.floor(mediaListItemW);
-       var canvasH = Math.floor(mediaListItemH * 0.95) ;
-
-       this.mediaListItems.append("<li id=" + this.type + "ListItem" + i + " style='width:" + mediaListItemW + "px;" + " height:" +  mediaListItemH + "px;" +
-               " margin-bottom: 10px' ><a href='#' class='" + lightColor + nightColor + "' >" +
-               "<canvas id=" + this.type + "CanvasNum" + i + " width=" + canvasW + " height=" + canvasH + "> </canvas>" +
-               "</a></li>"
-       );
-
-       try
-       {
-               var currentCanvas = document.getElementById(this.type + "CanvasNum" + i);
-               var currentCTX = currentCanvas.getContext("2d");
-
-               if (currentCanvas && currentCTX)
-               {
-                       this.content[i].ctx = currentCTX;
-
-                       currentCTX.drawImage(icon, 0, 0, canvasH, canvasH );
-                       var artistText = new TextObject(currentCTX,artistTextObj);
-                       var trackText = new TextObject(currentCTX,trackTextObj);
-                       var trackTextTemp1 = screenOrientation === "portrait" ? mediaTextTemplate2 : mediaTextTemplate2Landscape;
-                       var trackTextTemp2 = screenOrientation === "portrait" ? mediaTextTemplate3 : mediaTextTemplate3Landscape;
-                       var artistTextTemp = screenOrientation === "portrait" ? trackTextTemplate : trackTextTemplateLandscape;
-
-                       trackText.applyTemplate(trackTextTemp1);
-                       trackText.drawObj();
-                       trackText.applyTemplate(trackTextTemp2);
-                       trackText.drawObj();
-                       artistText.applyTemplate(artistTextTemp);
-                       artistText.drawObj();
-               }
-               else
-                       console.log("MediaPlayer: Failed to draw media item for index " + i );
-       }
-       catch(err)
-       {
-           console.log("MediaPlayer: drawImage failed for " + this.type + " - reason -> " + err);
-           console.log("Source below");
-           console.log("Src = " + icon.src);
-       }
-}
-
-MediaPlayer.prototype.fillMediaList = function()
-{
-    console.log("MediaPlayer in fillMediaList for content = " + this.type);
-       this.fillingList = true;
-
-    //Don't try and fill an empty content list
-    if (this.content === undefined || this.content === null || this.content.length <=0)
-               return false;
-
-       this.emptyTimeouts();
-
-    this.mediaListItems.empty();
-    var timeOut = 1;
-
-    switch (this.type)
-    {
-               case "audio":
-                   audioMediaListLoaded = true;
-                   break;
-               case "video":
-                   videoMediaListLoaded = true;
-                   break;
-               case "image":
-                   imageMediaListLoaded = true;
-                   break;
-               default:
-                   break;
-    }
-
-    var jumpSize = 1;
-    var tmpClearTimeout;
-
-    for (var i=0; i < this.content.length; i++)
-    {
-               tmpClearTimeout = setTimeout(this.makeListItem.bind(this, i, jumpSize), timeOut);
-               this.clearDrawTimeouts.push(tmpClearTimeout);
-
-               timeOut += 50;
-               i+=jumpSize - 1;
-    }
-}
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/textObject.js b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/textObject.js
deleted file mode 100644 (file)
index 24de1ab..0000000
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-var cancelShadowFlickerInterval = undefined;
-
-TextObject = function(ctx, args)
-{
-       /* General */
-       this.name = args.name;
-       this.type = "text";
-       this.text = args.text ? args.text : "";
-       this.xLoc = args.xLoc;
-       this.yLoc = args.yLoc;
-       this.zLoc = args.zLoc == undefined ? 0 : args.zLoc;
-       this.width = args.width;
-       this.height = args.lineHeight;
-       this.lineHeight = args.lineHeight;
-       this.wordWrap = args.wordWrap;
-       this.largeShadow = args.largeShadow;
-       this.ctx = ctx;
-       this.visible = args.visible == undefined ? true : args.visible;
-       this.onClick = undefined;
-
-       /* Text styles */
-       this.font = args.font;
-       this.fillStyle = args.fillStyle;
-       this.lineWidth = args.lineWidth;
-       this.strokeStyle = args.strokeStyle;
-       this.textAlign = args.textAlign;
-       this.textBaseline = args.textBaseline;
-       this.shadowOffsetX = args.shadowOffsetX;
-       this.shadowOffsetY = args.shadowOffsetY;
-       this.shadowBlur = args.shadowBlur;
-       this.shadowColor = args.shadowColor;
-
-       if (args.template)
-               this.applyTemplate(args.template);
-
-       if (this.wordWrap)
-       {
-               var words = this.text.split(" ");
-               var line = "";
-               var tmpYloc = this.yLoc;
-
-               for(var i = 0; i < words.length; i++)
-               {
-                       var testLine = line + words[i] + " ";
-                       var metrics = this.ctx.measureText(testLine);
-                       var testWidth = metrics.width;
-
-                       if(testWidth > this.width)
-                       {
-                               line = words[i] + " ";
-                               tmpYloc += this.lineHeight;
-                               this.height += this.lineHeight;
-                       }
-                       else
-                       {
-                               line = testLine;
-                       }
-               }
-       }
-}
-
-TextObject.prototype.update = function(args)
-{
-       /* General */
-       if (args.name) {this.name = args.name;}
-       if (args.text) {this.text = args.text;}
-       if (args.xLoc) {this.xLoc = args.xLoc;}
-       if (args.yLoc) {this.yLoc = args.yLoc;}
-       if (args.zLoc) {this.zLoc = args.zLoc;}
-       if (args.width) {this.width = args.width;}
-       if (args.lineHeight) {this.height = args.lineHeight;}
-       if (args.lineHeight) {this.lineHeight = args.lineHeight;}
-       if (args.wordWrap) {this.wordWrap = args.wordWrap;}
-       if (args.largeShadow) {this.largeShadow = args.largeShadow;}
-       if (args.ctx) {this.ctx = ctx;}
-       if (args.visible) {this.visible = args.visible;}
-       if (args.onClick) {this.onClick = args.onClick;}
-
-       /* Text styles */
-       if (args.font) {this.font = args.font;}
-       if (args.fillStyle) {this.fillStyle = args.fillStyle;}
-       if (args.lineWidth) {this.lineWidth = args.lineWidth;}
-       if (args.strokeStyle) {this.strokeStyle = args.strokeStyle;}
-       if (args.textAlign) {this.textAlign = args.textAlign;}
-       if (args.textBaseline) {this.textBaseline = args.textBaseline;}
-       if (args.shadowOffsetX) {this.shadowOffsetX = args.shadowOffsetX;}
-       if (args.shadowOffsetY) {this.shadowOffsetY = args.shadowOffsetY;}
-       if (args.shadowBlur) {this.shadowBlur = args.shadowBlur;}
-       if (args.shadowColor) {this.shadowColor = args.shadowColor;}
-
-       if (args.template)
-               this.applyTemplate(args.template);
-}
-
-TextObject.prototype.drawObj = function()
-{
-       if (this.visible)
-       {
-               this.ctx.save();
-
-               this.ctx.font = this.font;
-               this.ctx.fillStyle = this.fillStyle;
-               this.ctx.lineWidth = this.lineWidth ;
-               this.ctx.strokeStyle = this.strokeStyle;
-               this.ctx.textAlign = this.textAlign;
-               this.ctx.textBaseline = this.textBaseline;
-               this.ctx.shadowOffsetX = this.shadowOffsetX;
-               this.ctx.shadowOffsetY = this.shadowOffsetY;
-               this.ctx.shadowBlur = this.shadowBlur;
-               this.ctx.shadowColor = this.shadowColor;
-
-               if (this.wordWrap)
-                       this.wrapText();
-               else
-               {
-
-                       if (this.strokeStyle)
-                               this.ctx.strokeText(this.text, this.xLoc, this.yLoc);
-
-                       if (this.fillStyle)
-                               this.ctx.fillText(this.text, this.xLoc, this.yLoc);
-
-                       this.drawNoShadow();
-               }
-
-               this.ctx.restore();
-       }
-}
-
-TextObject.prototype.applyTemplate = function(template)
-{
-       this.font = template.font;
-       this.fillStyle = template.fillStyle;
-       this.lineWidth = template.lineWidth;
-       this.strokeStyle = template.strokeStyle;
-       this.textAlign = template.textAlign;
-       this.textBaseline = template.textBaseline;
-       this.shadowOffsetX = template.shadowOffsetX;
-       this.shadowOffsetY = template.shadowOffsetY;
-       this.shadowBlur = template.shadowBlur;
-       this.shadowColor = template.shadowColor;
-
-       if (this.wordWrap)
-       {
-               var words = this.text.split(" ");
-               var line = "";
-               var tmpYloc = this.yLoc;
-
-               for(var i = 0; i < words.length; i++)
-               {
-                       var testLine = line + words[i] + " ";
-                       var metrics = this.ctx.measureText(testLine);
-                       var testWidth = metrics.width;
-
-                       if(testWidth > this.width)
-                       {
-                               line = words[i] + " ";
-                               tmpYloc += this.lineHeight;
-                               this.height += this.lineHeight;
-                       }
-                       else
-                       {
-                               line = testLine;
-                       }
-               }
-       }
-}
-
-TextObject.prototype.drawLargeShadow = function()
-{
-       var origX = this.shadowOffsetX;
-       var origY = this.shadowOffsetY;
-
-       this.shadowOffsetX = this.largeShadow;
-       this.shadowOffsetY = 0;
-       this.drawObj();
-       this.shadowOffsetY = this.largeShadow;
-       this.drawObj();
-       this.shadowOffsetX = 0;
-       this.drawObj();
-       this.shadowOffsetX = -this.largeShadow;
-       this.drawObj();
-       this.shadowOffsetY = 0;
-       this.drawObj();
-       this.shadowOffsetY = -this.largeShadow;
-       this.drawObj();
-       this.shadowOffsetX = -0;
-       this.drawObj();
-       this.shadowOffsetX = -this.largeShadow;
-       this.drawObj();
-
-       this.shadowOffsetX = origX;
-       this.shadowOffsetY = origY;
-}
-
-TextObject.prototype.drawNoShadow = function()
-{
-       this.ctx.save();
-
-       this.ctx.shadowOffsetX = 0;
-       this.ctx.shadowOffsetY = 0;
-       this.ctx.shadowBlur = 0;
-
-       if (this.strokeStyle)
-               this.ctx.strokeText(this.text, this.xLoc, this.yLoc);
-
-       if (this.fillStyle)
-               this.ctx.fillText(this.text, this.xLoc, this.yLoc);
-
-       this.ctx.restore();
-
-}
-
-TextObject.prototype.wrapText = function()
-{
-       this.ctx.save();
-
-       this.ctx.font = this.font;
-       this.ctx.fillStyle = this.fillStyle;
-       this.ctx.lineWidth = this.lineWidth ;
-       this.ctx.strokeStyle = this.strokeStyle;
-       this.ctx.textAlign = this.textAlign;
-       this.ctx.textBaseline = this.textBaseline;
-       this.ctx.shadowOffsetX = this.shadowOffsetX;
-       this.ctx.shadowOffsetY = this.shadowOffsetY;
-       this.ctx.shadowBlur = this.shadowBlur;
-       this.ctx.shadowColor = this.shadowColor;
-       this.height = this.lineHeight;
-
-       var words = this.text.split(" ");
-       var line = "";
-       var tmpYloc = this.yLoc;
-       var lineCount = 1;
-
-       for(var i = 0; i < words.length; i++)
-       {
-               var testLine = line + words[i] + " ";
-               var metrics = this.ctx.measureText(testLine);
-               var testWidth = metrics.width;
-
-               if(testWidth > this.width)
-               {
-                       if (this.strokeStyle)
-                               this.ctx.strokeText(line, this.xLoc, tmpYloc);
-
-                       if (this.fillStyle)
-                               this.ctx.fillText(line, this.xLoc, tmpYloc);
-
-                       line = words[i] + " ";
-                       tmpYloc += this.lineHeight;
-                       this.height += this.lineHeight;
-                       lineCount += 1;
-
-                       if (lineCount >= 4)
-                               break;
-               }
-               else
-               {
-                       line = testLine;
-               }
-       }
-
-       if (this.strokeStyle)
-               this.ctx.strokeText(line, this.xLoc, tmpYloc);
-
-       if (this.fillStyle)
-               this.ctx.fillText(line, this.xLoc, tmpYloc);
-
-       this.ctx.restore();
-}
-
-function shadowFlicker(obj, min, max, interval)
-{
-       var tmpObj = obj;
-
-       if (cancelShadowFlickerInterval)
-               clearInterval(cancelShadowFlickerInterval);
-
-       cancelShadowFlickerInterval = setInterval(
-
-                       function(){
-
-                               if (tmpObj.largeShadow)
-                                       var shadowOffset = tmpObj.largeShadow;
-                               else
-                                       var shadowOffset = tmpObj.shadowOffsetX;
-
-                               if (shadowOffset > max)
-                                       shadowOffset -= Math.floor(Math.random()*interval) + 1;
-                               else if (shadowOffset <= min)
-                                       shadowOffset += Math.floor(Math.random()*interval) + 1;
-                               else
-                               {
-                                       if (Math.floor(Math.random()*1))
-                                               shadowOffset += Math.floor(Math.random()*interval) + 1;
-                                       else
-                                               shadowOffset -= Math.floor(Math.random()*interval) + 1;
-                               }
-
-                               if (shadowOffset < 1)
-                                       shadowOffset = 1;
-
-                               tmpObj.ctx.clearRect(0,0,500,500);
-
-
-                               if (!tmpObj.largeShadow)
-                               {
-                                       tmpObj.shadowOffsetX = shadowOffset;
-                                       tmpObj.shadowOffsetY = shadowOffset;
-                                       tmpObj.drawObj();
-                                       tmpObj.largeShadow = shadowOffset;
-                                       tmpObj.drawLargeShadow();
-                               }
-                               else
-                               {
-                                       tmpObj.largeShadow = shadowOffset;
-                                       tmpObj.drawLargeShadow();
-                               }
-
-                       }, 100);
-}
-
-function shadowGlow(obj, min, max, speed)
-{
-       var tmpObj = obj;
-
-       if (cancelShadowFlickerInterval)
-               clearInterval(cancelShadowFlickerInterval);
-
-       var direction = "OUT";
-       cancelShadowFlickerInterval = setInterval(
-
-                       function(){
-
-
-                               if (tmpObj.largeShadow)
-                                       var shadowOffset = tmpObj.largeShadow;
-                               else
-                                       var shadowOffset = tmpObj.shadowOffsetX;
-
-                               if (shadowOffset > max)
-                                       direction = "IN";
-                               else if (shadowOffset <= min)
-                                       direction = "OUT";
-
-                               if (direction === "OUT")
-                                       shadowOffset += 1;
-                               else
-                                       shadowOffset -= 1;
-
-                               if (shadowOffset < 1)
-                                       shadowOffset = 1;
-
-                               tmpObj.ctx.clearRect(0,0,500,500);
-
-
-                               if (!tmpObj.largeShadow)
-                               {
-                                       tmpObj.shadowOffsetX = shadowOffset;
-                                       tmpObj.shadowOffsetY = shadowOffset;
-                                       tmpObj.drawObj();
-                                       tmpObj.largeShadow = shadowOffset;
-                                       tmpObj.drawLargeShadow();
-                               }
-                               else
-                               {
-                                       tmpObj.largeShadow = shadowOffset;
-                                       tmpObj.drawLargeShadow();
-                               }
-
-                       }, 100);
-}
-
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/videoPlayer.js b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/js/videoPlayer.js
deleted file mode 100644 (file)
index 333aedc..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-
-VideoPlayer = function()
-{
-       this.clearVideoTimeInterval = undefined;
-       this.loadPrevVideo = false;
-       this.currentVideoContent = undefined;
-}
-
-VideoPlayer.prototype.play = function()
-{
-       console.log("MediaPlayer in VideoPlayer::play");
-       if (this.playerControls.paused)
-       {
-               this.playerControls.play();
-
-               //Start tracking the current time of the media.  This is used to play from previous position on restart.
-               if (!this.content[this.listIndex].remoteFile)
-               {
-                       var timeoutFunction = function()
-                       {
-                               localStorage.prevVideoTime = this.playerControls.currentTime;
-                       }
-
-                       //Start tracking the current time of the media.  This is used to play from previous position on restart.
-                       this.clearVideoTimeInterval = setInterval(timeoutFunction.bind(this),500);
-               }
-       }
-}
-
-VideoPlayer.prototype.pause = function()
-{
-       if (!this.playerControls.paused)
-       {
-               this.playerControls.pause();
-               clearInterval(this.clearVideoTimeInterval);
-       }
-}
-
-VideoPlayer.prototype.playing = function()
-{
-       return !(this.playerControls.paused);
-}
-
-VideoPlayer.prototype.next = function()
-{
-       if (this.content)
-       {
-               if (this.content.length > (this.listIndex + 1))
-                       this.listIndex++;
-               else
-                       this.listIndex = 0;
-       this.load(this.listIndex, false);
-       }
-}
-
-VideoPlayer.prototype.previous = function()
-{
-       if (this.content)
-       {
-               if (this.listIndex > 0 )
-                       this.listIndex--;
-               else
-                       this.listIndex = this.content.length - 1;
-
-       this.load(this.listIndex, false);
-       }
-}
-
-VideoPlayer.prototype.load = function(index, play)
-{
-       this.listIndex = index;
-       this.loadAndPlay = play;
-       this.playerControls.pause();
-       $("#videoSrc").attr("src", this.content[this.listIndex].contentURI);
-       this.playerControls.load();
-}
-
-VideoPlayer.prototype.videoLoaded = function()
-{
-       this.currentVideoContent = this.content[this.listIndex];
-
-       //Only store track to localStorage if it's a local file, and current menu is the Video menu
-       if (!this.content[this.listIndex].remoteFile && localStorage.prevMenu === "mainVideoButton")
-       {
-               localStorage.prevVideo = this.content[this.listIndex].contentURI;
-       }
-       else
-       {
-               localStorage.prevVideo = undefined;
-               localStorage.prevVideoTime = undefined;
-       }
-
-       if (this.loadPrevVideo)
-       {
-               this.playerControls.currentTime = localStorage.prevVideoTime;
-               this.loadPrevVideo = false;
-               this.play();
-       }
-
-       if (this.loadAndPlay)
-               this.play();
-
-       this.currentFileLoaded = true;
-}
-
-VideoPlayer.prototype.onContentLoaded = function()
-{
-       try
-       {
-               if (localStorage.prevVideo && localStorage.prevVideo !== "undefined")
-               {
-                       for (var i = 0; i < this.content.length; i++)
-                       {
-                               if (this.content[i].contentURI === localStorage.prevVideo)
-                               {
-                                       console.log("MediaPlayer: Previous video found, loading " + this.content[i].contentURI);
-                                       this.listIndex = i;
-                                       this.loadPrevVideo = true;
-                                       this.fillMediaList();
-                                       this.load(i, true);
-                               }
-                       }
-               }
-               else
-               {
-                       console.log("MediaPlayer: No previous video found, loading first");
-                       this.load(0,false);
-               }
-       }
-
-       catch (err)
-       {
-               console.log("MediaPlayer: Error when parsing videoContent");
-       }
-}
-
-VideoPlayer.prototype.makeListItem = function(j, k)
-{
-       var canvasH = mediaListItemH * 0.95 ;
-
-       for (var i = j; (i < (j+k) && i < this.content.length); i++)
-       {
-
-               if (this.content[i].artists === undefined)
-           {
-               this.content[i].artists = new Array();
-               this.content[i].artists[0] = "Unknown";
-           }
-
-           else if (typeof this.content[i].artists[0] !== "string")
-                       this.content[i].artists[0] = "Unknown";
-
-               var artistText = {"text" : this.content[i].artists[0], "xLoc" : canvasH + 20, "yLoc" : canvasH / 2.5 , "zLoc" : 0};
-               var trackText = {"text" : this.content[i].title, "xLoc" : canvasH + 20, "yLoc" : canvasH / 1.1 , "zLoc" : 0};
-
-               this.makeListBar(vidIcon, i, artistText, trackText);
-
-               // Set callback function for the new list item
-               $("#" + this.type + "CanvasNum" + i).click(function () {
-                               try
-                               {
-                                       videoPlayer.load($(this).parent().parent().index(), true);
-                                       $("#videoMediaList").hide();
-                               }
-                               catch(err)
-                               {
-                                       console.log("MediaPlayer: load video error " + err.message);
-                               }
-                       });
-       }
-}
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/manifest.json b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/manifest.json
deleted file mode 100644 (file)
index 9ab50ea..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-    "app": {
-        "launch": {
-            "container": "panel",
-            "local_path": "index.html"
-        }
-    },
-    "description": "__MSG_appDescription__",
-    "icons": {
-        "128": "MediaPlayer.png"
-    },
-    "name": "__MSG_appName__",
-    "permissions": [],
-    "version": "0.2013.6.10"
-}
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/packaging/MediaPlayer.changes b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/packaging/MediaPlayer.changes
deleted file mode 100644 (file)
index 03cb48f..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-* Wed Dec 18 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20131218.195059@b3964db
-- Adding requirement to the spec for speech-recognition and wrt-plugins-ivi
-
-* Mon Nov 18 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20131115.213224@f4bb5fa
-- Fix for showing elapsed time bar on video screen
-
-* Thu Nov 14 2013 brianjjones <brian.j.jones@intel.com> accepted/tizen/20131015.185352@dcea024
-- Adding current track time to the metadata output
-
-* Tue Oct 15 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20131015.010041@0cdd066
-- Saving of the localStorage now occurs after the file has successfully loaded
-
-* Mon Oct 14 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20131010.205318@a65dc75
-- Image player will now remember what image it was last on
-
-* Tue Oct 08 2013 brianjjones <brian.j.jones@intel.com> accepted/tizen/20131004.164521@81d77fa
-- Re-organizing the code so that the players are object based. Adding code to remember
-  what page you were on as well as the previous media
-
-* Fri Oct 04 2013 brianjjones <brian.j.jones@intel.com> accepted/tizen/20131004.164521@b1a663e
-- Adding a change so that if local media fails to load, it tries again. Also now starts on
-  previous menu.
-
-* Thu Oct 03 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20130925.235244@b480ae8
-- MediaPlayer will now remember where the user was on restart.  Also able to reconnect
-  to remote media if connection is lost (TIVI-1254)
-- Load the first video when moving to the video player mode
-- Fix background when in nightMode
-- Make play button state driven directly off media events
-
-* Wed Sep 25 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20130925.145436@899c31e
-- DLNA plugin doesn't currently give a signal that it failed to connect.  So a interval call
-  has been added to continue trying until successfull.
-
-* Tue Sep 24 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20130920.001725@98ab50d
-- Update to the fillMediaList method.  This breaks it into pieces so the rest of the app can
-  continue to be used. This helps speed up the app and gives it a snappier feel.
-  Signed-off-by: brianjjones <brian.j.jones@intel.com>
-
-* Thu Sep 19 2013 brianjjones <brian.j.jones@intel.com> accepted/tizen/20130918.185209@7d7f65c
-- Removing the wait for album art, instead a default image will be used until it's ready.
-- Broke that code out into it's own javascript file.  Several fixes for properly displaying
-- the song text for longer names. Adding a postun to the spec so that the app is properly
-- uninstalled. Signed-off-by: brianjjones <brian.j.jones@intel.com>
-
-* Tue Sep 17 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20130913.223432@5b6e998
-- Fix for NightMode, shrinking play button slightly to avoid overlap
-
-* Fri Sep 13 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20130913.011212@023d5e5
-- Adding DLNA browsing support. MediaPlayer will now show files found on remote servers
-
-* Thu Sep 12 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20130909.164827@ee8af51
-- Adding a listener for DriverMode.  If it receives a value > 0 it will pause playing video.
-
-* Fri Sep 06 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20130830.191004@b8fe9bb
-- Use all available space for videos and images
-- Remove background image
-- Adding icon, MediaPlayer.png, to the wgt file
-
-* Tue Aug 27 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20130723.194640@f68855f
-- Adding tizen.speech (voice control) support.
-
-* Mon Jul 22 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20130719.021058@4b5b477
-- Fix for play button bug, music now moves to the next song when finished, error shows up
-  if filetype can't be loaded
-- More image shrinking
-
-* Wed Jul 17 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20130702.231722@8097a1e
-- Shrinking image sizes and removing hard coded reference to ogg
-
-* Tue Jul 02 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20130701.233523@c4d3618
-- Putting missing text back in.  Adding several try/catch statements to deal with possible
-  null arrays
-
-* Mon Jul 01 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20130629.001025@76c119d
-- Adding a null check for artwork.  Various other sizing tweaks
-
-* Fri Jun 28 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20130628.000427@0eedd50
-- Changing installation to only wrt-install if it is after the first boot.  Otherwise,
-  copy the wgt file to the correct place and let wrt-installer handle it
-
-* Thu Jun 27 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20130626.013745@95361ce
-- Adding slide show ability to image player.  Various changes to make app look better
-  in landscape.  Cleaning up code.
-
-* Wed Jun 26 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20130626.013745@2809676
-- Check that the album cover art image is valid before using it. Removing some images
-  due to renaming.
-- Changing some image files. Adding check to ensure album cover image is valid.
-  Removing stray text.
-
-Brian Jones <brian.j.jones@intel.com>
-Initial Checkin
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/project/packaging/MediaPlayer.spec b/samples/web/Sample/Tizen/Web App/MediaPlayer/project/packaging/MediaPlayer.spec
deleted file mode 100644 (file)
index a7421b9..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-Name:       MediaPlayer
-Summary:    A HTML media player application
-Version:    0.0.1
-Release:    1
-Group:      Applications/System
-License:    Apache 2.0
-URL:        http://www.tizen.org2
-Source0:    %{name}-%{version}.tar.bz2
-BuildRequires:  zip
-BuildRequires:  desktop-file-utils
-Requires:  speech-recognition
-Requires:   wrt-installer
-Requires:   wrt-plugins-ivi
-
-%description
-A HTML media player for music, video, and images
-
-%prep
-%setup -q -n %{name}-%{version}
-
-%build
-
-make wgtPkg
-
-#make %{?jobs:-j%jobs}
-
-%install
-rm -rf %{buildroot}
-%make_install
-
-%post
-if [ -f /opt/usr/apps/.preinstallWidgets/preinstallDone ]; then
-    wrt-installer -i /opt/usr/apps/.preinstallWidgets/MediaPlayer.wgt;
-fi
-
-%postun
-    wrt-installer -un t8j6HTRpuz.MediaPlayer
-
-%files
-%defattr(-,root,root,-)
-/opt/usr/apps/.preinstallWidgets/MediaPlayer.wgt
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/tizen-app-template.xml b/samples/web/Sample/Tizen/Web App/MediaPlayer/tizen-app-template.xml
deleted file mode 100644 (file)
index ec637dc..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<tizen-app-template xmlns="http://www.tizen.org/tizen-app-template" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" template-version="" sdk-version="" icon32="tizen_32.png" icon64="tizen_64.png" xsi:schemaLocation="http://www.tizen.org/tizen-app-template tizen-app-template.xsd ">
-    <template-name>MediaPlayer</template-name>
-    <widget-type>TIZEN</widget-type>
-    <description-file-name>description.xml</description-file-name>
-</tizen-app-template>
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/tizen_32.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/tizen_32.png
deleted file mode 100644 (file)
index a37c33e..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/tizen_32.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/MediaPlayer/tizen_64.png b/samples/web/Sample/Tizen/Web App/MediaPlayer/tizen_64.png
deleted file mode 100644 (file)
index f80f2ec..0000000
Binary files a/samples/web/Sample/Tizen/Web App/MediaPlayer/tizen_64.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/Saythis/description.xml b/samples/web/Sample/Tizen/Web App/Saythis/description.xml
deleted file mode 100644 (file)
index dd07ad1..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<?xml-stylesheet type="text/xsl" href="description.xsl"?>\r
-<Overview version="1.0">\r
-  <SampleName>Saythis</SampleName>\r
-  <SampleVersion>1.0.0</SampleVersion>\r
-  <Preview>saythis-snapshot.png</Preview>\r
-  <Description>\r
-         A sample application demonstrating the ivi special api speech usage.\r
-  </Description>\r
-</Overview>\r
diff --git a/samples/web/Sample/Tizen/Web App/Saythis/description.xsl b/samples/web/Sample/Tizen/Web App/Saythis/description.xsl
deleted file mode 100644 (file)
index 1f4f57f..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 
-    This file provides a functionality to show template's description.xml in the project wizard.
-    Don't delete or move this file.
- -->
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-  <xsl:template match="/">
-    <html>
-      <head>
-        <style type="text/css">
-          html,body {
-          font-family:Arial;
-          margin: 0px;
-          }
-          td
-          {
-          font-size:13px;
-          }
-          .samplename
-          {
-          font-size:16px;
-          color:#ffffff;
-          height:26px;
-          background-color:#6d96ac;
-          }
-          .category
-          {
-          font-size:16px;
-          color:#ffffff;
-          height:30px;
-          background-color:#6d96ac;
-          }
-          .contents
-          {
-          padding: 6px 10px 14px 10px;
-          }
-          table#widgets td
-          {
-          border: solid 1px #6d96ac;
-          border-collapse: collapse;
-          }
-          .widgetname
-          {
-          font-weight: bold;
-          text-align: center;
-          width: 20%;
-          word-break:break-all;
-          }
-          table#references td
-          {
-          width: 100%;
-          border: 0px;
-          border-spacing: 0px;
-          padding: 5px;
-          }
-          .refname
-          {
-          width: 100%;
-          font-weight: bold;
-          }
-        </style>
-      </head>
-      <body>
-        <table width="400px" border="0" cellspacing="0">
-          <tr>
-            <td class="samplename" align="center">
-              <xsl:value-of select="Overview/SampleName"/>
-              <xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>
-                         <!--
-              <xsl:value-of select="Overview/SampleVersion"/>
-                         -->
-            </td>
-          </tr>
-          <tr bgcolor="#FFFFFF">
-            <td class="contents">
-                         <strong>Type</strong>: JavaScript
-                         <p>
-              <xsl:value-of select="Overview/Description"/>
-                         </p>
-            </td>
-          </tr>
-          <tr>
-            <td align="center" bgcolor="#FFFFFF" height="260px">
-              <img>
-                <xsl:attribute name="src">
-                  <xsl:value-of select="Overview/Preview"/>
-                </xsl:attribute>
-              </img>
-            </td>
-          </tr>
-        </table>
-      </body>
-    </html>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/samples/web/Sample/Tizen/Web App/Saythis/project/LICENSE b/samples/web/Sample/Tizen/Web App/Saythis/project/LICENSE
deleted file mode 100644 (file)
index d645695..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/samples/web/Sample/Tizen/Web App/Saythis/project/Makefile b/samples/web/Sample/Tizen/Web App/Saythis/project/Makefile
deleted file mode 100644 (file)
index 2725ec2..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-PROJECT = saythis
-INSTALL_FILES = css js saythis.png index.html README.txt LICENSE
-
-VERSION := 0.0.1
-PACKAGE = $(PROJECT)-$(VERSION)
-
-INSTALL_DIR = ${DESTDIR}/opt/usr/apps/.preinstallWidgets
-
-all:
-       @echo "Nothing to build"
-
-wgtPkg:
-       zip -r $(PROJECT).wgt js css index.html manifest.json config.xml saythis.png
-
-install:
-       @echo "Installing saythis, stand by..."
-       mkdir -p $(INSTALL_DIR)/
-       cp $(PROJECT).wgt $(INSTALL_DIR)/
-
-dist:
-       tar czf ../$(PACKAGE).tar.bz2 . 
diff --git a/samples/web/Sample/Tizen/Web App/Saythis/project/README.txt b/samples/web/Sample/Tizen/Web App/Saythis/project/README.txt
deleted file mode 100644 (file)
index 1f91b87..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-
-SayThis is HTML5-based webapp for demonstrating text to speech
-
-Author: Jimmy Huang <jimmy.huang@intel.com>
-
-This application is written using HTML5/css3/jquery javascript library and is
-distributed under Apache2.0 license.
-
-IMAGES
------------------------------------------------------------------------------
-
-all images in the images/ folder are created by Intel Corp.
-they are licensed under the Creative Commons Attribution 3.0 license
-http://creativecommons.org/licenses/by/3.0/us/
-
-FONTS
------------------------------------------------------------------------------
-
-SOUNDS
------------------------------------------------------------------------------
-
-LIBRARIES
------------------------------------------------------------------------------
-
-jQuery JavaScript Library v1.7.2
-Copyright 2011, John Resig
-Dual licensed under the MIT or GPL Version 2 licenses.
-http://jquery.org/license
diff --git a/samples/web/Sample/Tizen/Web App/Saythis/project/config.xml b/samples/web/Sample/Tizen/Web App/Saythis/project/config.xml
deleted file mode 100644 (file)
index 0d9afea..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/sayThis" version="1.0.0" viewmodes="maximized">
-    <tizen:application id="lYjFlj49Q4.saythis" package="lYjFlj49Q4" required_version="2.1"/>
-    <content src="index.html"/>
-    <icon src="saythis.png"/>
-    <name>saythis</name>
-    <tizen:privilege name="http://tizen.org/privilege/speech"/>
-</widget>
diff --git a/samples/web/Sample/Tizen/Web App/Saythis/project/css/main.css b/samples/web/Sample/Tizen/Web App/Saythis/project/css/main.css
deleted file mode 100644 (file)
index d7a7880..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2012, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-
-/* -------------------------------- global ----------------------------- */
-
-body {
-    margin: 0px;
-    -webkit-user-select: none;
-    background-color: "white";
-    box-shadow: 5px 5px 20px black;
-    top: 50%;
-    left: 50%;
-    -webkit-transform: translate(-50%, -50%);
-    position: absolute;
-    width: 90%;
-    height: 80%;
-    -webkit-box-align: center;
-    -webkit-box-pack: center;
-    -webkit-box-orient: vertical;
-    display: -webkit-box;
-}
-
-#main_page {
-    position: absolute;
-    margin: 0;
-    padding: 0;
-    width: 100%;
-    height: 100%;
-    background-color: #ACD2F6;
-}
-
-#instructionLabel {
-    margin-top: 30px;
-    width: 80%;
-    height: 15%;
-    margin-left: 10%;
-    margin-right: 10%;
-    text-align: center;
-    font-size: 50px;
-    font-weight: lighter;
-    color: #111111;
-}
-
-#inputArea {
-    width: 80%;
-    height: 60%;
-    margin-left: 10%;
-    margin-right: 10%;
-    font-size: 50px;
-    font-weight: lighter;
-    resize: none;
-}
-
-#buttonPanel {
-    width: 80%;
-    height: 20%;
-    margin-left: 10%;
-    margin-right: 10%;
-}
-
-#speakButton {
-    width: 20%;
-    height: 50px;
-    margin-top: 30px;
-    margin-left: 40%;
-    margin-right: 40%;
-    text-align: center;
-    font-size: 26px;
-    font-weight: lighter;
-    color: #ffffff;
-    background-color: #470009;
-}
-
-.pressed {
-    background-color: grey !important;
-}
-
-#speakButtonLabel {
-    position: relative;
-    top: 25%;
-}
diff --git a/samples/web/Sample/Tizen/Web App/Saythis/project/index.html b/samples/web/Sample/Tizen/Web App/Saythis/project/index.html
deleted file mode 100644 (file)
index 750e1d3..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- * Copyright (c) 2012, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
--->
-<html>
-<head>
-    <meta name="viewport" content="width=device-width target-densitydpi=device-dpi initial-scale=1 maximum-scale=1 user-scalable=0" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>SayThis</title>
-    <link rel="stylesheet" type="text/css" href="css/main.css"></link>
-    <script src="js/jquery-2.0.3.min.js"></script>
-    <script src="js/main.js"></script>
-</head>
-
-<body>
-    <div id="main_page">
-        <div id="instructionLabel">Type in the words</div>
-        <textarea id="inputArea"></textarea>
-        <div id="buttonPanel">
-            <div id="speakButton">
-                <div id="speakButtonLabel">SAY</div>
-            </div>
-        </div>
-    </div>
-</body>
-</html>
diff --git a/samples/web/Sample/Tizen/Web App/Saythis/project/js/jquery-2.0.3.min.js b/samples/web/Sample/Tizen/Web App/Saythis/project/js/jquery-2.0.3.min.js
deleted file mode 100644 (file)
index 2be209d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-/*! jQuery v2.0.3 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
-//@ sourceMappingURL=jquery-2.0.3.min.map
-*/
-(function(e,undefined){var t,n,r=typeof undefined,i=e.location,o=e.document,s=o.documentElement,a=e.jQuery,u=e.$,l={},c=[],p="2.0.3",f=c.concat,h=c.push,d=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,x=function(e,n){return new x.fn.init(e,n,t)},b=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^-ms-/,N=/-([\da-z])/gi,E=function(e,t){return t.toUpperCase()},S=function(){o.removeEventListener("DOMContentLoaded",S,!1),e.removeEventListener("load",S,!1),x.ready()};x.fn=x.prototype={jquery:p,constructor:x,init:function(e,t,n){var r,i;if(!e)return this;if("string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:T.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof x?t[0]:t,x.merge(this,x.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:o,!0)),C.test(r[1])&&x.isPlainObject(t))for(r in t)x.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=o.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?n.ready(e):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return d.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[1]||{},a=2),"object"==typeof s||x.isFunction(s)||(s={}),u===a&&(s=this,--a);u>a;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(l&&r&&(x.isPlainObject(r)||(i=x.isArray(r)))?(i?(i=!1,o=n&&x.isArray(n)?n:[]):o=n&&x.isPlainObject(n)?n:{},s[t]=x.extend(l,o,r)):r!==undefined&&(s[t]=r));return s},x.extend({expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=a),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){(e===!0?--x.readyWait:x.isReady)||(x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(o,[x]),x.fn.trigger&&x(o).trigger("ready").off("ready")))},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if("object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(t){return!1}return!0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:JSON.parse,parseXML:function(e){var t,n;if(!e||"string"!=typeof e)return null;try{n=new DOMParser,t=n.parseFromString(e,"text/xml")}catch(r){t=undefined}return(!t||t.getElementsByTagName("parsererror").length)&&x.error("Invalid XML: "+e),t},noop:function(){},globalEval:function(e){var t,n=eval;e=x.trim(e),e&&(1===e.indexOf("use strict")?(t=o.createElement("script"),t.text=e,o.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(k,"ms-").replace(N,E)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,s=j(e);if(n){if(s){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(s){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:function(e){return null==e?"":v.call(e)},makeArray:function(e,t){var n=t||[];return null!=e&&(j(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:g.call(t,e,n)},merge:function(e,t){var n=t.length,r=e.length,i=0;if("number"==typeof n)for(;n>i;i++)e[r++]=t[i];else while(t[i]!==undefined)e[r++]=t[i++];return e.length=r,e},grep:function(e,t,n){var r,i=[],o=0,s=e.length;for(n=!!n;s>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,s=j(e),a=[];if(s)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(a[a.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(a[a.length]=r);return f.apply([],a)},guid:1,proxy:function(e,t){var n,r,i;return"string"==typeof t&&(n=e[t],t=e,e=n),x.isFunction(e)?(r=d.call(arguments,2),i=function(){return e.apply(t||this,r.concat(d.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):undefined},access:function(e,t,n,r,i,o,s){var a=0,u=e.length,l=null==n;if("object"===x.type(n)){i=!0;for(a in n)x.access(e,t,a,n[a],!0,o,s)}else if(r!==undefined&&(i=!0,x.isFunction(r)||(s=!0),l&&(s?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(x(e),n)})),t))for(;u>a;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:l?t.call(e):u?t(e[0],n):o},now:Date.now,swap:function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i}}),x.ready.promise=function(t){return n||(n=x.Deferred(),"complete"===o.readyState?setTimeout(x.ready):(o.addEventListener("DOMContentLoaded",S,!1),e.addEventListener("load",S,!1))),n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function j(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}t=x(o),function(e,undefined){var t,n,r,i,o,s,a,u,l,c,p,f,h,d,g,m,y,v="sizzle"+-new Date,b=e.document,w=0,T=0,C=st(),k=st(),N=st(),E=!1,S=function(e,t){return e===t?(E=!0,0):0},j=typeof undefined,D=1<<31,A={}.hasOwnProperty,L=[],q=L.pop,H=L.push,O=L.push,F=L.slice,P=L.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",W="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",$=W.replace("w","w#"),B="\\["+M+"*("+W+")"+M+"*(?:([*^$|!~]?=)"+M+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+$+")|)|)"+M+"*\\]",I=":("+W+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+B.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=RegExp("^"+M+"*,"+M+"*"),X=RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=RegExp(M+"*[+~]"),Y=RegExp("="+M+"*([^\\]'\"]*)"+M+"*\\]","g"),V=RegExp(I),G=RegExp("^"+$+"$"),J={ID:RegExp("^#("+W+")"),CLASS:RegExp("^\\.("+W+")"),TAG:RegExp("^("+W.replace("w","w*")+")"),ATTR:RegExp("^"+B),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:RegExp("^(?:"+R+")$","i"),needsContext:RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Q=/^[^{]+\{\s*\[native \w/,K=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Z=/^(?:input|select|textarea|button)$/i,et=/^h\d$/i,tt=/'|\\/g,nt=RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),rt=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{O.apply(L=F.call(b.childNodes),b.childNodes),L[b.childNodes.length].nodeType}catch(it){O={apply:L.length?function(e,t){H.apply(e,F.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function ot(e,t,r,i){var o,s,a,u,l,f,g,m,x,w;if((t?t.ownerDocument||t:b)!==p&&c(t),t=t||p,r=r||[],!e||"string"!=typeof e)return r;if(1!==(u=t.nodeType)&&9!==u)return[];if(h&&!i){if(o=K.exec(e))if(a=o[1]){if(9===u){if(s=t.getElementById(a),!s||!s.parentNode)return r;if(s.id===a)return r.push(s),r}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(a))&&y(t,s)&&s.id===a)return r.push(s),r}else{if(o[2])return O.apply(r,t.getElementsByTagName(e)),r;if((a=o[3])&&n.getElementsByClassName&&t.getElementsByClassName)return O.apply(r,t.getElementsByClassName(a)),r}if(n.qsa&&(!d||!d.test(e))){if(m=g=v,x=t,w=9===u&&e,1===u&&"object"!==t.nodeName.toLowerCase()){f=gt(e),(g=t.getAttribute("id"))?m=g.replace(tt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",l=f.length;while(l--)f[l]=m+mt(f[l]);x=U.test(e)&&t.parentNode||t,w=f.join(",")}if(w)try{return O.apply(r,x.querySelectorAll(w)),r}catch(T){}finally{g||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,r,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>i.cacheLength&&delete t[e.shift()],t[n]=r}return t}function at(e){return e[v]=!0,e}function ut(e){var t=p.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function lt(e,t){var n=e.split("|"),r=e.length;while(r--)i.attrHandle[n[r]]=t}function ct(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return at(function(t){return t=+t,at(function(n,r){var i,o=e([],n.length,t),s=o.length;while(s--)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}s=ot.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},n=ot.support={},c=ot.setDocument=function(e){var t=e?e.ownerDocument||e:b,r=t.defaultView;return t!==p&&9===t.nodeType&&t.documentElement?(p=t,f=t.documentElement,h=!s(t),r&&r.attachEvent&&r!==r.top&&r.attachEvent("onbeforeunload",function(){c()}),n.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ut(function(e){return e.appendChild(t.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=ut(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),n.getById=ut(function(e){return f.appendChild(e).id=v,!t.getElementsByName||!t.getElementsByName(v).length}),n.getById?(i.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){return e.getAttribute("id")===t}}):(delete i.find.ID,i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=n.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==j?t.getElementsByTagName(e):undefined}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.CLASS=n.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==j&&h?t.getElementsByClassName(e):undefined},g=[],d=[],(n.qsa=Q.test(t.querySelectorAll))&&(ut(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||d.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll(":checked").length||d.push(":checked")}),ut(function(e){var n=t.createElement("input");n.setAttribute("type","hidden"),e.appendChild(n).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&d.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||d.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),d.push(",.*:")})),(n.matchesSelector=Q.test(m=f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&ut(function(e){n.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",I)}),d=d.length&&RegExp(d.join("|")),g=g.length&&RegExp(g.join("|")),y=Q.test(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},S=f.compareDocumentPosition?function(e,r){if(e===r)return E=!0,0;var i=r.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(r);return i?1&i||!n.sortDetached&&r.compareDocumentPosition(e)===i?e===t||y(b,e)?-1:r===t||y(b,r)?1:l?P.call(l,e)-P.call(l,r):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,n){var r,i=0,o=e.parentNode,s=n.parentNode,a=[e],u=[n];if(e===n)return E=!0,0;if(!o||!s)return e===t?-1:n===t?1:o?-1:s?1:l?P.call(l,e)-P.call(l,n):0;if(o===s)return ct(e,n);r=e;while(r=r.parentNode)a.unshift(r);r=n;while(r=r.parentNode)u.unshift(r);while(a[i]===u[i])i++;return i?ct(a[i],u[i]):a[i]===b?-1:u[i]===b?1:0},t):p},ot.matches=function(e,t){return ot(e,null,null,t)},ot.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Y,"='$1']"),!(!n.matchesSelector||!h||g&&g.test(t)||d&&d.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(i){}return ot(t,p,null,[e]).length>0},ot.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},ot.attr=function(e,t){(e.ownerDocument||e)!==p&&c(e);var r=i.attrHandle[t.toLowerCase()],o=r&&A.call(i.attrHandle,t.toLowerCase())?r(e,t,!h):undefined;return o===undefined?n.attributes||!h?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null:o},ot.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},ot.uniqueSort=function(e){var t,r=[],i=0,o=0;if(E=!n.detectDuplicates,l=!n.sortStable&&e.slice(0),e.sort(S),E){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return e},o=ot.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=ot.selectors={cacheLength:50,createPseudo:at,match:J,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(nt,rt),e[3]=(e[4]||e[5]||"").replace(nt,rt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ot.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ot.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return J.CHILD.test(e[0])?null:(e[3]&&e[4]!==undefined?e[2]=e[4]:n&&V.test(n)&&(t=gt(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(nt,rt).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&C(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=ot.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,h,d,g=o!==s?"nextSibling":"previousSibling",m=t.parentNode,y=a&&t.nodeName.toLowerCase(),x=!u&&!a;if(m){if(o){while(g){p=t;while(p=p[g])if(a?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;d=g="only"===e&&!d&&"nextSibling"}return!0}if(d=[s?m.firstChild:m.lastChild],s&&x){c=m[v]||(m[v]={}),l=c[e]||[],h=l[0]===w&&l[1],f=l[0]===w&&l[2],p=h&&m.childNodes[h];while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[w,h,f];break}}else if(x&&(l=(t[v]||(t[v]={}))[e])&&l[0]===w)f=l[1];else while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if((a?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(x&&((p[v]||(p[v]={}))[e]=[w,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||ot.error("unsupported pseudo: "+e);return r[v]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?at(function(e,n){var i,o=r(e,t),s=o.length;while(s--)i=P.call(e,o[s]),e[i]=!(n[i]=o[s])}):function(e){return r(e,0,n)}):r}},pseudos:{not:at(function(e){var t=[],n=[],r=a(e.replace(z,"$1"));return r[v]?at(function(e,t,n,i){var o,s=r(e,null,i,[]),a=e.length;while(a--)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:at(function(e){return function(t){return ot(e,t).length>0}}),contains:at(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:at(function(e){return G.test(e||"")||ot.error("unsupported lang: "+e),e=e.replace(nt,rt).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return et.test(e.nodeName)},input:function(e){return Z.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},i.pseudos.nth=i.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[t]=pt(t);for(t in{submit:!0,reset:!0})i.pseudos[t]=ft(t);function dt(){}dt.prototype=i.filters=i.pseudos,i.setFilters=new dt;function gt(e,t){var n,r,o,s,a,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);a=e,u=[],l=i.preFilter;while(a){(!n||(r=_.exec(a)))&&(r&&(a=a.slice(r[0].length)||a),u.push(o=[])),n=!1,(r=X.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(z," ")}),a=a.slice(n.length));for(s in i.filter)!(r=J[s].exec(a))||l[s]&&!(r=l[s](r))||(n=r.shift(),o.push({value:n,type:s,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?ot.error(e):k(e,u).slice(0)}function mt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function yt(e,t,n){var i=t.dir,o=n&&"parentNode"===i,s=T++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,a){var u,l,c,p=w+" "+s;if(a){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,a))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[v]||(t[v]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,a)||r,l[1]===!0)return!0}}function vt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,s=[],a=0,u=e.length,l=null!=t;for(;u>a;a++)(o=e[a])&&(!n||n(o,r,i))&&(s.push(o),l&&t.push(a));return s}function bt(e,t,n,r,i,o){return r&&!r[v]&&(r=bt(r)),i&&!i[v]&&(i=bt(i,o)),at(function(o,s,a,u){var l,c,p,f=[],h=[],d=s.length,g=o||Ct(t||"*",a.nodeType?[a]:a,[]),m=!e||!o&&t?g:xt(g,f,e,a,u),y=n?i||(o?e:d||r)?[]:s:m;if(n&&n(m,y,a,u),r){l=xt(y,h),r(l,[],a,u),c=l.length;while(c--)(p=l[c])&&(y[h[c]]=!(m[h[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?P.call(o,p):f[c])>-1&&(o[l]=!(s[l]=p))}}else y=xt(y===s?y.splice(d,y.length):y),i?i(null,s,y,u):O.apply(s,y)})}function wt(e){var t,n,r,o=e.length,s=i.relative[e[0].type],a=s||i.relative[" "],l=s?1:0,c=yt(function(e){return e===t},a,!0),p=yt(function(e){return P.call(t,e)>-1},a,!0),f=[function(e,n,r){return!s&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>l;l++)if(n=i.relative[e[l].type])f=[yt(vt(f),n)];else{if(n=i.filter[e[l].type].apply(null,e[l].matches),n[v]){for(r=++l;o>r;r++)if(i.relative[e[r].type])break;return bt(l>1&&vt(f),l>1&&mt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&wt(e.slice(l,r)),o>r&&wt(e=e.slice(r)),o>r&&mt(e))}f.push(n)}return vt(f)}function Tt(e,t){var n=0,o=t.length>0,s=e.length>0,a=function(a,l,c,f,h){var d,g,m,y=[],v=0,x="0",b=a&&[],T=null!=h,C=u,k=a||s&&i.find.TAG("*",h&&l.parentNode||l),N=w+=null==C?1:Math.random()||.1;for(T&&(u=l!==p&&l,r=n);null!=(d=k[x]);x++){if(s&&d){g=0;while(m=e[g++])if(m(d,l,c)){f.push(d);break}T&&(w=N,r=++n)}o&&((d=!m&&d)&&v--,a&&b.push(d))}if(v+=x,o&&x!==v){g=0;while(m=t[g++])m(b,y,l,c);if(a){if(v>0)while(x--)b[x]||y[x]||(y[x]=q.call(f));y=xt(y)}O.apply(f,y),T&&!a&&y.length>0&&v+t.length>1&&ot.uniqueSort(f)}return T&&(w=N,u=C),b};return o?at(a):a}a=ot.compile=function(e,t){var n,r=[],i=[],o=N[e+" "];if(!o){t||(t=gt(e)),n=t.length;while(n--)o=wt(t[n]),o[v]?r.push(o):i.push(o);o=N(e,Tt(i,r))}return o};function Ct(e,t,n){var r=0,i=t.length;for(;i>r;r++)ot(e,t[r],n);return n}function kt(e,t,r,o){var s,u,l,c,p,f=gt(e);if(!o&&1===f.length){if(u=f[0]=f[0].slice(0),u.length>2&&"ID"===(l=u[0]).type&&n.getById&&9===t.nodeType&&h&&i.relative[u[1].type]){if(t=(i.find.ID(l.matches[0].replace(nt,rt),t)||[])[0],!t)return r;e=e.slice(u.shift().value.length)}s=J.needsContext.test(e)?0:u.length;while(s--){if(l=u[s],i.relative[c=l.type])break;if((p=i.find[c])&&(o=p(l.matches[0].replace(nt,rt),U.test(u[0].type)&&t.parentNode||t))){if(u.splice(s,1),e=o.length&&mt(u),!e)return O.apply(r,o),r;break}}}return a(e,f)(o,t,!h,r,U.test(e)),r}n.sortStable=v.split("").sort(S).join("")===v,n.detectDuplicates=E,c(),n.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(p.createElement("div"))}),ut(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||lt("type|href|height|width",function(e,t,n){return n?undefined:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ut(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||lt("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?undefined:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||lt(R,function(e,t,n){var r;return n?undefined:(r=e.getAttributeNode(t))&&r.specified?r.value:e[t]===!0?t.toLowerCase():null}),x.find=ot,x.expr=ot.selectors,x.expr[":"]=x.expr.pseudos,x.unique=ot.uniqueSort,x.text=ot.getText,x.isXMLDoc=ot.isXML,x.contains=ot.contains}(e);var D={};function A(e){var t=D[e]={};return x.each(e.match(w)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?D[e]||A(e):x.extend({},e);var t,n,r,i,o,s,a=[],u=!e.once&&[],l=function(p){for(t=e.memory&&p,n=!0,s=i||0,i=0,o=a.length,r=!0;a&&o>s;s++)if(a[s].apply(p[0],p[1])===!1&&e.stopOnFalse){t=!1;break}r=!1,a&&(u?u.length&&l(u.shift()):t?a=[]:c.disable())},c={add:function(){if(a){var n=a.length;(function s(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&c.has(n)||a.push(n):n&&n.length&&"string"!==r&&s(n)})})(arguments),r?o=a.length:t&&(i=n,l(t))}return this},remove:function(){return a&&x.each(arguments,function(e,t){var n;while((n=x.inArray(t,a,n))>-1)a.splice(n,1),r&&(o>=n&&o--,s>=n&&s--)}),this},has:function(e){return e?x.inArray(e,a)>-1:!(!a||!a.length)},empty:function(){return a=[],o=0,this},disable:function(){return a=u=t=undefined,this},disabled:function(){return!a},lock:function(){return u=undefined,t||c.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!a||n&&!u||(t=t||[],t=[e,t.slice?t.slice():t],r?u.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var s=o[0],a=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=s.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=d.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),s=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?d.call(arguments):r,n===a?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},a,u,l;if(r>1)for(a=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(s(t,l,n)).fail(o.reject).progress(s(t,u,a)):--i;return i||o.resolveWith(l,n),o.promise()}}),x.support=function(t){var n=o.createElement("input"),r=o.createDocumentFragment(),i=o.createElement("div"),s=o.createElement("select"),a=s.appendChild(o.createElement("option"));return n.type?(n.type="checkbox",t.checkOn=""!==n.value,t.optSelected=a.selected,t.reliableMarginRight=!0,t.boxSizingReliable=!0,t.pixelPosition=!1,n.checked=!0,t.noCloneChecked=n.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!a.disabled,n=o.createElement("input"),n.value="t",n.type="radio",t.radioValue="t"===n.value,n.setAttribute("checked","t"),n.setAttribute("name","t"),r.appendChild(n),t.checkClone=r.cloneNode(!0).cloneNode(!0).lastChild.checked,t.focusinBubbles="onfocusin"in e,i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===i.style.backgroundClip,x(function(){var n,r,s="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",a=o.getElementsByTagName("body")[0];a&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",a.appendChild(n).appendChild(i),i.innerHTML="",i.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%",x.swap(a,null!=a.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===i.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(i,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(i,null)||{width:"4px"}).width,r=i.appendChild(o.createElement("div")),r.style.cssText=i.style.cssText=s,r.style.marginRight=r.style.width="0",i.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),a.removeChild(n))}),t):t}({});var L,q,H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,O=/([A-Z])/g;function F(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=x.expando+Math.random()}F.uid=1,F.accepts=function(e){return e.nodeType?1===e.nodeType||9===e.nodeType:!0},F.prototype={key:function(e){if(!F.accepts(e))return 0;var t={},n=e[this.expando];if(!n){n=F.uid++;try{t[this.expando]={value:n},Object.defineProperties(e,t)}catch(r){t[this.expando]=n,x.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var r,i=this.key(e),o=this.cache[i];if("string"==typeof t)o[t]=n;else if(x.isEmptyObject(o))x.extend(this.cache[i],t);else for(r in t)o[r]=t[r];return o},get:function(e,t){var n=this.cache[this.key(e)];return t===undefined?n:n[t]},access:function(e,t,n){var r;return t===undefined||t&&"string"==typeof t&&n===undefined?(r=this.get(e,t),r!==undefined?r:this.get(e,x.camelCase(t))):(this.set(e,t,n),n!==undefined?n:t)},remove:function(e,t){var n,r,i,o=this.key(e),s=this.cache[o];if(t===undefined)this.cache[o]={};else{x.isArray(t)?r=t.concat(t.map(x.camelCase)):(i=x.camelCase(t),t in s?r=[t,i]:(r=i,r=r in s?[r]:r.match(w)||[])),n=r.length;while(n--)delete s[r[n]]}},hasData:function(e){return!x.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){e[this.expando]&&delete this.cache[e[this.expando]]}},L=new F,q=new F,x.extend({acceptData:F.accepts,hasData:function(e){return L.hasData(e)||q.hasData(e)},data:function(e,t,n){return L.access(e,t,n)},removeData:function(e,t){L.remove(e,t)},_data:function(e,t,n){return q.access(e,t,n)},_removeData:function(e,t){q.remove(e,t)}}),x.fn.extend({data:function(e,t){var n,r,i=this[0],o=0,s=null;if(e===undefined){if(this.length&&(s=L.get(i),1===i.nodeType&&!q.get(i,"hasDataAttrs"))){for(n=i.attributes;n.length>o;o++)r=n[o].name,0===r.indexOf("data-")&&(r=x.camelCase(r.slice(5)),P(i,r,s[r]));q.set(i,"hasDataAttrs",!0)}return s}return"object"==typeof e?this.each(function(){L.set(this,e)}):x.access(this,function(t){var n,r=x.camelCase(e);if(i&&t===undefined){if(n=L.get(i,e),n!==undefined)return n;if(n=L.get(i,r),n!==undefined)return n;if(n=P(i,r,undefined),n!==undefined)return n}else this.each(function(){var n=L.get(this,r);L.set(this,r,t),-1!==e.indexOf("-")&&n!==undefined&&L.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){L.remove(this,e)})}});function P(e,t,n){var r;if(n===undefined&&1===e.nodeType)if(r="data-"+t.replace(O,"-$1").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:H.test(n)?JSON.parse(n):n}catch(i){}L.set(e,t,n)}else n=undefined;return n}x.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=q.get(e,t),n&&(!r||x.isArray(n)?r=q.access(e,t,x.makeArray(n)):r.push(n)),r||[]):undefined},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),s=function(){x.dequeue(e,t)
-};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return q.get(e,n)||q.access(e,n,{empty:x.Callbacks("once memory").add(function(){q.remove(e,[t+"queue",n])})})}}),x.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),n>arguments.length?x.queue(this[0],e):t===undefined?this:this.each(function(){var n=x.queue(this,e,t);x._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=x.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=undefined),e=e||"fx";while(s--)n=q.get(o[s],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var R,M,W=/[\t\r\n\f]/g,$=/\r/g,B=/^(?:input|select|textarea|button)$/i;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[x.propFix[e]||e]})},addClass:function(e){var t,n,r,i,o,s=0,a=this.length,u="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,s=0,a=this.length,u=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,i=0,o=x(this),s=e.match(w)||[];while(t=s[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===r||"boolean"===n)&&(this.className&&q.set(this,"__className__",this.className),this.className=this.className||e===!1?"":q.get(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(W," ").indexOf(t)>=0)return!0;return!1},val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=x.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,x(this).val()):e,null==i?i="":"number"==typeof i?i+="":x.isArray(i)&&(i=x.map(i,function(e){return null==e?"":e+""})),t=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&t.set(this,i,"value")!==undefined||(this.value=i))});if(i)return t=x.valHooks[i.type]||x.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,"string"==typeof n?n.replace($,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,s=o?null:[],a=o?i+1:r.length,u=0>i?a:o?i:0;for(;a>u;u++)if(n=r[u],!(!n.selected&&u!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),s=i.length;while(s--)r=i[s],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,t,n){var i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===r?x.prop(e,t,n):(1===s&&x.isXMLDoc(e)||(t=t.toLowerCase(),i=x.attrHooks[t]||(x.expr.match.bool.test(t)?M:R)),n===undefined?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=x.find.attr(e,t),null==o?undefined:o):null!==n?i&&"set"in i&&(o=i.set(e,n,t))!==undefined?o:(e.setAttribute(t,n+""),n):(x.removeAttr(e,t),undefined))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,t,n){var r,i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return o=1!==s||!x.isXMLDoc(e),o&&(t=x.propFix[t]||t,i=x.propHooks[t]),n!==undefined?i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||B.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),M={set:function(e,t,n){return t===!1?x.removeAttr(e,n):e.setAttribute(n,n),n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,t){var n=x.expr.attrHandle[t]||x.find.attr;x.expr.attrHandle[t]=function(e,t,r){var i=x.expr.attrHandle[t],o=r?undefined:(x.expr.attrHandle[t]=undefined)!=n(e,t,r)?t.toLowerCase():null;return x.expr.attrHandle[t]=i,o}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,t){return x.isArray(t)?e.checked=x.inArray(x(e).val(),t)>=0:undefined}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var I=/^key/,z=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,X=/^([^.]*)(?:\.(.+)|)$/;function U(){return!0}function Y(){return!1}function V(){try{return o.activeElement}catch(e){}}x.event={global:{},add:function(e,t,n,i,o){var s,a,u,l,c,p,f,h,d,g,m,y=q.get(e);if(y){n.handler&&(s=n,n=s.handler,o=s.selector),n.guid||(n.guid=x.guid++),(l=y.events)||(l=y.events={}),(a=y.handle)||(a=y.handle=function(e){return typeof x===r||e&&x.event.triggered===e.type?undefined:x.event.dispatch.apply(a.elem,arguments)},a.elem=e),t=(t||"").match(w)||[""],c=t.length;while(c--)u=X.exec(t[c])||[],d=m=u[1],g=(u[2]||"").split(".").sort(),d&&(f=x.event.special[d]||{},d=(o?f.delegateType:f.bindType)||d,f=x.event.special[d]||{},p=x.extend({type:d,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&x.expr.match.needsContext.test(o),namespace:g.join(".")},s),(h=l[d])||(h=l[d]=[],h.delegateCount=0,f.setup&&f.setup.call(e,i,g,a)!==!1||e.addEventListener&&e.addEventListener(d,a,!1)),f.add&&(f.add.call(e,p),p.handler.guid||(p.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,p):h.push(p),x.event.global[d]=!0);e=null}},remove:function(e,t,n,r,i){var o,s,a,u,l,c,p,f,h,d,g,m=q.hasData(e)&&q.get(e);if(m&&(u=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(a=X.exec(t[l])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){p=x.event.special[h]||{},h=(r?p.delegateType:p.bindType)||h,f=u[h]||[],a=a[2]&&RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=f.length;while(o--)c=f[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(f.splice(o,1),c.selector&&f.delegateCount--,p.remove&&p.remove.call(e,c));s&&!f.length&&(p.teardown&&p.teardown.call(e,d,m.handle)!==!1||x.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)x.event.remove(e,h+t[l],n,r,!0);x.isEmptyObject(u)&&(delete m.handle,q.remove(e,"events"))}},trigger:function(t,n,r,i){var s,a,u,l,c,p,f,h=[r||o],d=y.call(t,"type")?t.type:t,g=y.call(t,"namespace")?t.namespace.split("."):[];if(a=u=r=r||o,3!==r.nodeType&&8!==r.nodeType&&!_.test(d+x.event.triggered)&&(d.indexOf(".")>=0&&(g=d.split("."),d=g.shift(),g.sort()),c=0>d.indexOf(":")&&"on"+d,t=t[x.expando]?t:new x.Event(d,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=g.join("."),t.namespace_re=t.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=undefined,t.target||(t.target=r),n=null==n?[t]:x.makeArray(n,[t]),f=x.event.special[d]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!x.isWindow(r)){for(l=f.delegateType||d,_.test(l+d)||(a=a.parentNode);a;a=a.parentNode)h.push(a),u=a;u===(r.ownerDocument||o)&&h.push(u.defaultView||u.parentWindow||e)}s=0;while((a=h[s++])&&!t.isPropagationStopped())t.type=s>1?l:f.bindType||d,p=(q.get(a,"events")||{})[t.type]&&q.get(a,"handle"),p&&p.apply(a,n),p=c&&a[c],p&&x.acceptData(a)&&p.apply&&p.apply(a,n)===!1&&t.preventDefault();return t.type=d,i||t.isDefaultPrevented()||f._default&&f._default.apply(h.pop(),n)!==!1||!x.acceptData(r)||c&&x.isFunction(r[d])&&!x.isWindow(r)&&(u=r[c],u&&(r[c]=null),x.event.triggered=d,r[d](),x.event.triggered=undefined,u&&(r[c]=u)),t.result}},dispatch:function(e){e=x.event.fix(e);var t,n,r,i,o,s=[],a=d.call(arguments),u=(q.get(this,"events")||{})[e.type]||[],l=x.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),t=0;while((i=s[t++])&&!e.isPropagationStopped()){e.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(o.namespace))&&(e.handleObj=o,e.data=o.data,r=((x.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a),r!==undefined&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!==this;u=u.parentNode||this)if(u.disabled!==!0||"click"!==e.type){for(r=[],n=0;a>n;n++)o=t[n],i=o.selector+" ",r[i]===undefined&&(r[i]=o.needsContext?x(i,this).index(u)>=0:x.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return t.length>a&&s.push({elem:this,handlers:t.slice(a)}),s},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,r,i,s=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||o,r=n.documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||s===undefined||(e.which=1&s?1:2&s?3:4&s?2:0),e}},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,s=e,a=this.fixHooks[i];a||(this.fixHooks[i]=a=z.test(i)?this.mouseHooks:I.test(i)?this.keyHooks:{}),r=a.props?this.props.concat(a.props):this.props,e=new x.Event(s),t=r.length;while(t--)n=r[t],e[n]=s[n];return e.target||(e.target=o),3===e.target.nodeType&&(e.target=e.target.parentNode),a.filter?a.filter(e,s):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==V()&&this.focus?(this.focus(),!1):undefined},delegateType:"focusin"},blur:{trigger:function(){return this===V()&&this.blur?(this.blur(),!1):undefined},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&x.nodeName(this,"input")?(this.click(),!1):undefined},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==undefined&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},x.Event=function(e,t){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.getPreventDefault&&e.getPreventDefault()?U:Y):this.type=e,t&&x.extend(this,t),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,undefined):new x.Event(e,t)},x.Event.prototype={isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=U,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=U,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=U,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,t,n,r,i){var o,s;if("object"==typeof e){"string"!=typeof t&&(n=n||t,t=undefined);for(s in e)this.on(s,t,n,e[s],i);return this}if(null==n&&null==r?(r=t,n=t=undefined):null==r&&("string"==typeof t?(r=n,n=undefined):(r=n,n=t,t=undefined)),r===!1)r=Y;else if(!r)return this;return 1===i&&(o=r,r=function(e){return x().off(e),o.apply(this,arguments)},r.guid=o.guid||(o.guid=x.guid++)),this.each(function(){x.event.add(this,e,r,n,t)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,x(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return(t===!1||"function"==typeof t)&&(n=t,t=undefined),n===!1&&(n=Y),this.each(function(){x.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?x.event.trigger(e,t,n,!0):undefined}});var G=/^.[^:#\[\.,]*$/,J=/^(?:parents|prev(?:Until|All))/,Q=x.expr.match.needsContext,K={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t=x(e,this),n=t.length;return this.filter(function(){var e=0;for(;n>e;e++)if(x.contains(this,t[e]))return!0})},not:function(e){return this.pushStack(et(this,e||[],!0))},filter:function(e){return this.pushStack(et(this,e||[],!1))},is:function(e){return!!et(this,"string"==typeof e&&Q.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],s=Q.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(s?s.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?g.call(x(e),this[0]):g.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function Z(e,t){while((e=e[t])&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return Z(e,"nextSibling")},prev:function(e){return Z(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return e.contentDocument||x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(K[e]||x.unique(i),J.test(e)&&i.reverse()),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,t,n){var r=[],i=n!==undefined;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&x(e).is(n))break;r.push(e)}return r},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function et(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(G.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return g.call(t,e)>=0!==n})}var tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,nt=/<([\w:]+)/,rt=/<|&#?\w+;/,it=/<(?:script|style|link)/i,ot=/^(?:checkbox|radio)$/i,st=/checked\s*(?:[^=]|=\s*.checked.)/i,at=/^$|\/(?:java|ecma)script/i,ut=/^true\/(.*)/,lt=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ct={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ct.optgroup=ct.option,ct.tbody=ct.tfoot=ct.colgroup=ct.caption=ct.thead,ct.th=ct.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===undefined?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(mt(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&dt(mt(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++)1===e.nodeType&&(x.cleanData(mt(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!it.test(e)&&!ct[(nt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(tt,"<$1></$2>");try{for(;r>n;n++)t=this[n]||{},1===t.nodeType&&(x.cleanData(mt(t,!1)),t.innerHTML=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=f.apply([],e);var r,i,o,s,a,u,l=0,c=this.length,p=this,h=c-1,d=e[0],g=x.isFunction(d);if(g||!(1>=c||"string"!=typeof d||x.support.checkClone)&&st.test(d))return this.each(function(r){var i=p.eq(r);g&&(e[0]=d.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(r=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),i=r.firstChild,1===r.childNodes.length&&(r=i),i)){for(o=x.map(mt(r,"script"),ft),s=o.length;c>l;l++)a=r,l!==h&&(a=x.clone(a,!0,!0),s&&x.merge(o,mt(a,"script"))),t.call(this[l],a,l);if(s)for(u=o[o.length-1].ownerDocument,x.map(o,ht),l=0;s>l;l++)a=o[l],at.test(a.type||"")&&!q.access(a,"globalEval")&&x.contains(u,a)&&(a.src?x._evalUrl(a.src):x.globalEval(a.textContent.replace(lt,"")))}return this}}),x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=[],i=x(e),o=i.length-1,s=0;for(;o>=s;s++)n=s===o?this:this.clone(!0),x(i[s])[t](n),h.apply(r,n.get());return this.pushStack(r)}}),x.extend({clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=x.contains(e.ownerDocument,e);if(!(x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(s=mt(a),o=mt(e),r=0,i=o.length;i>r;r++)yt(o[r],s[r]);if(t)if(n)for(o=o||mt(e),s=s||mt(a),r=0,i=o.length;i>r;r++)gt(o[r],s[r]);else gt(e,a);return s=mt(a,"script"),s.length>0&&dt(s,!u&&mt(e,"script")),a},buildFragment:function(e,t,n,r){var i,o,s,a,u,l,c=0,p=e.length,f=t.createDocumentFragment(),h=[];for(;p>c;c++)if(i=e[c],i||0===i)if("object"===x.type(i))x.merge(h,i.nodeType?[i]:i);else if(rt.test(i)){o=o||f.appendChild(t.createElement("div")),s=(nt.exec(i)||["",""])[1].toLowerCase(),a=ct[s]||ct._default,o.innerHTML=a[1]+i.replace(tt,"<$1></$2>")+a[2],l=a[0];while(l--)o=o.lastChild;x.merge(h,o.childNodes),o=f.firstChild,o.textContent=""}else h.push(t.createTextNode(i));f.textContent="",c=0;while(i=h[c++])if((!r||-1===x.inArray(i,r))&&(u=x.contains(i.ownerDocument,i),o=mt(f.appendChild(i),"script"),u&&dt(o),n)){l=0;while(i=o[l++])at.test(i.type||"")&&n.push(i)}return f},cleanData:function(e){var t,n,r,i,o,s,a=x.event.special,u=0;for(;(n=e[u])!==undefined;u++){if(F.accepts(n)&&(o=n[q.expando],o&&(t=q.cache[o]))){if(r=Object.keys(t.events||{}),r.length)for(s=0;(i=r[s])!==undefined;s++)a[i]?x.event.remove(n,i):x.removeEvent(n,i,t.handle);q.cache[o]&&delete q.cache[o]}delete L.cache[n[L.expando]]}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}});function pt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function ft(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function ht(e){var t=ut.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function dt(e,t){var n=e.length,r=0;for(;n>r;r++)q.set(e[r],"globalEval",!t||q.get(t[r],"globalEval"))}function gt(e,t){var n,r,i,o,s,a,u,l;if(1===t.nodeType){if(q.hasData(e)&&(o=q.access(e),s=q.set(t,o),l=o.events)){delete s.handle,s.events={};for(i in l)for(n=0,r=l[i].length;r>n;n++)x.event.add(t,i,l[i][n])}L.hasData(e)&&(a=L.access(e),u=x.extend({},a),L.set(t,u))}}function mt(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return t===undefined||t&&x.nodeName(e,t)?x.merge([e],n):n}function yt(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ot.test(e.type)?t.checked=e.checked:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}x.fn.extend({wrapAll:function(e){var t;return x.isFunction(e)?this.each(function(t){x(this).wrapAll(e.call(this,t))}):(this[0]&&(t=x(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var vt,xt,bt=/^(none|table(?!-c[ea]).+)/,wt=/^margin/,Tt=RegExp("^("+b+")(.*)$","i"),Ct=RegExp("^("+b+")(?!px)[a-z%]+$","i"),kt=RegExp("^([+-])=("+b+")","i"),Nt={BODY:"block"},Et={position:"absolute",visibility:"hidden",display:"block"},St={letterSpacing:0,fontWeight:400},jt=["Top","Right","Bottom","Left"],Dt=["Webkit","O","Moz","ms"];function At(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Dt.length;while(i--)if(t=Dt[i]+n,t in e)return t;return r}function Lt(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function qt(t){return e.getComputedStyle(t,null)}function Ht(e,t){var n,r,i,o=[],s=0,a=e.length;for(;a>s;s++)r=e[s],r.style&&(o[s]=q.get(r,"olddisplay"),n=r.style.display,t?(o[s]||"none"!==n||(r.style.display=""),""===r.style.display&&Lt(r)&&(o[s]=q.access(r,"olddisplay",Rt(r.nodeName)))):o[s]||(i=Lt(r),(n&&"none"!==n||!i)&&q.set(r,"olddisplay",i?n:x.css(r,"display"))));for(s=0;a>s;s++)r=e[s],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[s]||"":"none"));return e}x.fn.extend({css:function(e,t){return x.access(this,function(e,t,n){var r,i,o={},s=0;if(x.isArray(t)){for(r=qt(e),i=t.length;i>s;s++)o[t[s]]=x.css(e,t[s],!1,r);return o}return n!==undefined?x.style(e,t,n):x.css(e,t)},e,t,arguments.length>1)},show:function(){return Ht(this,!0)},hide:function(){return Ht(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Lt(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=vt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=x.camelCase(t),u=e.style;return t=x.cssProps[a]||(x.cssProps[a]=At(u,a)),s=x.cssHooks[t]||x.cssHooks[a],n===undefined?s&&"get"in s&&(i=s.get(e,!1,r))!==undefined?i:u[t]:(o=typeof n,"string"===o&&(i=kt.exec(n))&&(n=(i[1]+1)*i[2]+parseFloat(x.css(e,t)),o="number"),null==n||"number"===o&&isNaN(n)||("number"!==o||x.cssNumber[a]||(n+="px"),x.support.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),s&&"set"in s&&(n=s.set(e,n,r))===undefined||(u[t]=n)),undefined)}},css:function(e,t,n,r){var i,o,s,a=x.camelCase(t);return t=x.cssProps[a]||(x.cssProps[a]=At(e.style,a)),s=x.cssHooks[t]||x.cssHooks[a],s&&"get"in s&&(i=s.get(e,!0,n)),i===undefined&&(i=vt(e,t,r)),"normal"===i&&t in St&&(i=St[t]),""===n||n?(o=parseFloat(i),n===!0||x.isNumeric(o)?o||0:i):i}}),vt=function(e,t,n){var r,i,o,s=n||qt(e),a=s?s.getPropertyValue(t)||s[t]:undefined,u=e.style;return s&&(""!==a||x.contains(e.ownerDocument,e)||(a=x.style(e,t)),Ct.test(a)&&wt.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=s.width,u.width=r,u.minWidth=i,u.maxWidth=o)),a};function Ot(e,t,n){var r=Tt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function Ft(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,s=0;for(;4>o;o+=2)"margin"===n&&(s+=x.css(e,n+jt[o],!0,i)),r?("content"===n&&(s-=x.css(e,"padding"+jt[o],!0,i)),"margin"!==n&&(s-=x.css(e,"border"+jt[o]+"Width",!0,i))):(s+=x.css(e,"padding"+jt[o],!0,i),"padding"!==n&&(s+=x.css(e,"border"+jt[o]+"Width",!0,i)));return s}function Pt(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=qt(e),s=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=vt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Ct.test(i))return i;r=s&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+Ft(e,t,n||(s?"border":"content"),r,o)+"px"}function Rt(e){var t=o,n=Nt[e];return n||(n=Mt(e,t),"none"!==n&&n||(xt=(xt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(xt[0].contentWindow||xt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=Mt(e,t),xt.detach()),Nt[e]=n),n}function Mt(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,t){x.cssHooks[t]={get:function(e,n,r){return n?0===e.offsetWidth&&bt.test(x.css(e,"display"))?x.swap(e,Et,function(){return Pt(e,t,r)}):Pt(e,t,r):undefined},set:function(e,n,r){var i=r&&qt(e);return Ot(e,n,r?Ft(e,t,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,t){return t?x.swap(e,{display:"inline-block"},vt,[e,"marginRight"]):undefined}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,t){x.cssHooks[t]={get:function(e,n){return n?(n=vt(e,t),Ct.test(n)?x(e).position()[t]+"px":n):undefined}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+jt[r]+t]=o[r]||o[r-2]||o[0];return i}},wt.test(e)||(x.cssHooks[e+t].set=Ot)});var Wt=/%20/g,$t=/\[\]$/,Bt=/\r?\n/g,It=/^(?:submit|button|image|reset|file)$/i,zt=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&zt.test(this.nodeName)&&!It.test(e)&&(this.checked||!ot.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(Bt,"\r\n")}}):{name:t.name,value:n.replace(Bt,"\r\n")}}).get()}}),x.param=function(e,t){var n,r=[],i=function(e,t){t=x.isFunction(t)?t():null==t?"":t,r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(t===undefined&&(t=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){i(this.name,this.value)});else for(n in e)_t(n,e[n],t,i);return r.join("&").replace(Wt,"+")};function _t(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||$t.test(e)?r(e,i):_t(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)_t(e+"["+i+"]",t[i],n,r)}x.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 contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)
-},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var Xt,Ut,Yt=x.now(),Vt=/\?/,Gt=/#.*$/,Jt=/([?&])_=[^&]*/,Qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Kt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Zt=/^(?:GET|HEAD)$/,en=/^\/\//,tn=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,nn=x.fn.load,rn={},on={},sn="*/".concat("*");try{Ut=i.href}catch(an){Ut=o.createElement("a"),Ut.href="",Ut=Ut.href}Xt=tn.exec(Ut.toLowerCase())||[];function un(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function ln(e,t,n,r){var i={},o=e===on;function s(a){var u;return i[a]=!0,x.each(e[a]||[],function(e,a){var l=a(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):undefined:(t.dataTypes.unshift(l),s(l),!1)}),u}return s(t.dataTypes[0])||!i["*"]&&s("*")}function cn(e,t){var n,r,i=x.ajaxSettings.flatOptions||{};for(n in t)t[n]!==undefined&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,t,n){if("string"!=typeof e&&nn)return nn.apply(this,arguments);var r,i,o,s=this,a=e.indexOf(" ");return a>=0&&(r=e.slice(a),e=e.slice(0,a)),x.isFunction(t)?(n=t,t=undefined):t&&"object"==typeof t&&(i="POST"),s.length>0&&x.ajax({url:e,type:i,dataType:"html",data:t}).done(function(e){o=arguments,s.html(r?x("<div>").append(x.parseHTML(e)).find(r):e)}).complete(n&&function(e,t){s.each(n,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ut,type:"GET",isLocal:Kt.test(Xt[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":sn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?cn(cn(e,x.ajaxSettings),t):cn(x.ajaxSettings,e)},ajaxPrefilter:un(rn),ajaxTransport:un(on),ajax:function(e,t){"object"==typeof e&&(t=e,e=undefined),t=t||{};var n,r,i,o,s,a,u,l,c=x.ajaxSetup({},t),p=c.context||c,f=c.context&&(p.nodeType||p.jquery)?x(p):x.event,h=x.Deferred(),d=x.Callbacks("once memory"),g=c.statusCode||{},m={},y={},v=0,b="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(2===v){if(!o){o={};while(t=Qt.exec(i))o[t[1].toLowerCase()]=t[2]}t=o[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===v?i:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return v||(e=y[n]=y[n]||e,m[e]=t),this},overrideMimeType:function(e){return v||(c.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>v)for(t in e)g[t]=[g[t],e[t]];else T.always(e[T.status]);return this},abort:function(e){var t=e||b;return n&&n.abort(t),k(0,t),this}};if(h.promise(T).complete=d.add,T.success=T.done,T.error=T.fail,c.url=((e||c.url||Ut)+"").replace(Gt,"").replace(en,Xt[1]+"//"),c.type=t.method||t.type||c.method||c.type,c.dataTypes=x.trim(c.dataType||"*").toLowerCase().match(w)||[""],null==c.crossDomain&&(a=tn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===Xt[1]&&a[2]===Xt[2]&&(a[3]||("http:"===a[1]?"80":"443"))===(Xt[3]||("http:"===Xt[1]?"80":"443")))),c.data&&c.processData&&"string"!=typeof c.data&&(c.data=x.param(c.data,c.traditional)),ln(rn,c,t,T),2===v)return T;u=c.global,u&&0===x.active++&&x.event.trigger("ajaxStart"),c.type=c.type.toUpperCase(),c.hasContent=!Zt.test(c.type),r=c.url,c.hasContent||(c.data&&(r=c.url+=(Vt.test(r)?"&":"?")+c.data,delete c.data),c.cache===!1&&(c.url=Jt.test(r)?r.replace(Jt,"$1_="+Yt++):r+(Vt.test(r)?"&":"?")+"_="+Yt++)),c.ifModified&&(x.lastModified[r]&&T.setRequestHeader("If-Modified-Since",x.lastModified[r]),x.etag[r]&&T.setRequestHeader("If-None-Match",x.etag[r])),(c.data&&c.hasContent&&c.contentType!==!1||t.contentType)&&T.setRequestHeader("Content-Type",c.contentType),T.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+("*"!==c.dataTypes[0]?", "+sn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)T.setRequestHeader(l,c.headers[l]);if(c.beforeSend&&(c.beforeSend.call(p,T,c)===!1||2===v))return T.abort();b="abort";for(l in{success:1,error:1,complete:1})T[l](c[l]);if(n=ln(on,c,t,T)){T.readyState=1,u&&f.trigger("ajaxSend",[T,c]),c.async&&c.timeout>0&&(s=setTimeout(function(){T.abort("timeout")},c.timeout));try{v=1,n.send(m,k)}catch(C){if(!(2>v))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,t,o,a){var l,m,y,b,w,C=t;2!==v&&(v=2,s&&clearTimeout(s),n=undefined,i=a||"",T.readyState=e>0?4:0,l=e>=200&&300>e||304===e,o&&(b=pn(c,T,o)),b=fn(c,b,T,l),l?(c.ifModified&&(w=T.getResponseHeader("Last-Modified"),w&&(x.lastModified[r]=w),w=T.getResponseHeader("etag"),w&&(x.etag[r]=w)),204===e||"HEAD"===c.type?C="nocontent":304===e?C="notmodified":(C=b.state,m=b.data,y=b.error,l=!y)):(y=C,(e||!C)&&(C="error",0>e&&(e=0))),T.status=e,T.statusText=(t||C)+"",l?h.resolveWith(p,[m,C,T]):h.rejectWith(p,[T,C,y]),T.statusCode(g),g=undefined,u&&f.trigger(l?"ajaxSuccess":"ajaxError",[T,c,l?m:y]),d.fireWith(p,[T,C]),u&&(f.trigger("ajaxComplete",[T,c]),--x.active||x.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,t){return x.get(e,undefined,t,"script")}}),x.each(["get","post"],function(e,t){x[t]=function(e,n,r,i){return x.isFunction(n)&&(i=i||r,r=n,n=undefined),x.ajax({url:e,type:t,dataType:i,data:n,success:r})}});function pn(e,t,n){var r,i,o,s,a=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),r===undefined&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in a)if(a[i]&&a[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}s||(s=i)}o=o||s}return o?(o!==u[0]&&u.unshift(o),n[o]):undefined}function fn(e,t,n,r){var i,o,s,a,u,l={},c=e.dataTypes.slice();if(c[1])for(s in e.converters)l[s.toLowerCase()]=e.converters[s];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(s=l[u+" "+o]||l["* "+o],!s)for(i in l)if(a=i.split(" "),a[1]===o&&(s=l[u+" "+a[0]]||l["* "+a[0]])){s===!0?s=l[i]:l[i]!==!0&&(o=a[0],c.unshift(a[1]));break}if(s!==!0)if(s&&e["throws"])t=s(t);else try{t=s(t)}catch(p){return{state:"parsererror",error:s?p:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===undefined&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),x.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=x("<script>").prop({async:!0,charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&i("error"===e.type?404:200,e.type)}),o.head.appendChild(t[0])},abort:function(){n&&n()}}}});var hn=[],dn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=hn.pop()||x.expando+"_"+Yt++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,s,a=t.jsonp!==!1&&(dn.test(t.url)?"url":"string"==typeof t.data&&!(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&dn.test(t.data)&&"data");return a||"jsonp"===t.dataTypes[0]?(i=t.jsonpCallback=x.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,a?t[a]=t[a].replace(dn,"$1"+i):t.jsonp!==!1&&(t.url+=(Vt.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return s||x.error(i+" was not called"),s[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){s=arguments},r.always(function(){e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,hn.push(i)),s&&x.isFunction(o)&&o(s[0]),s=o=undefined}),"script"):undefined}),x.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(e){}};var gn=x.ajaxSettings.xhr(),mn={0:200,1223:204},yn=0,vn={};e.ActiveXObject&&x(e).on("unload",function(){for(var e in vn)vn[e]();vn=undefined}),x.support.cors=!!gn&&"withCredentials"in gn,x.support.ajax=gn=!!gn,x.ajaxTransport(function(e){var t;return x.support.cors||gn&&!e.crossDomain?{send:function(n,r){var i,o,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(i in e.xhrFields)s[i]=e.xhrFields[i];e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest");for(i in n)s.setRequestHeader(i,n[i]);t=function(e){return function(){t&&(delete vn[o],t=s.onload=s.onerror=null,"abort"===e?s.abort():"error"===e?r(s.status||404,s.statusText):r(mn[s.status]||s.status,s.statusText,"string"==typeof s.responseText?{text:s.responseText}:undefined,s.getAllResponseHeaders()))}},s.onload=t(),s.onerror=t("error"),t=vn[o=yn++]=t("abort"),s.send(e.hasContent&&e.data||null)},abort:function(){t&&t()}}:undefined});var xn,bn,wn=/^(?:toggle|show|hide)$/,Tn=RegExp("^(?:([+-])=|)("+b+")([a-z%]*)$","i"),Cn=/queueHooks$/,kn=[An],Nn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Tn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),s=(x.cssNumber[e]||"px"!==o&&+r)&&Tn.exec(x.css(n.elem,e)),a=1,u=20;if(s&&s[3]!==o){o=o||s[3],i=i||[],s=+r||1;do a=a||".5",s/=a,x.style(n.elem,e,s+o);while(a!==(a=n.cur()/r)&&1!==a&&--u)}return i&&(s=n.start=+s||+r||0,n.unit=o,n.end=i[1]?s+(i[1]+1)*i[2]:+i[2]),n}]};function En(){return setTimeout(function(){xn=undefined}),xn=x.now()}function Sn(e,t,n){var r,i=(Nn[t]||[]).concat(Nn["*"]),o=0,s=i.length;for(;s>o;o++)if(r=i[o].call(n,t,e))return r}function jn(e,t,n){var r,i,o=0,s=kn.length,a=x.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=xn||En(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,s=0,u=l.tweens.length;for(;u>s;s++)l.tweens[s].run(o);return a.notifyWith(e,[l,o,n]),1>o&&u?n:(a.resolveWith(e,[l]),!1)},l=a.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:xn||En(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?a.resolveWith(e,[l,t]):a.rejectWith(e,[l,t]),this}}),c=l.props;for(Dn(c,l.opts.specialEasing);s>o;o++)if(r=kn[o].call(l,e,c,l.opts))return r;return x.map(c,Sn,l),x.isFunction(l.opts.start)&&l.opts.start.call(e,l),x.fx.timer(x.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function Dn(e,t){var n,r,i,o,s;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),s=x.cssHooks[r],s&&"expand"in s){o=s.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(jn,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Nn[n]=Nn[n]||[],Nn[n].unshift(t)},prefilter:function(e,t){t?kn.unshift(e):kn.push(e)}});function An(e,t,n){var r,i,o,s,a,u,l=this,c={},p=e.style,f=e.nodeType&&Lt(e),h=q.get(e,"fxshow");n.queue||(a=x._queueHooks(e,"fx"),null==a.unqueued&&(a.unqueued=0,u=a.empty.fire,a.empty.fire=function(){a.unqueued||u()}),a.unqueued++,l.always(function(){l.always(function(){a.unqueued--,x.queue(e,"fx").length||a.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(p.display="inline-block")),n.overflow&&(p.overflow="hidden",l.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],wn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show")){if("show"!==i||!h||h[r]===undefined)continue;f=!0}c[r]=h&&h[r]||x.style(e,r)}if(!x.isEmptyObject(c)){h?"hidden"in h&&(f=h.hidden):h=q.access(e,"fxshow",{}),o&&(h.hidden=!f),f?x(e).show():l.done(function(){x(e).hide()}),l.done(function(){var t;q.remove(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)s=Sn(f?h[r]:0,r,l),r in h||(h[r]=s.start,f&&(s.end=s.start,s.start="width"===r||"height"===r?1:0))}}function Ln(e,t,n,r,i){return new Ln.prototype.init(e,t,n,r,i)}x.Tween=Ln,Ln.prototype={constructor:Ln,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=Ln.propHooks[this.prop];return e&&e.get?e.get(this):Ln.propHooks._default.get(this)},run:function(e){var t,n=Ln.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ln.propHooks._default.set(this),this}},Ln.prototype.init.prototype=Ln.prototype,Ln.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Ln.propHooks.scrollTop=Ln.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(qn(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Lt).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),s=function(){var t=jn(this,x.extend({},e),o);(i||q.get(this,"finish"))&&t.stop(!0)};return s.finish=s,i||o.queue===!1?this.each(s):this.queue(o.queue,s)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=undefined),t&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=x.timers,s=q.get(this);if(i)s[i]&&s[i].stop&&r(s[i]);else for(i in s)s[i]&&s[i].stop&&Cn.test(i)&&r(s[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));(t||!n)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=q.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,s=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;s>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function qn(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=jt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:qn("show"),slideUp:qn("hide"),slideToggle:qn("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=Ln.prototype.init,x.fx.tick=function(){var e,t=x.timers,n=0;for(xn=x.now();t.length>n;n++)e=t[n],e()||t[n]!==e||t.splice(n--,1);t.length||x.fx.stop(),xn=undefined},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){bn||(bn=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(bn),bn=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===undefined?this:this.each(function(t){x.offset.setOffset(this,e,t)});var t,n,i=this[0],o={top:0,left:0},s=i&&i.ownerDocument;if(s)return t=s.documentElement,x.contains(t,i)?(typeof i.getBoundingClientRect!==r&&(o=i.getBoundingClientRect()),n=Hn(s),{top:o.top+n.pageYOffset-t.clientTop,left:o.left+n.pageXOffset-t.clientLeft}):o},x.offset={setOffset:function(e,t,n){var r,i,o,s,a,u,l,c=x.css(e,"position"),p=x(e),f={};"static"===c&&(e.style.position="relative"),a=p.offset(),o=x.css(e,"top"),u=x.css(e,"left"),l=("absolute"===c||"fixed"===c)&&(o+u).indexOf("auto")>-1,l?(r=p.position(),s=r.top,i=r.left):(s=parseFloat(o)||0,i=parseFloat(u)||0),x.isFunction(t)&&(t=t.call(e,n,a)),null!=t.top&&(f.top=t.top-a.top+s),null!=t.left&&(f.left=t.left-a.left+i),"using"in t?t.using.call(e,f):p.css(f)}},x.fn.extend({position:function(){if(this[0]){var e,t,n=this[0],r={top:0,left:0};return"fixed"===x.css(n,"position")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(r=e.offset()),r.top+=x.css(e[0],"borderTopWidth",!0),r.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-r.top-x.css(n,"marginTop",!0),left:t.left-r.left-x.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,n){var r="pageYOffset"===n;x.fn[t]=function(i){return x.access(this,function(t,i,o){var s=Hn(t);return o===undefined?s?s[n]:t[i]:(s?s.scrollTo(r?e.pageXOffset:o,r?o:e.pageYOffset):t[i]=o,undefined)},t,i,arguments.length,null)}});function Hn(e){return x.isWindow(e)?e:9===e.nodeType&&e.defaultView}x.each({Height:"height",Width:"width"},function(e,t){x.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){x.fn[r]=function(r,i){var o=arguments.length&&(n||"boolean"!=typeof r),s=n||(r===!0||i===!0?"margin":"border");return x.access(this,function(t,n,r){var i;return x.isWindow(t)?t.document.documentElement["client"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body["scroll"+e],i["scroll"+e],t.body["offset"+e],i["offset"+e],i["client"+e])):r===undefined?x.css(t,n,s):x.style(t,n,r,s)},t,o?r:undefined,o,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}),"object"==typeof e&&"object"==typeof e.document&&(e.jQuery=e.$=x)})(window);
diff --git a/samples/web/Sample/Tizen/Web App/Saythis/project/js/main.js b/samples/web/Sample/Tizen/Web App/Saythis/project/js/main.js
deleted file mode 100644 (file)
index 0e72a9e..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2012, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-var mySpeechObj = tizen.speech;
-
-$(document).ready(function()
-{
-   $('#speakButton').click(function() {
-
-            var text = $('#inputArea').val();
-            console.log(text);
-
-            if (text) {
-               mySpeechObj.vocalizeString(text);
-            }
-
-           $('#inputArea').val("");
-    });
-
-    $('#inputArea').keyup(function(event) {
-            if (event.keyCode === 13) {
-                    $('#speakButton').click();
-             }
-    });
-});
diff --git a/samples/web/Sample/Tizen/Web App/Saythis/project/packaging/saythis.changes b/samples/web/Sample/Tizen/Web App/Saythis/project/packaging/saythis.changes
deleted file mode 100644 (file)
index a91bce2..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-* Wed Sep 18 2013 brianjjones <brian.j.jones@intel.com> submit/tizen/20130916.234809@43b7ebe
-- New icon for application
-
-* Mon Sep 16 2013 brianjjones <brian.j.jones@intel.com> accepted/tizen/20130912.212624@78077f1
-- Fixing the css file so the application is oriented properly
-
-* Thu Sep 12 2013 brianjjones <brian.j.jones@intel.com> 1.0_branch@71f490d
-- Updating saythis to use the tizen.speech.vocalizeString() method instead of websockets
-- Making it so pressing enter says the words
-
-* Wed Sep 12 2012 bjones <None> submit/trunk/20120911.004456@9d140f6
-- Fixing spec and desktop files
-- Initial commit
-
-  
diff --git a/samples/web/Sample/Tizen/Web App/Saythis/project/packaging/saythis.spec b/samples/web/Sample/Tizen/Web App/Saythis/project/packaging/saythis.spec
deleted file mode 100644 (file)
index 713e06d..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-Name:       saythis
-Summary:    A HTML5 speech to text app
-Version:    0.0.1
-Release:    1
-Group:      Applications/System
-License:    Apache 2.0
-URL:        http://www.tizen.org2
-Source0:    %{name}-%{version}.tar.bz2
-BuildRequires:  zip
-BuildRequires:  desktop-file-utils
-Requires:   wrt-installer
-
-%description
-A HTML5 speech to text app
-
-%prep
-%setup -q -n %{name}-%{version}
-
-%build
-
-make wgtPkg
-
-#make %{?jobs:-j%jobs}
-
-%install
-rm -rf %{buildroot}
-%make_install
-
-%post
-if [ -f /opt/usr/apps/.preinstallWidgets/preinstallDone ]; then
-    wrt-installer -i /opt/usr/apps/.preinstallWidgets/saythis.wgt;
-fi
-
-%files
-%defattr(-,root,root,-)
-/opt/usr/apps/.preinstallWidgets/saythis.wgt
diff --git a/samples/web/Sample/Tizen/Web App/Saythis/project/saythis.png b/samples/web/Sample/Tizen/Web App/Saythis/project/saythis.png
deleted file mode 100644 (file)
index 44d08d2..0000000
Binary files a/samples/web/Sample/Tizen/Web App/Saythis/project/saythis.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/Saythis/saythis-snapshot.png b/samples/web/Sample/Tizen/Web App/Saythis/saythis-snapshot.png
deleted file mode 100644 (file)
index 56bea14..0000000
Binary files a/samples/web/Sample/Tizen/Web App/Saythis/saythis-snapshot.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/Saythis/tizen-app-template.xml b/samples/web/Sample/Tizen/Web App/Saythis/tizen-app-template.xml
deleted file mode 100644 (file)
index d5a3d7d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<tizen-app-template xmlns="http://www.tizen.org/tizen-app-template" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" template-version="" sdk-version="" icon32="tizen_32.png" icon64="tizen_64.png" xsi:schemaLocation="http://www.tizen.org/tizen-app-template tizen-app-template.xsd ">
-    <template-name>Saythis</template-name>
-    <widget-type>TIZEN</widget-type>
-    <description-file-name>description.xml</description-file-name>
-</tizen-app-template>
diff --git a/samples/web/Sample/Tizen/Web App/Saythis/tizen_32.png b/samples/web/Sample/Tizen/Web App/Saythis/tizen_32.png
deleted file mode 100644 (file)
index a37c33e..0000000
Binary files a/samples/web/Sample/Tizen/Web App/Saythis/tizen_32.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/Saythis/tizen_64.png b/samples/web/Sample/Tizen/Web App/Saythis/tizen_64.png
deleted file mode 100644 (file)
index f80f2ec..0000000
Binary files a/samples/web/Sample/Tizen/Web App/Saythis/tizen_64.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/description.xml b/samples/web/Sample/Tizen/Web App/SettingsApp/description.xml
deleted file mode 100644 (file)
index 5bcebad..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<?xml-stylesheet type="text/xsl" href="description.xsl"?>\r
-<Overview version="1.0">\r
-  <SampleName>SettingsApp</SampleName>\r
-  <SampleVersion>1.0.0</SampleVersion>\r
-  <Preview>settingsapp-snapshot.png</Preview>\r
-  <Description>\r
-         A sample application demonstrating the tizen device API usage.\r
-  </Description>\r
-</Overview>\r
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/description.xsl b/samples/web/Sample/Tizen/Web App/SettingsApp/description.xsl
deleted file mode 100644 (file)
index 1f4f57f..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 
-    This file provides a functionality to show template's description.xml in the project wizard.
-    Don't delete or move this file.
- -->
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-  <xsl:template match="/">
-    <html>
-      <head>
-        <style type="text/css">
-          html,body {
-          font-family:Arial;
-          margin: 0px;
-          }
-          td
-          {
-          font-size:13px;
-          }
-          .samplename
-          {
-          font-size:16px;
-          color:#ffffff;
-          height:26px;
-          background-color:#6d96ac;
-          }
-          .category
-          {
-          font-size:16px;
-          color:#ffffff;
-          height:30px;
-          background-color:#6d96ac;
-          }
-          .contents
-          {
-          padding: 6px 10px 14px 10px;
-          }
-          table#widgets td
-          {
-          border: solid 1px #6d96ac;
-          border-collapse: collapse;
-          }
-          .widgetname
-          {
-          font-weight: bold;
-          text-align: center;
-          width: 20%;
-          word-break:break-all;
-          }
-          table#references td
-          {
-          width: 100%;
-          border: 0px;
-          border-spacing: 0px;
-          padding: 5px;
-          }
-          .refname
-          {
-          width: 100%;
-          font-weight: bold;
-          }
-        </style>
-      </head>
-      <body>
-        <table width="400px" border="0" cellspacing="0">
-          <tr>
-            <td class="samplename" align="center">
-              <xsl:value-of select="Overview/SampleName"/>
-              <xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>
-                         <!--
-              <xsl:value-of select="Overview/SampleVersion"/>
-                         -->
-            </td>
-          </tr>
-          <tr bgcolor="#FFFFFF">
-            <td class="contents">
-                         <strong>Type</strong>: JavaScript
-                         <p>
-              <xsl:value-of select="Overview/Description"/>
-                         </p>
-            </td>
-          </tr>
-          <tr>
-            <td align="center" bgcolor="#FFFFFF" height="260px">
-              <img>
-                <xsl:attribute name="src">
-                  <xsl:value-of select="Overview/Preview"/>
-                </xsl:attribute>
-              </img>
-            </td>
-          </tr>
-        </table>
-      </body>
-    </html>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/LICENSE.Apache-2.0 b/samples/web/Sample/Tizen/Web App/SettingsApp/project/LICENSE.Apache-2.0
deleted file mode 100755 (executable)
index c720c61..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!) The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/Makefile b/samples/web/Sample/Tizen/Web App/SettingsApp/project/Makefile
deleted file mode 100644 (file)
index 4b911c0..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-PROJECT = Settings
-
-VERSION := 0.0.2
-PACKAGE = $(PROJECT)-$(VERSION)
-
-INSTALL_DIR = ${DESTDIR}/opt/usr/apps/.preinstallWidgets
-
-FILES = js images css index.html manifest.json config.xml *.png
-
-all:
-       @echo "Nothing to build"
-
-wgtPkg:
-       zip -r $(PROJECT).wgt $(FILES)
-
-install:
-       @echo "Installing Settings, stand by..."
-       mkdir -p $(INSTALL_DIR)/
-       cp $(PROJECT).wgt $(INSTALL_DIR)/
-
-dist:
-       tar czf ../$(PACKAGE).tar.bz2 . 
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/Settings.desktop b/samples/web/Sample/Tizen/Web App/SettingsApp/project/Settings.desktop
deleted file mode 100644 (file)
index 512a47e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-[Desktop Entry]
-Version=0.0.2
-Name=Settings
-Comment=System Settings Application
-GenericName=Settings
-Exec=chromium-browser --enable-plugins --enable-extensions --enable-user-scripts --enable-printing --enable-sync --use-gl=egl --ignore-gpu-blacklist --auto-ssl-client-auth %U --app-id=ODBQpKvkS1 --load-extension=/usr/share/Settings/ --no-first-run
-Terminal=false
-X-MultipleArgs=false
-Type=Application
-Icon=Settings
-StartupWMClass=Chromium
-StartupNotify=true
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/Settings.png b/samples/web/Sample/Tizen/Web App/SettingsApp/project/Settings.png
deleted file mode 100644 (file)
index 468378e..0000000
Binary files a/samples/web/Sample/Tizen/Web App/SettingsApp/project/Settings.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/config.xml b/samples/web/Sample/Tizen/Web App/SettingsApp/project/config.xml
deleted file mode 100644 (file)
index 3bb2d9c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/Settings" version="1.0.0" viewmodes="maximized">
-    <tizen:application id="ODBQpKvkS1.Settings" package="ODBQpKvkS1" required_version="2.1"/>
-    <content src="index.html"/>
-    <icon src="Settings.png"/>
-    <name>Settings</name>
-    <tizen:privilege name="http://tizen.org/privilege/bluetooth.admin"/>
-    <tizen:privilege name="http://tizen.org/privilege/bluetooth.gap"/>
-</widget>
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/ajax-loader.gif b/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/ajax-loader.gif
deleted file mode 100644 (file)
index fd1a189..0000000
Binary files a/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/ajax-loader.gif and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/icons-18-black.png b/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/icons-18-black.png
deleted file mode 100644 (file)
index ce1b758..0000000
Binary files a/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/icons-18-black.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/icons-18-white.png b/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/icons-18-white.png
deleted file mode 100644 (file)
index 1ab0127..0000000
Binary files a/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/icons-18-white.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/icons-36-black.png b/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/icons-36-black.png
deleted file mode 100644 (file)
index 1a59d7c..0000000
Binary files a/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/icons-36-black.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/icons-36-white.png b/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/icons-36-white.png
deleted file mode 100644 (file)
index 5647bdc..0000000
Binary files a/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/images/icons-36-white.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/jquery.mobile-1.3.1.css b/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/jquery.mobile-1.3.1.css
deleted file mode 100644 (file)
index d2d04af..0000000
+++ /dev/null
@@ -1,3366 +0,0 @@
-/*
-* jQuery Mobile 1.3.1
-* Git HEAD hash: 74b4bec049fd93e4fe40205e6157de16eb64eb46 <> Date: Mon Apr 8 2013 19:41:28 UTC
-* http://jquerymobile.com
-*
-* Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
-* Released under the MIT license.
-* http://jquery.org/license
-*
-*/
-
-
-/* Swatches */
-/* A
------------------------------------------------------------------------------------------------------------*/
-.ui-bar-a {
-       border: 1px solid               #333 /*{a-bar-border}*/;
-       background:                     #111 /*{a-bar-background-color}*/;
-       color:                                  #fff /*{a-bar-color}*/;
-       font-weight: bold;
-       text-shadow: 0 /*{a-bar-shadow-x}*/ -1px /*{a-bar-shadow-y}*/ 0 /*{a-bar-shadow-radius}*/ #000 /*{a-bar-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #3c3c3c /*{a-bar-background-start}*/), to( #111 /*{a-bar-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/);
-}
-.ui-bar-a,
-.ui-bar-a input,
-.ui-bar-a select,
-.ui-bar-a textarea,
-.ui-bar-a button {
-       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
-}
-.ui-bar-a .ui-link-inherit {
-       color: #fff /*{a-bar-color}*/;
-}
-.ui-bar-a a.ui-link {
-       color: #7cc4e7 /*{a-bar-link-color}*/;
-       font-weight: bold;
-}
-.ui-bar-a a.ui-link:visited {
-    color: #2489ce /*{a-bar-link-visited}*/;
-}
-.ui-bar-a a.ui-link:hover {
-       color: #2489ce /*{a-bar-link-hover}*/;
-}
-.ui-bar-a a.ui-link:active {
-       color: #2489ce /*{a-bar-link-active}*/;
-}
-.ui-body-a,
-.ui-overlay-a {
-       border: 1px solid               #444 /*{a-body-border}*/;
-       background:                     #222 /*{a-body-background-color}*/;
-       color:                                  #fff /*{a-body-color}*/;
-       text-shadow: 0 /*{a-body-shadow-x}*/ 1px /*{a-body-shadow-y}*/ 0 /*{a-body-shadow-radius}*/ #111 /*{a-body-shadow-color}*/;
-       font-weight: normal;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-body-background-start}*/), to( #222 /*{a-body-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/);       
-}
-.ui-overlay-a {
-       background-image: none;
-       border-width: 0;
-}
-.ui-body-a,
-.ui-body-a input,
-.ui-body-a select,
-.ui-body-a textarea,
-.ui-body-a button {
-       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
-}
-.ui-body-a .ui-link-inherit {
-       color:  #fff /*{a-body-color}*/;
-}
-.ui-body-a .ui-link {
-       color: #2489ce /*{a-body-link-color}*/;
-       font-weight: bold;
-}
-.ui-body-a .ui-link:visited {
-    color: #2489ce /*{a-body-link-visited}*/;
-}
-.ui-body-a .ui-link:hover {
-       color: #2489ce /*{a-body-link-hover}*/;
-}
-.ui-body-a .ui-link:active {
-       color: #2489ce /*{a-body-link-active}*/;
-}
-.ui-btn-up-a {
-       border: 1px solid               #111 /*{a-bup-border}*/;
-       background:                     #333 /*{a-bup-background-color}*/;
-       font-weight: bold;
-       color:                                  #fff /*{a-bup-color}*/;
-       text-shadow: 0 /*{a-bup-shadow-x}*/ 1px /*{a-bup-shadow-y}*/ 0 /*{a-bup-shadow-radius}*/ #111 /*{a-bup-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-bup-background-start}*/), to( #2d2d2d /*{a-bup-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/);
-}
-.ui-btn-up-a:visited,
-.ui-btn-up-a a.ui-link-inherit {
-       color:                                  #fff /*{a-bup-color}*/;
-}
-.ui-btn-hover-a {
-       border: 1px solid               #000 /*{a-bhover-border}*/;
-       background:                     #444 /*{a-bhover-background-color}*/;
-       font-weight: bold;
-       color:                                  #fff /*{a-bhover-color}*/;
-       text-shadow: 0 /*{a-bhover-shadow-x}*/ 1px /*{a-bhover-shadow-y}*/ 0 /*{a-bhover-shadow-radius}*/ #111 /*{a-bhover-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #555 /*{a-bhover-background-start}*/), to( #383838 /*{a-bhover-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/);
-}
-.ui-btn-hover-a:visited,
-.ui-btn-hover-a:hover,
-.ui-btn-hover-a a.ui-link-inherit {
-       color:                                  #fff /*{a-bhover-color}*/;
-}
-.ui-btn-down-a {
-       border: 1px solid               #000 /*{a-bdown-border}*/;
-       background:                     #222 /*{a-bdown-background-color}*/;
-       font-weight: bold;
-       color:                                  #fff /*{a-bdown-color}*/;
-       text-shadow: 0 /*{a-bdown-shadow-x}*/ 1px /*{a-bdown-shadow-y}*/ 0 /*{a-bdown-shadow-radius}*/ #111 /*{a-bdown-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #202020 /*{a-bdown-background-start}*/), to( #2c2c2c /*{a-bdown-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/);
-}
-.ui-btn-down-a:visited,
-.ui-btn-down-a:hover,
-.ui-btn-down-a a.ui-link-inherit {
-       color:                                  #fff /*{a-bdown-color}*/;
-}
-.ui-btn-up-a,
-.ui-btn-hover-a,
-.ui-btn-down-a {
-       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
-       text-decoration: none;
-}
-/* B
------------------------------------------------------------------------------------------------------------*/
-.ui-bar-b {
-       border: 1px solid               #456f9a /*{b-bar-border}*/;
-       background:                     #5e87b0 /*{b-bar-background-color}*/;
-       color:                                  #fff /*{b-bar-color}*/;
-       font-weight: bold;
-       text-shadow: 0 /*{b-bar-shadow-x}*/ 1px /*{b-bar-shadow-y}*/ 0 /*{b-bar-shadow-radius}*/ #3e6790 /*{b-bar-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bar-background-start}*/), to( #497bae /*{b-bar-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/);
-}
-.ui-bar-b,
-.ui-bar-b input,
-.ui-bar-b select,
-.ui-bar-b textarea,
-.ui-bar-b button {
-       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
-}
-.ui-bar-b .ui-link-inherit {
-       color:  #fff /*{b-bar-color}*/;
-}
-.ui-bar-b a.ui-link {
-       color: #ddf0f8 /*{b-bar-link-color}*/;
-       font-weight: bold;
-}
-.ui-bar-b a.ui-link:visited {
-    color: #ddf0f8 /*{b-bar-link-visited}*/;
-}
-.ui-bar-b a.ui-link:hover {
-       color: #ddf0f8 /*{b-bar-link-hover}*/;
-}
-.ui-bar-b a.ui-link:active {
-       color: #ddf0f8 /*{b-bar-link-active}*/;
-}
-.ui-body-b,
-.ui-overlay-b {
-       border: 1px solid               #999 /*{b-body-border}*/;
-       background:                     #f3f3f3 /*{b-body-background-color}*/;
-       color:                                  #222 /*{b-body-color}*/;
-       text-shadow: 0 /*{b-body-shadow-x}*/ 1px /*{b-body-shadow-y}*/ 0 /*{b-body-shadow-radius}*/ #fff /*{b-body-shadow-color}*/;
-       font-weight: normal;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{b-body-background-start}*/), to( #ccc /*{b-body-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/);
-}
-.ui-overlay-b {
-       background-image: none;
-       border-width: 0;
-}
-.ui-body-b,
-.ui-body-b input,
-.ui-body-b select,
-.ui-body-b textarea,
-.ui-body-b button {
-       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
-}
-.ui-body-b .ui-link-inherit {
-       color:  #333 /*{b-body-color}*/;
-}
-.ui-body-b .ui-link {
-       color: #2489ce /*{b-body-link-color}*/;
-       font-weight: bold;
-}
-.ui-body-b .ui-link:visited {
-    color: #2489ce /*{b-body-link-visited}*/;
-}
-.ui-body-b .ui-link:hover {
-       color: #2489ce /*{b-body-link-hover}*/;
-}
-.ui-body-b .ui-link:active {
-       color: #2489ce /*{b-body-link-active}*/;
-}
-.ui-btn-up-b {
-       border: 1px solid               #044062 /*{b-bup-border}*/;
-       background:                     #396b9e /*{b-bup-background-color}*/;
-       font-weight: bold;
-       color:                                  #fff /*{b-bup-color}*/;
-       text-shadow: 0 /*{b-bup-shadow-x}*/ 1px /*{b-bup-shadow-y}*/ 0 /*{b-bup-shadow-radius}*/ #194b7e /*{b-bup-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #5f9cc5 /*{b-bup-background-start}*/), to( #396b9e /*{b-bup-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/);
-}
-.ui-btn-up-b:visited,
-.ui-btn-up-b a.ui-link-inherit {
-       color:                                  #fff /*{b-bup-color}*/;
-}
-.ui-btn-hover-b {
-       border: 1px solid               #00415e /*{b-bhover-border}*/;
-       background:                     #4b88b6 /*{b-bhover-background-color}*/;
-       font-weight: bold;
-       color:                                  #fff /*{b-bhover-color}*/;
-       text-shadow: 0 /*{b-bhover-shadow-x}*/ 1px /*{b-bhover-shadow-y}*/ 0 /*{b-bhover-shadow-radius}*/ #194b7e /*{b-bhover-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bhover-background-start}*/), to( #4272a4 /*{b-bhover-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/);
-}
-.ui-btn-hover-b:visited,
-.ui-btn-hover-b:hover,
-.ui-btn-hover-b a.ui-link-inherit {
-       color:                                  #fff /*{b-bhover-color}*/;
-}
-.ui-btn-down-b {
-       border: 1px solid               #225377 /*{b-bdown-border}*/;
-       background:                     #4e89c5 /*{b-bdown-background-color}*/;
-       font-weight: bold;
-       color:                                  #fff /*{b-bdown-color}*/;
-       text-shadow: 0 /*{b-bdown-shadow-x}*/ 1px /*{b-bdown-shadow-y}*/ 0 /*{b-bdown-shadow-radius}*/ #194b7e /*{b-bdown-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #295b8e /*{b-bdown-background-start}*/), to( #3e79b5 /*{b-bdown-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/);
-}
-.ui-btn-down-b:visited,
-.ui-btn-down-b:hover,
-.ui-btn-down-b a.ui-link-inherit {
-       color:                                  #fff /*{b-bdown-color}*/;
-}
-.ui-btn-up-b,
-.ui-btn-hover-b,
-.ui-btn-down-b {
-       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
-       text-decoration: none;
-}
-/* C
------------------------------------------------------------------------------------------------------------*/
-.ui-bar-c {
-       border: 1px solid               #b3b3b3 /*{c-bar-border}*/;
-       background:                     #eee /*{c-bar-background-color}*/;
-       color:                                  #3e3e3e /*{c-bar-color}*/;
-       font-weight: bold;
-       text-shadow: 0 /*{c-bar-shadow-x}*/ 1px /*{c-bar-shadow-y}*/ 0 /*{c-bar-shadow-radius}*/        #fff /*{c-bar-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #f0f0f0 /*{c-bar-background-start}*/), to( #ddd /*{c-bar-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/);
-}
-.ui-bar-c .ui-link-inherit {
-       color:  #3e3e3e /*{c-bar-color}*/;
-}
-.ui-bar-c a.ui-link {
-       color: #7cc4e7 /*{c-bar-link-color}*/;
-       font-weight: bold;
-}
-.ui-bar-c a.ui-link:visited {
-    color: #2489ce /*{c-bar-link-visited}*/;
-}
-.ui-bar-c a.ui-link:hover {
-       color: #2489ce /*{c-bar-link-hover}*/;
-}
-.ui-bar-c a.ui-link:active {
-       color: #2489ce /*{c-bar-link-active}*/;
-}
-.ui-bar-c,
-.ui-bar-c input,
-.ui-bar-c select,
-.ui-bar-c textarea,
-.ui-bar-c button {
-       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
-}
-.ui-body-c,
-.ui-overlay-c {
-       border: 1px solid               #aaa /*{c-body-border}*/;
-       color:                                  #333 /*{c-body-color}*/;
-       text-shadow: 0 /*{c-body-shadow-x}*/ 1px /*{c-body-shadow-y}*/ 0 /*{c-body-shadow-radius}*/ #fff /*{c-body-shadow-color}*/;
-       background:                     #f9f9f9 /*{c-body-background-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #f9f9f9 /*{c-body-background-start}*/), to( #eee /*{c-body-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/);
-}
-.ui-overlay-c {
-       background-image: none;
-       border-width: 0;
-}
-.ui-body-c,
-.ui-body-c input,
-.ui-body-c select,
-.ui-body-c textarea,
-.ui-body-c button {
-       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
-}
-.ui-body-c .ui-link-inherit {
-       color:  #333 /*{c-body-color}*/;
-}
-.ui-body-c .ui-link {
-       color: #2489ce /*{c-body-link-color}*/;
-       font-weight: bold;
-}
-.ui-body-c .ui-link:visited {
-    color: #2489ce /*{c-body-link-visited}*/;
-}
-.ui-body-c .ui-link:hover {
-       color: #2489ce /*{c-body-link-hover}*/;
-}
-.ui-body-c .ui-link:active {
-       color: #2489ce /*{c-body-link-active}*/;
-}
-.ui-btn-up-c {
-       border: 1px solid               #ccc /*{c-bup-border}*/;
-       background:                     #eee /*{c-bup-background-color}*/;
-       font-weight: bold;
-       color:                                  #222 /*{c-bup-color}*/;
-       text-shadow: 0 /*{c-bup-shadow-x}*/ 1px /*{c-bup-shadow-y}*/ 0 /*{c-bup-shadow-radius}*/ #fff /*{c-bup-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #fff /*{c-bup-background-start}*/), to( #f1f1f1 /*{c-bup-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/);
-}
-.ui-btn-up-c:visited,
-.ui-btn-up-c a.ui-link-inherit {
-       color:                                  #2f3e46 /*{c-bup-color}*/;
-}
-.ui-btn-hover-c {
-       border: 1px solid               #bbb /*{c-bhover-border}*/;
-       background:                     #dfdfdf /*{c-bhover-background-color}*/;
-       font-weight: bold;
-       color:                                  #222 /*{c-bhover-color}*/;
-       text-shadow: 0 /*{c-bhover-shadow-x}*/ 1px /*{c-bhover-shadow-y}*/ 0 /*{c-bhover-shadow-radius}*/ #fff /*{c-bhover-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #f6f6f6 /*{c-bhover-background-start}*/), to( #e0e0e0 /*{c-bhover-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/);
-}
-.ui-btn-hover-c:visited,
-.ui-btn-hover-c:hover,
-.ui-btn-hover-c a.ui-link-inherit {
-       color:                                  #2f3e46 /*{c-bhover-color}*/;
-}
-.ui-btn-down-c {
-       border: 1px solid               #bbb /*{c-bdown-border}*/;
-       background:                     #d6d6d6 /*{c-bdown-background-color}*/;
-       font-weight: bold;
-       color:                                  #222 /*{c-bdown-color}*/;
-       text-shadow: 0 /*{c-bdown-shadow-x}*/ 1px /*{c-bdown-shadow-y}*/ 0 /*{c-bdown-shadow-radius}*/ #fff /*{c-bdown-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #d0d0d0 /*{c-bdown-background-start}*/), to( #dfdfdf /*{c-bdown-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/);
-}
-.ui-btn-down-c:visited,
-.ui-btn-down-c:hover,
-.ui-btn-down-c a.ui-link-inherit {
-       color:                                  #2f3e46 /*{c-bdown-color}*/;
-}
-.ui-btn-up-c,
-.ui-btn-hover-c,
-.ui-btn-down-c {
-       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
-       text-decoration: none;
-}
-/* D
------------------------------------------------------------------------------------------------------------*/
-.ui-bar-d {
-       border: 1px solid               #bbb /*{d-bar-border}*/;
-       background:                     #bbb /*{d-bar-background-color}*/;
-       color:                                  #333 /*{d-bar-color}*/;
-       font-weight: bold;
-       text-shadow: 0 /*{d-bar-shadow-x}*/ 1px /*{d-bar-shadow-y}*/ 0 /*{d-bar-shadow-radius}*/ #eee /*{d-bar-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{d-bar-background-start}*/), to( #bbb /*{d-bar-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/);
-}
-.ui-bar-d,
-.ui-bar-d input,
-.ui-bar-d select,
-.ui-bar-d textarea,
-.ui-bar-d button {
-       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
-}
-.ui-bar-d .ui-link-inherit {
-       color:  #333 /*{d-bar-color}*/;
-}
-.ui-bar-d a.ui-link {
-       color: #2489ce /*{d-bar-link-color}*/;
-       font-weight: bold;
-}
-.ui-bar-d a.ui-link:visited {
-    color: #2489ce /*{d-bar-link-visited}*/;
-}
-.ui-bar-d a.ui-link:hover {
-       color: #2489ce /*{d-bar-link-hover}*/;
-}
-.ui-bar-d a.ui-link:active {
-       color: #2489ce /*{d-bar-link-active}*/;
-}
-.ui-body-d,
-.ui-overlay-d {
-       border: 1px solid               #bbb /*{d-body-border}*/;
-       color:                                  #333 /*{d-body-color}*/;
-       text-shadow: 0 /*{d-body-shadow-x}*/ 1px /*{d-body-shadow-y}*/ 0 /*{d-body-shadow-radius}*/     #fff /*{d-body-shadow-color}*/;
-       background:                     #fff /*{d-body-background-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #fff /*{d-body-background-start}*/), to( #fff /*{d-body-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/);
-}
-.ui-overlay-d {
-       background-image: none;
-       border-width: 0;
-}
-.ui-body-d,
-.ui-body-d input,
-.ui-body-d select,
-.ui-body-d textarea,
-.ui-body-d button {
-       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
-}
-.ui-body-d .ui-link-inherit {
-       color:  #333 /*{d-body-color}*/;
-}
-.ui-body-d .ui-link {
-       color: #2489ce /*{d-body-link-color}*/;
-       font-weight: bold;
-}
-.ui-body-d .ui-link:visited {
-    color: #2489ce /*{d-body-link-visited}*/;
-}
-.ui-body-d .ui-link:hover {
-       color: #2489ce /*{d-body-link-hover}*/;
-}
-.ui-body-d .ui-link:active {
-       color: #2489ce /*{d-body-link-active}*/;
-}
-.ui-btn-up-d {
-       border: 1px solid               #bbb /*{d-bup-border}*/;
-       background:                     #fff /*{d-bup-background-color}*/;
-       font-weight: bold;
-       color:                                  #333 /*{d-bup-color}*/;
-       text-shadow: 0 /*{d-bup-shadow-x}*/ 1px /*{d-bup-shadow-y}*/ 0 /*{d-bup-shadow-radius}*/ #fff /*{d-bup-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #fafafa /*{d-bup-background-start}*/), to( #f6f6f6 /*{d-bup-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/);
-}
-.ui-btn-up-d:visited,
-.ui-btn-up-d a.ui-link-inherit {
-       color:                                  #333 /*{d-bup-color}*/;
-}
-.ui-btn-hover-d {
-       border: 1px solid               #aaa /*{d-bhover-border}*/;
-       background:                     #eee /*{d-bhover-background-color}*/;
-       font-weight: bold;
-       color:                                  #333 /*{d-bhover-color}*/;
-       cursor: pointer;
-       text-shadow: 0 /*{d-bhover-shadow-x}*/ 1px /*{d-bhover-shadow-y}*/ 0 /*{d-bhover-shadow-radius}*/       #fff /*{d-bhover-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #eee /*{d-bhover-background-start}*/), to( #fff /*{d-bhover-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/);
-}
-.ui-btn-hover-d:visited,
-.ui-btn-hover-d:hover,
-.ui-btn-hover-d a.ui-link-inherit {
-       color:                                  #333 /*{d-bhover-color}*/;
-}
-.ui-btn-down-d {
-       border: 1px solid               #aaa /*{d-bdown-border}*/;
-       background:                     #eee /*{d-bdown-background-color}*/;
-       font-weight: bold;
-       color:                                  #333 /*{d-bdown-color}*/;
-       text-shadow: 0 /*{d-bdown-shadow-x}*/ 1px /*{d-bdown-shadow-y}*/ 0 /*{d-bdown-shadow-radius}*/  #fff /*{d-bdown-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #e5e5e5 /*{d-bdown-background-start}*/), to( #f2f2f2 /*{d-bdown-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/);
-}
-.ui-btn-down-d:visited,
-.ui-btn-down-d:hover,
-.ui-btn-down-d a.ui-link-inherit {
-       color:                                  #333 /*{d-bdown-color}*/;
-}
-.ui-btn-up-d,
-.ui-btn-hover-d,
-.ui-btn-down-d {
-       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
-       text-decoration: none;
-}
-/* E
------------------------------------------------------------------------------------------------------------*/
-.ui-bar-e {
-       border: 1px solid               #f7c942 /*{e-bar-border}*/;
-       background:                     #fadb4e /*{e-bar-background-color}*/;
-       color:                                  #333 /*{e-bar-color}*/;
-       font-weight: bold;
-       text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/        #fff /*{e-bar-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/);
-}
-.ui-bar-e,
-.ui-bar-e input,
-.ui-bar-e select,
-.ui-bar-e textarea,
-.ui-bar-e button {
-       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
-}
-.ui-bar-e .ui-link-inherit {
-       color:  #333 /*{e-bar-color}*/;
-}
-.ui-bar-e a.ui-link {
-       color: #2489ce /*{e-bar-link-color}*/;
-       font-weight: bold;
-}
-.ui-bar-e a.ui-link:visited {
-    color: #2489ce /*{e-bar-link-visited}*/;
-}
-.ui-bar-e a.ui-link:hover {
-       color: #2489ce /*{e-bar-link-hover}*/;
-}
-.ui-bar-e a.ui-link:active {
-       color: #2489ce /*{e-bar-link-active}*/;
-}
-.ui-body-e,
-.ui-overlay-e {
-       border: 1px solid               #f7c942 /*{e-body-border}*/;
-       color:                                  #222 /*{e-body-color}*/;
-       text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/     #fff /*{e-body-shadow-color}*/;
-       background:                     #fff9df /*{e-body-background-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/);
-}
-.ui-overlay-e {
-       background-image: none;
-       border-width: 0;
-}
-.ui-body-e,
-.ui-body-e input,
-.ui-body-e select,
-.ui-body-e textarea,
-.ui-body-e button {
-       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
-}
-.ui-body-e .ui-link-inherit {
-       color:  #222 /*{e-body-color}*/;
-}
-.ui-body-e .ui-link {
-       color: #2489ce /*{e-body-link-color}*/;
-       font-weight: bold;
-}
-.ui-body-e .ui-link:visited {
-    color: #2489ce /*{e-body-link-visited}*/;
-}
-.ui-body-e .ui-link:hover {
-       color: #2489ce /*{e-body-link-hover}*/;
-}
-.ui-body-e .ui-link:active {
-       color: #2489ce /*{e-body-link-active}*/;
-}
-.ui-btn-up-e {
-       border: 1px solid               #f4c63f /*{e-bup-border}*/;
-       background:                     #fadb4e /*{e-bup-background-color}*/;
-       font-weight: bold;
-       color:                                  #222 /*{e-bup-color}*/;
-       text-shadow: 0 /*{e-bup-shadow-x}*/ 1px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/        #fff /*{e-bup-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #ffefaa /*{e-bup-background-start}*/), to( #ffe155 /*{e-bup-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/);
-}
-.ui-btn-up-e:visited,
-.ui-btn-up-e a.ui-link-inherit {
-       color:                                  #222 /*{e-bup-color}*/;
-}
-.ui-btn-hover-e {
-       border: 1px solid               #f2c43d /*{e-bhover-border}*/;
-       background:                     #fbe26f /*{e-bhover-background-color}*/;
-       font-weight: bold;
-       color:                                  #111 /*{e-bhover-color}*/;
-       text-shadow: 0 /*{e-bhover-shadow-x}*/ 1px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/       #fff /*{e-bhover-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #fff5ba /*{e-bhover-background-start}*/), to( #fbdd52 /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/);
-}
-.ui-btn-hover-e:visited,
-.ui-btn-hover-e:hover,
-.ui-btn-hover-e a.ui-link-inherit {
-       color:                                  #333 /*{e-bhover-color}*/;
-}
-.ui-btn-down-e {
-       border: 1px solid               #f2c43d /*{e-bdown-border}*/;
-       background:                     #fceda7 /*{e-bdown-background-color}*/;
-       font-weight: bold;
-       color:                                  #111 /*{e-bdown-color}*/;
-       text-shadow: 0 /*{e-bdown-shadow-x}*/ 1px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/  #fff /*{e-bdown-shadow-color}*/;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #f8d94c /*{e-bdown-background-start}*/), to( #fadb4e /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/);
-}
-.ui-btn-down-e:visited,
-.ui-btn-down-e:hover,
-.ui-btn-down-e a.ui-link-inherit {
-       color:                                  #333 /*{e-bdown-color}*/;
-}
-.ui-btn-up-e,
-.ui-btn-hover-e,
-.ui-btn-down-e {
-       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
-       text-decoration: none;
-}
-/* Structure */
-/* links within "buttons" 
------------------------------------------------------------------------------------------------------------*/
-a.ui-link-inherit {
-       text-decoration: none !important;
-}
-/* Active class used as the "on" state across all themes
------------------------------------------------------------------------------------------------------------*/
-.ui-btn-active {
-       border: 1px solid               #2373a5 /*{global-active-border}*/;
-       background:                     #5393c5 /*{global-active-background-color}*/;
-       font-weight: bold;
-       color:                                  #fff /*{global-active-color}*/;
-       cursor: pointer;
-       text-shadow: 0 /*{global-active-shadow-x}*/ 1px /*{global-active-shadow-y}*/ 0 /*{global-active-shadow-radius}*/ #3373a5 /*{global-active-shadow-color}*/;
-       text-decoration: none;
-       background-image: -webkit-gradient(linear, left top, left bottom, from( #5393c5 /*{global-active-background-start}*/), to( #6facd5 /*{global-active-background-end}*/)); /* Saf4+, Chrome */
-       background-image: -webkit-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Chrome 10+, Saf5.1+ */
-       background-image:    -moz-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* FF3.6 */
-       background-image:     -ms-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* IE10 */
-       background-image:      -o-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Opera 11.10+ */
-       background-image:         linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/);
-       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
-}
-.ui-btn-active:visited,
-.ui-btn-active:hover,
-.ui-btn-active a.ui-link-inherit {
-       color:                                  #fff /*{global-active-color}*/;
-}
-/* button inner top highlight
------------------------------------------------------------------------------------------------------------*/
-.ui-btn-inner {
-       border-top: 1px solid   #fff;
-       border-color:                   rgba(255,255,255,.3);
-}
-/* corner rounding classes
------------------------------------------------------------------------------------------------------------*/
-.ui-corner-all {
-       -webkit-border-radius:                          .6em /*{global-radii-blocks}*/;
-       border-radius:                                          .6em /*{global-radii-blocks}*/;
-}
-/* Form field separator
------------------------------------------------------------------------------------------------------------*/
-.ui-br {
-       border-color: rgb(130,130,130);
-       border-color: rgba(130,130,130,.3);
-       border-style: solid;
-}
-/* Interaction cues
------------------------------------------------------------------------------------------------------------*/
-.ui-disabled {
-       filter: Alpha(Opacity=30);
-       opacity: .3;
-       zoom: 1;
-}
-.ui-disabled,
-.ui-disabled a {
-       cursor: default !important;
-       pointer-events: none;
-}
-/* Icons
------------------------------------------------------------------------------------------------------------*/
-.ui-icon,
-.ui-icon-searchfield:after {
-       background-color:                                               #666 /*{global-icon-color}*/;
-       background-color:                                               rgba(0,0,0,.4) /*{global-icon-disc}*/;
-       background-image: url(images/icons-18-white.png) /*{global-icon-set}*/;
-       background-repeat: no-repeat;
-       -webkit-border-radius:                          9px;
-       border-radius:                                          9px;
-}
-/* Alt icon color
------------------------------------------------------------------------------------------------------------*/
-.ui-icon-alt .ui-icon,
-.ui-icon-alt .ui-icon-searchfield:after {
-       background-color:                                               #fff;
-       background-color:                                               rgba(255,255,255,.3);
-       background-image: url(images/icons-18-black.png);
-       background-repeat: no-repeat;
-}
-/* No disc
------------------------------------------------------------------------------------------------------------*/
-.ui-icon-nodisc .ui-icon,
-.ui-icon-nodisc .ui-icon-searchfield:after,
-.ui-icon-nodisc .ui-icon-alt .ui-icon,
-.ui-icon-nodisc .ui-icon-alt .ui-icon-searchfield:after {
-       background-color: transparent;
-}
-/* Icon sprite
------------------------------------------------------------------------------------------------------------*/
-/* plus minus */
-.ui-icon-plus {
-       background-position:    -1px -1px;
-}
-.ui-icon-minus {
-       background-position:    -37px -1px;
-}
-/* delete/close */
-.ui-icon-delete {
-       background-position:    -73px -1px;
-}
-/* arrows */
-.ui-icon-arrow-r {
-       background-position:    -108px -1px;
-}
-.ui-icon-arrow-l {
-       background-position:    -144px -1px;
-}
-.ui-icon-arrow-u {
-       background-position:    -180px -1px;
-}
-.ui-icon-arrow-d {
-       background-position:    -216px -1px;
-}
-/* misc */
-.ui-icon-check {
-       background-position:    -252px -1px;
-}
-.ui-icon-gear {
-       background-position:    -288px -1px;
-}
-.ui-icon-refresh {
-       background-position:    -323px -1px;
-}
-.ui-icon-forward {
-       background-position:    -360px -1px;
-}
-.ui-icon-back {
-       background-position:    -396px -1px;
-}
-.ui-icon-grid {
-       background-position:    -432px -1px;
-}
-.ui-icon-star {
-       background-position:    -467px -1px;
-}
-.ui-icon-alert {
-       background-position:    -503px -1px;
-}
-.ui-icon-info {
-       background-position:    -539px -1px;
-}
-.ui-icon-home {
-       background-position:    -575px -1px;
-}
-/* search */
-.ui-icon-search,
-.ui-icon-searchfield:after {
-       background-position:    -611px -1px;
-}
-/* checkbox radio */
-.ui-icon-checkbox-on {
-       background-position:    -647px -1px;
-}
-.ui-icon-checkbox-off {
-       background-position:    -683px -1px;
-}
-.ui-icon-radio-on {
-       background-position:    -718px -1px;
-}
-.ui-icon-radio-off {
-       background-position:    -754px -1px;
-}
-/* menu edit */
-.ui-icon-bars {
-       background-position:    -788px -1px;
-}
-.ui-icon-edit {
-       background-position:    -824px -1px;
-}
-/* HD/"retina" sprite
------------------------------------------------------------------------------------------------------------*/
-@media only screen and (-webkit-min-device-pixel-ratio: 1.3),
-       only screen and (min--moz-device-pixel-ratio: 1.3),
-       only screen and (min-resolution: 200dpi) {
-       
-       .ui-icon-plus, .ui-icon-minus, .ui-icon-delete, .ui-icon-arrow-r,
-       .ui-icon-arrow-l, .ui-icon-arrow-u, .ui-icon-arrow-d, .ui-icon-check,
-       .ui-icon-gear, .ui-icon-refresh, .ui-icon-forward, .ui-icon-back,
-       .ui-icon-grid, .ui-icon-star, .ui-icon-alert, .ui-icon-info, .ui-icon-home, .ui-icon-bars, .ui-icon-edit,
-       .ui-icon-search, .ui-icon-searchfield:after, 
-       .ui-icon-checkbox-off, .ui-icon-checkbox-on, .ui-icon-radio-off, .ui-icon-radio-on {
-               background-image: url(images/icons-36-white.png);
-               -moz-background-size: 864px 18px;
-               -o-background-size: 864px 18px;
-               -webkit-background-size: 864px 18px;
-               background-size: 864px 18px;
-       }
-       .ui-icon-alt .ui-icon {
-               background-image: url(images/icons-36-black.png);
-       }
-       .ui-icon-plus {
-               background-position:    0 50%;
-       }
-       .ui-icon-minus {
-               background-position:    -36px 50%;
-       }
-       .ui-icon-delete {
-               background-position:    -72px 50%;
-       }
-       .ui-icon-arrow-r {
-               background-position:    -108px 50%;
-       }
-       .ui-icon-arrow-l {
-               background-position:    -144px 50%;
-       }
-       .ui-icon-arrow-u {
-               background-position:    -179px 50%;
-       }
-       .ui-icon-arrow-d {
-               background-position:    -215px 50%;
-       }
-       .ui-icon-check {
-               background-position:    -252px 50%;
-       }
-       .ui-icon-gear {
-               background-position:    -287px 50%;
-       }
-       .ui-icon-refresh {
-               background-position:    -323px 50%;
-       }
-       .ui-icon-forward {
-               background-position:    -360px 50%;
-       }
-       .ui-icon-back {
-               background-position:    -395px 50%;
-       }
-       .ui-icon-grid {
-               background-position:    -431px 50%;
-       }
-       .ui-icon-star {
-               background-position:    -467px 50%;
-       }
-       .ui-icon-alert {
-               background-position:    -503px 50%;
-       }
-       .ui-icon-info {
-               background-position:    -538px 50%;
-       }
-       .ui-icon-home {
-               background-position:    -575px 50%;
-       }
-       .ui-icon-search,
-       .ui-icon-searchfield:after {
-               background-position:    -611px 50%;
-       }
-       .ui-icon-checkbox-on {
-               background-position:    -647px 50%;
-       }
-       .ui-icon-checkbox-off {
-               background-position:    -683px 50%;
-       }
-       .ui-icon-radio-on {
-               background-position:    -718px 50%;
-       }
-       .ui-icon-radio-off {
-               background-position:    -754px 50%;
-       }
-       .ui-icon-bars {
-               background-position:    -788px 50%;
-       
-       }.ui-icon-edit {
-               background-position:    -824px 50%;
-       }
-}
-/* checks,radios */
-.ui-checkbox .ui-icon,
-.ui-selectmenu-list .ui-icon {
-       -webkit-border-radius: 3px;
-       border-radius: 3px;
-}
-.ui-icon-checkbox-off,
-.ui-icon-radio-off {
-       background-color: transparent;  
-}
-.ui-checkbox-on .ui-icon,
-.ui-radio-on .ui-icon {
-       background-color: #4596ce /*{global-active-background-color}*/; /* NOTE: this hex should match the active state color. It's repeated here for cascade */
-}
-/* loading icon */
-.ui-icon-loading {
-       background: url(images/ajax-loader.gif);
-       background-size: 46px 46px;
-}
-/* Button corner class
------------------------------------------------------------------------------------------------------------*/
-.ui-btn-corner-all {
-       -webkit-border-radius:                          1em /*{global-radii-buttons}*/;
-       border-radius:                                          1em /*{global-radii-buttons}*/;
-}
-/* radius clip workaround for cleaning up corner trapping */
-.ui-corner-all,
-.ui-btn-corner-all {
-       -webkit-background-clip: padding;
-       background-clip: padding-box;
-}
-/* Overlay / modal
------------------------------------------------------------------------------------------------------------*/
-.ui-overlay {
-       background: #666;
-       filter: Alpha(Opacity=50);
-       opacity: .5;
-       position: absolute;
-       width: 100%;
-       height: 100%;
-}
-.ui-overlay-shadow {
-       -moz-box-shadow: 0 0 12px                       rgba(0,0,0,.6);
-       -webkit-box-shadow: 0 0 12px            rgba(0,0,0,.6);
-       box-shadow: 0 0 12px                            rgba(0,0,0,.6);
-}
-.ui-shadow {
-       -moz-box-shadow: 0 1px 3px /*{global-box-shadow-size}*/                         rgba(0,0,0,.2) /*{global-box-shadow-color}*/;
-       -webkit-box-shadow: 0 1px 3px /*{global-box-shadow-size}*/              rgba(0,0,0,.2) /*{global-box-shadow-color}*/;
-       box-shadow: 0 1px 3px /*{global-box-shadow-size}*/                              rgba(0,0,0,.2) /*{global-box-shadow-color}*/
-}
-.ui-bar-a .ui-shadow,
-.ui-bar-b .ui-shadow ,
-.ui-bar-c .ui-shadow  {
-       -moz-box-shadow: 0 1px 0                                rgba(255,255,255,.3);
-       -webkit-box-shadow: 0 1px 0                     rgba(255,255,255,.3);
-       box-shadow: 0 1px 0                                     rgba(255,255,255,.3);
-}
-.ui-shadow-inset {
-       -moz-box-shadow: inset 0 1px 4px                rgba(0,0,0,.2);
-       -webkit-box-shadow: inset 0 1px 4px     rgba(0,0,0,.2);
-       box-shadow: inset 0 1px 4px                     rgba(0,0,0,.2);
-}
-.ui-icon-shadow {
-       -moz-box-shadow: 0 1px 0                                rgba(255,255,255,.4) /*{global-icon-shadow}*/;
-       -webkit-box-shadow: 0 1px 0                     rgba(255,255,255,.4) /*{global-icon-shadow}*/;
-       box-shadow: 0 1px 0                                     rgba(255,255,255,.4) /*{global-icon-shadow}*/;
-}
-/* Focus state - set here for specificity (note: these classes are added by JavaScript)
------------------------------------------------------------------------------------------------------------*/
-.ui-btn:focus, .ui-link-inherit:focus {
-       outline: 0;
-}
-.ui-btn.ui-focus {
-       z-index: 1;
-}
-.ui-focus,
-.ui-btn:focus {
-       -moz-box-shadow: inset 0 0 3px          #387bbe /*{global-active-background-color}*/, 0 0 9px           #387bbe /*{global-active-background-color}*/;
-       -webkit-box-shadow: inset 0 0 3px       #387bbe /*{global-active-background-color}*/, 0 0 9px           #387bbe /*{global-active-background-color}*/;
-       box-shadow: inset 0 0 3px                       #387bbe /*{global-active-background-color}*/, 0 0 9px           #387bbe /*{global-active-background-color}*/;
-}
-.ui-input-text.ui-focus,
-.ui-input-search.ui-focus {
-       -moz-box-shadow: 0 0 12px                       #387bbe /*{global-active-background-color}*/;
-       -webkit-box-shadow: 0 0 12px            #387bbe /*{global-active-background-color}*/;
-       box-shadow: 0 0 12px                                    #387bbe /*{global-active-background-color}*/;   
-}
-/* unset box shadow in browsers that don't do it right
------------------------------------------------------------------------------------------------------------*/
-.ui-mobile-nosupport-boxshadow * {
-       -moz-box-shadow: none !important;
-       -webkit-box-shadow: none !important;
-       box-shadow: none !important;
-}
-/* ...and bring back focus */
-.ui-mobile-nosupport-boxshadow .ui-focus,
-.ui-mobile-nosupport-boxshadow .ui-btn:focus,
-.ui-mobile-nosupport-boxshadow .ui-link-inherit:focus {
-       outline-width: 1px;
-       outline-style: auto;
-}
-/* some unsets - more probably needed */
-.ui-mobile, .ui-mobile body { height: 99.9%; }
-.ui-mobile fieldset, .ui-page { padding: 0; margin: 0; }
-.ui-mobile a img, .ui-mobile fieldset { border-width: 0; }
-/* responsive page widths */
-.ui-mobile-viewport { margin: 0; overflow-x: visible; -webkit-text-size-adjust: 100%; -ms-text-size-adjust:none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
-/* Issue #2066 */
-body.ui-mobile-viewport,
-div.ui-mobile-viewport { overflow-x: hidden; }
-/* "page" containers - full-screen views, one should always be in view post-pageload */
-.ui-mobile [data-role=page], .ui-mobile [data-role=dialog], .ui-page { top: 0; left: 0; width: 100%; min-height: 100%; position: absolute; display: none; border: 0; }
-.ui-mobile .ui-page-active { display: block; overflow: visible; }
-/* on ios4, setting focus on the page element causes flashing during transitions when there is an outline, so we turn off outlines */
-.ui-page { outline: none; }
-/*orientations from js are available */
-@media screen and (orientation: portrait){
-.ui-mobile .ui-page { min-height: 420px; }
-}
-@media screen and (orientation: landscape){
-.ui-mobile .ui-page { min-height: 300px; }
-}
-/* loading screen */
-.ui-loading .ui-loader { display: block; }
-.ui-loader { display: none; z-index: 9999999; position: fixed; top: 50%; left: 50%; border:0; }
-.ui-loader-default { background: none; filter: Alpha(Opacity=18); opacity: .18; width: 46px; height: 46px; margin-left: -23px; margin-top: -23px; }
-.ui-loader-verbose { width: 200px; filter: Alpha(Opacity=88); opacity: .88; box-shadow: 0 1px 1px -1px #fff; height: auto; margin-left: -110px; margin-top: -43px; padding: 10px; }
-.ui-loader-default h1 { font-size: 0; width: 0; height: 0; overflow: hidden; }
-.ui-loader-verbose h1 { font-size: 16px; margin: 0; text-align: center; }
-.ui-loader .ui-icon { background-color: #000; display: block; margin: 0; width: 44px; height: 44px; padding: 1px; -webkit-border-radius: 36px; border-radius: 36px; }
-.ui-loader-verbose .ui-icon { margin: 0 auto 10px; filter: Alpha(Opacity=75); opacity: .75; }
-.ui-loader-textonly { padding: 15px; margin-left: -115px; }
-.ui-loader-textonly .ui-icon { display: none; }
-.ui-loader-fakefix { position: absolute; }
-/*fouc*/
-.ui-mobile-rendering > * { visibility: hidden; }
-/*headers, content panels*/
-.ui-bar, .ui-body { position: relative; padding: .4em 15px; overflow: hidden; display: block; clear:both; }
-.ui-bar { font-size: 16px; margin: 0; }
-.ui-bar h1, .ui-bar h2, .ui-bar h3, .ui-bar h4, .ui-bar h5, .ui-bar h6 { margin: 0; padding: 0; font-size: 16px; display: inline-block; }
-.ui-header, .ui-footer { position: relative; zoom: 1; }
-.ui-mobile .ui-header, .ui-mobile .ui-footer { border-left-width: 0; border-right-width: 0; }
-.ui-header .ui-btn-left,
-.ui-header .ui-btn-right,
-.ui-footer .ui-btn-left,
-.ui-footer .ui-btn-right,
-.ui-header-fixed.ui-fixed-hidden .ui-btn-left,
-.ui-header-fixed.ui-fixed-hidden .ui-btn-right { position: absolute; top: 3px; }
-.ui-header-fixed .ui-btn-left,
-.ui-header-fixed .ui-btn-right { top: 4px;}
-.ui-header .ui-btn-left,
-.ui-footer .ui-btn-left { left: 5px; }
-.ui-header .ui-btn-right,
-.ui-footer .ui-btn-right { right: 5px; }
-.ui-footer > .ui-btn-icon-notext,
-.ui-header > .ui-btn-icon-notext,
-.ui-header-fixed.ui-fixed-hidden > .ui-btn-icon-notext { top: 6px; }
-.ui-header-fixed > .ui-btn-icon-notext { top: 7px;}
-.ui-header .ui-title, .ui-footer .ui-title { min-height: 1.1em; text-align: center; font-size: 16px; display: block; margin: .6em 30% .8em; padding: 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; outline: 0 !important; }
-.ui-footer .ui-title { margin: .6em 15px .8em; }
-/* content area*/
-.ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; }
-/* corner styling for dialogs and popups */
-.ui-corner-all > .ui-header:first-child,
-.ui-corner-all > .ui-content:first-child,
-.ui-corner-all > .ui-footer:first-child {
-       -webkit-border-top-left-radius: inherit;
-       border-top-left-radius: inherit;
-       -webkit-border-top-right-radius: inherit;
-       border-top-right-radius: inherit;
-}
-.ui-corner-all > .ui-header:last-child,
-.ui-corner-all > .ui-content:last-child,
-.ui-corner-all > .ui-footer:last-child {
-       -webkit-border-bottom-left-radius: inherit;
-       border-bottom-left-radius: inherit;
-       -webkit-border-bottom-right-radius: inherit;
-       border-bottom-right-radius: inherit;
-}
-/* icons sizing */
-.ui-icon { width: 18px; height: 18px; }
-/* non-js content hiding */
-.ui-nojs { position: absolute; left: -9999px; }
-/* accessible content hiding */
-.ui-hide-label label.ui-input-text, .ui-hide-label label.ui-select, .ui-hide-label label.ui-slider, .ui-hide-label label.ui-submit, .ui-hide-label .ui-controlgroup-label,
-.ui-hidden-accessible { position: absolute !important; left: -9999px; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
-/* Transitions originally inspired by those from jQtouch, nice work, folks */
-.ui-mobile-viewport-transitioning,
-.ui-mobile-viewport-transitioning .ui-page {
-       width: 100%;
-       height: 100%;
-       overflow: hidden;
-       -webkit-box-sizing: border-box;
-       -moz-box-sizing: border-box;
-       box-sizing: border-box;
-}
-.ui-page-pre-in {
-       opacity: 0;
-}
-.in {
-       -webkit-animation-timing-function: ease-out;
-       -webkit-animation-duration: 350ms;
-       -moz-animation-timing-function: ease-out;
-       -moz-animation-duration: 350ms;
-       animation-timing-function: ease-out;
-       animation-duration: 350ms;
-}
-.out {
-       -webkit-animation-timing-function: ease-in;
-       -webkit-animation-duration: 225ms;
-       -moz-animation-timing-function: ease-in;
-       -moz-animation-duration: 225ms;
-       animation-timing-function: ease-in;
-       animation-duration: 225ms;
-}
-@-webkit-keyframes fadein {
-    from { opacity: 0; }
-    to { opacity: 1; }
-}
-@-moz-keyframes fadein {
-    from { opacity: 0; }
-    to { opacity: 1; }
-}
-@keyframes fadein {
-    from { opacity: 0; }
-    to { opacity: 1; }
-}
-@-webkit-keyframes fadeout {
-    from { opacity: 1; }
-    to { opacity: 0; }
-}
-@-moz-keyframes fadeout {
-    from { opacity: 1; }
-    to { opacity: 0; }
-}
-@keyframes fadeout {
-    from { opacity: 1; }
-    to { opacity: 0; }
-}
-.fade.out {
-       opacity: 0;
-       -webkit-animation-duration: 125ms;
-       -webkit-animation-name: fadeout;
-       -moz-animation-duration: 125ms;
-       -moz-animation-name: fadeout;
-       animation-duration: 125ms;
-       animation-name: fadeout;
-}
-.fade.in {
-       opacity: 1;
-       -webkit-animation-duration: 225ms;
-       -webkit-animation-name: fadein;
-       -moz-animation-duration: 225ms;
-       -moz-animation-name: fadein;
-       animation-duration: 225ms;
-       animation-name: fadein;
-}
-.pop {
-       -webkit-transform-origin: 50% 50%;
-       -moz-transform-origin: 50% 50%;
-       transform-origin: 50% 50%;
-}
-.pop.in {
-       -webkit-transform: scale(1);
-       -webkit-animation-name: popin;
-       -webkit-animation-duration: 350ms;
-       -moz-transform: scale(1);
-       -moz-animation-name: popin;
-       -moz-animation-duration: 350ms;
-       transform: scale(1);
-       animation-name: popin;
-       animation-duration: 350ms;
-    opacity: 1;
-}
-.pop.out {
-       -webkit-animation-name: fadeout;
-       -webkit-animation-duration: 100ms;
-       -moz-animation-name: fadeout;
-       -moz-animation-duration: 100ms;
-       animation-name: fadeout;
-       animation-duration: 100ms;
-       opacity: 0;
-}
-.pop.in.reverse {
-       -webkit-animation-name: fadein;
-       -moz-animation-name: fadein;
-       animation-name: fadein;
-}
-.pop.out.reverse {
-       -webkit-transform: scale(.8);
-       -webkit-animation-name: popout;
-       -moz-transform: scale(.8);
-       -moz-animation-name: popout;
-       transform: scale(.8);
-       animation-name: popout;
-}
-@-webkit-keyframes popin {
-    from {
-        -webkit-transform: scale(.8);
-        opacity: 0;
-    }
-    to {
-        -webkit-transform: scale(1);
-        opacity: 1;
-    }
-}
-@-moz-keyframes popin {
-    from {
-        -moz-transform: scale(.8);
-        opacity: 0;
-    }
-    to {
-        -moz-transform: scale(1);
-        opacity: 1;
-    }
-}
-@keyframes popin {
-    from {
-        transform: scale(.8);
-        opacity: 0;
-    }
-    to {
-        transform: scale(1);
-        opacity: 1;
-    }
-}
-@-webkit-keyframes popout {
-    from {
-        -webkit-transform: scale(1);
-        opacity: 1;
-    }
-    to {
-        -webkit-transform: scale(.8);
-        opacity: 0;
-    }
-}
-@-moz-keyframes popout {
-    from {
-        -moz-transform: scale(1);
-        opacity: 1;
-    }
-    to {
-        -moz-transform: scale(.8);
-        opacity: 0;
-    }
-}
-@keyframes popout {
-    from {
-        transform: scale(1);
-        opacity: 1;
-    }
-    to {
-        transform: scale(.8);
-        opacity: 0;
-    }
-}
-/* keyframes for slidein from sides */
-@-webkit-keyframes slideinfromright {
-    from { -webkit-transform: translate3d(100%,0,0); }
-    to { -webkit-transform: translate3d(0,0,0); }
-}
-@-moz-keyframes slideinfromright {
-    from { -moz-transform: translateX(100%); }
-    to { -moz-transform: translateX(0); }
-}
-@keyframes slideinfromright {
-    from { transform: translateX(100%); }
-    to { transform: translateX(0); }
-}
-@-webkit-keyframes slideinfromleft {
-    from { -webkit-transform: translate3d(-100%,0,0); }
-    to { -webkit-transform: translate3d(0,0,0); }
-}
-@-moz-keyframes slideinfromleft {
-    from { -moz-transform: translateX(-100%); }
-    to { -moz-transform: translateX(0); }
-}
-@keyframes slideinfromleft {
-    from { transform: translateX(-100%); }
-    to { transform: translateX(0); }
-}
-/* keyframes for slideout to sides */
-@-webkit-keyframes slideouttoleft {
-    from { -webkit-transform: translate3d(0,0,0); }
-    to { -webkit-transform: translate3d(-100%,0,0); }
-}
-@-moz-keyframes slideouttoleft {
-    from { -moz-transform: translateX(0); }
-    to { -moz-transform: translateX(-100%); }
-}
-@keyframes slideouttoleft {
-    from { transform: translateX(0); }
-    to { transform: translateX(-100%); }
-}
-@-webkit-keyframes slideouttoright {
-    from { -webkit-transform: translate3d(0,0,0); }
-    to { -webkit-transform: translate3d(100%,0,0); }
-}
-@-moz-keyframes slideouttoright {
-    from { -moz-transform: translateX(0); }
-    to { -moz-transform: translateX(100%); }
-}
-@keyframes slideouttoright {
-    from { transform: translateX(0); }
-    to { transform: translateX(100%); }
-}
-.slide.out, .slide.in {
-       -webkit-animation-timing-function: ease-out;
-       -webkit-animation-duration: 350ms;
-       -moz-animation-timing-function: ease-out;
-       -moz-animation-duration: 350ms;
-       animation-timing-function: ease-out;
-       animation-duration: 350ms;
-}
-.slide.out {
-       -webkit-transform: translate3d(-100%,0,0);
-       -webkit-animation-name: slideouttoleft;
-       -moz-transform: translateX(-100%);
-       -moz-animation-name: slideouttoleft;
-       transform: translateX(-100%);
-       animation-name: slideouttoleft;
-}
-.slide.in {
-       -webkit-transform: translate3d(0,0,0);
-       -webkit-animation-name: slideinfromright;
-       -moz-transform: translateX(0);
-       -moz-animation-name: slideinfromright;
-       transform: translateX(0);
-       animation-name: slideinfromright;
-}
-.slide.out.reverse {
-       -webkit-transform: translate3d(100%,0,0);
-       -webkit-animation-name: slideouttoright;
-       -moz-transform: translateX(100%);
-       -moz-animation-name: slideouttoright;
-       transform: translateX(100%);
-       animation-name: slideouttoright;
-}
-.slide.in.reverse {
-       -webkit-transform: translate3d(0,0,0);
-       -webkit-animation-name: slideinfromleft;
-       -moz-transform: translateX(0);
-       -moz-animation-name: slideinfromleft;
-       transform: translateX(0);
-       animation-name: slideinfromleft;
-}
-.slidefade.out {
-       -webkit-transform: translateX(-100%);
-       -webkit-animation-name: slideouttoleft;
-       -webkit-animation-duration: 225ms;
-       -moz-transform: translateX(-100%);
-       -moz-animation-name: slideouttoleft;
-       -moz-animation-duration: 225ms;
-       transform: translateX(-100%);
-       animation-name: slideouttoleft;
-       animation-duration: 225ms;
-}
-.slidefade.in {
-       -webkit-transform: translateX(0);
-       -webkit-animation-name: fadein;
-       -webkit-animation-duration: 200ms;
-       -moz-transform: translateX(0);
-       -moz-animation-name: fadein;
-       -moz-animation-duration: 200ms;
-       transform: translateX(0);
-       animation-name: fadein;
-       animation-duration: 200ms;
-}
-.slidefade.out.reverse {
-       -webkit-transform: translateX(100%);
-       -webkit-animation-name: slideouttoright;
-       -webkit-animation-duration: 200ms;
-       -moz-transform: translateX(100%);
-       -moz-animation-name: slideouttoright;
-       -moz-animation-duration: 200ms;
-       transform: translateX(100%);
-       animation-name: slideouttoright;
-       animation-duration: 200ms;
-}
-.slidefade.in.reverse {
-       -webkit-transform: translateX(0);
-       -webkit-animation-name: fadein;
-       -webkit-animation-duration: 200ms;
-       -moz-transform: translateX(0);
-       -moz-animation-name: fadein;
-       -moz-animation-duration: 200ms;
-       transform: translateX(0);
-       animation-name: fadein;
-       animation-duration: 200ms;
-}
-/* slide down */
-.slidedown.out {
-       -webkit-animation-name: fadeout;
-       -webkit-animation-duration: 100ms;
-       -moz-animation-name: fadeout;
-       -moz-animation-duration: 100ms;
-       animation-name: fadeout;
-       animation-duration: 100ms;
-}
-.slidedown.in {
-       -webkit-transform: translateY(0);
-       -webkit-animation-name: slideinfromtop;
-       -webkit-animation-duration: 250ms;
-       -moz-transform: translateY(0);
-       -moz-animation-name: slideinfromtop;
-       -moz-animation-duration: 250ms;
-       transform: translateY(0);
-       animation-name: slideinfromtop;
-       animation-duration: 250ms;
-}
-.slidedown.in.reverse {
-       -webkit-animation-name: fadein;
-       -webkit-animation-duration: 150ms;
-       -moz-animation-name: fadein;
-       -moz-animation-duration: 150ms;
-       animation-name: fadein;
-       animation-duration: 150ms;
-}
-.slidedown.out.reverse {
-       -webkit-transform: translateY(-100%);
-       -webkit-animation-name: slideouttotop;
-       -webkit-animation-duration: 200ms;
-       -moz-transform: translateY(-100%);
-       -moz-animation-name: slideouttotop;
-       -moz-animation-duration: 200ms;
-       transform: translateY(-100%);
-       animation-name: slideouttotop;
-       animation-duration: 200ms;
-}
-@-webkit-keyframes slideinfromtop {
-    from { -webkit-transform: translateY(-100%); }
-    to { -webkit-transform: translateY(0); }
-}
-@-moz-keyframes slideinfromtop {
-    from { -moz-transform: translateY(-100%); }
-    to { -moz-transform: translateY(0); }
-}
-@keyframes slideinfromtop {
-    from { transform: translateY(-100%); }
-    to { transform: translateY(0); }
-}
-@-webkit-keyframes slideouttotop {
-    from { -webkit-transform: translateY(0); }
-    to { -webkit-transform: translateY(-100%); }
-}
-@-moz-keyframes slideouttotop {
-    from { -moz-transform: translateY(0); }
-    to { -moz-transform: translateY(-100%); }
-}
-@keyframes slideouttotop {
-    from { transform: translateY(0); }
-    to { transform: translateY(-100%); }
-}
-/* slide up */
-.slideup.out {
-       -webkit-animation-name: fadeout;
-       -webkit-animation-duration: 100ms;
-       -moz-animation-name: fadeout;
-       -moz-animation-duration: 100ms;
-       animation-name: fadeout;
-       animation-duration: 100ms;
-}
-.slideup.in {
-       -webkit-transform: translateY(0);
-       -webkit-animation-name: slideinfrombottom;
-       -webkit-animation-duration: 250ms;
-       -moz-transform: translateY(0);
-       -moz-animation-name: slideinfrombottom;
-       -moz-animation-duration: 250ms;
-       transform: translateY(0);
-       animation-name: slideinfrombottom;
-       animation-duration: 250ms;
-}
-.slideup.in.reverse {
-       -webkit-animation-name: fadein;
-       -webkit-animation-duration: 150ms;
-       -moz-animation-name: fadein;
-       -moz-animation-duration: 150ms;
-       animation-name: fadein;
-       animation-duration: 150ms;
-}
-.slideup.out.reverse {
-       -webkit-transform: translateY(100%);
-       -webkit-animation-name: slideouttobottom;
-       -webkit-animation-duration: 200ms;
-       -moz-transform: translateY(100%);
-       -moz-animation-name: slideouttobottom;
-       -moz-animation-duration: 200ms;
-       transform: translateY(100%);
-       animation-name: slideouttobottom;
-       animation-duration: 200ms;
-}
-@-webkit-keyframes slideinfrombottom {
-    from { -webkit-transform: translateY(100%); }
-    to { -webkit-transform: translateY(0); }
-}
-@-moz-keyframes slideinfrombottom {
-    from { -moz-transform: translateY(100%); }
-    to { -moz-transform: translateY(0); }
-}
-@keyframes slideinfrombottom {
-    from { transform: translateY(100%); }
-    to { transform: translateY(0); }
-}
-@-webkit-keyframes slideouttobottom {
-    from { -webkit-transform: translateY(0); }
-    to { -webkit-transform: translateY(100%); }
-}
-@-moz-keyframes slideouttobottom {
-    from { -moz-transform: translateY(0); }
-    to { -moz-transform: translateY(100%); }
-}
-@keyframes slideouttobottom {
-    from { transform: translateY(0); }
-    to { transform: translateY(100%); }
-}
-/* The properties in this rule are only necessary for the 'flip' transition.
- * We need specify the perspective to create a projection matrix. This will add
- * some depth as the element flips. The depth number represents the distance of
- * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate
- * value.
- */
-.viewport-flip {
-       -webkit-perspective: 1000;
-       -moz-perspective: 1000;
-       perspective: 1000;
-       position: absolute;
-}
-.flip {
-       -webkit-backface-visibility: hidden;
-       -webkit-transform: translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
-       -moz-backface-visibility: hidden;
-       -moz-transform: translateX(0);
-       backface-visibility: hidden;
-       transform: translateX(0);
-}
-.flip.out {
-       -webkit-transform: rotateY(-90deg) scale(.9);
-       -webkit-animation-name: flipouttoleft;
-       -webkit-animation-duration: 175ms;
-       -moz-transform: rotateY(-90deg) scale(.9);
-       -moz-animation-name: flipouttoleft;
-       -moz-animation-duration: 175ms;
-       transform: rotateY(-90deg) scale(.9);
-       animation-name: flipouttoleft;
-       animation-duration: 175ms;
-}
-.flip.in {
-       -webkit-animation-name: flipintoright;
-       -webkit-animation-duration: 225ms;
-       -moz-animation-name: flipintoright;
-       -moz-animation-duration: 225ms;
-       animation-name: flipintoright;
-       animation-duration: 225ms;
-}
-.flip.out.reverse {
-       -webkit-transform: rotateY(90deg) scale(.9);
-       -webkit-animation-name: flipouttoright;
-       -moz-transform: rotateY(90deg) scale(.9);
-       -moz-animation-name: flipouttoright;
-       transform: rotateY(90deg) scale(.9);
-       animation-name: flipouttoright;
-}
-.flip.in.reverse {
-       -webkit-animation-name: flipintoleft;
-       -moz-animation-name: flipintoleft;
-       animation-name: flipintoleft;
-}
-@-webkit-keyframes flipouttoleft {
-    from { -webkit-transform: rotateY(0); }
-    to { -webkit-transform: rotateY(-90deg) scale(.9); }
-}
-@-moz-keyframes flipouttoleft {
-    from { -moz-transform: rotateY(0); }
-    to { -moz-transform: rotateY(-90deg) scale(.9); }
-}
-@keyframes flipouttoleft {
-    from { transform: rotateY(0); }
-    to { transform: rotateY(-90deg) scale(.9); }
-}
-@-webkit-keyframes flipouttoright {
-    from { -webkit-transform: rotateY(0) ; }
-    to { -webkit-transform: rotateY(90deg) scale(.9); }
-}
-@-moz-keyframes flipouttoright {
-    from { -moz-transform: rotateY(0); }
-    to { -moz-transform: rotateY(90deg) scale(.9); }
-}
-@keyframes flipouttoright {
-    from { transform: rotateY(0); }
-    to { transform: rotateY(90deg) scale(.9); }
-}
-@-webkit-keyframes flipintoleft {
-    from { -webkit-transform: rotateY(-90deg) scale(.9); }
-    to { -webkit-transform: rotateY(0); }
-}
-@-moz-keyframes flipintoleft {
-    from { -moz-transform: rotateY(-90deg) scale(.9); }
-    to { -moz-transform: rotateY(0); }
-}
-@keyframes flipintoleft {
-    from { transform: rotateY(-90deg) scale(.9); }
-    to { transform: rotateY(0); }
-}
-@-webkit-keyframes flipintoright {
-    from { -webkit-transform: rotateY(90deg) scale(.9); }
-    to { -webkit-transform: rotateY(0); }
-}
-@-moz-keyframes flipintoright {
-    from { -moz-transform: rotateY(90deg) scale(.9); }
-    to { -moz-transform: rotateY(0); }
-}
-@keyframes flipintoright {
-    from { transform: rotateY(90deg) scale(.9); }
-    to { transform: rotateY(0); }
-}
-/* The properties in this rule are only necessary for the 'flip' transition.
- * We need specify the perspective to create a projection matrix. This will add
- * some depth as the element flips. The depth number represents the distance of
- * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate
- * value.
- */
-.viewport-turn {
-       -webkit-perspective: 200px;
-       -moz-perspective: 200px;
-       -ms-perspective: 200px;
-       perspective: 200px;
-       position: absolute;
-}
-.turn {
-       -webkit-backface-visibility: hidden;
-       -webkit-transform: translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
-       -webkit-transform-origin: 0;
-       
-       -moz-backface-visibility: hidden;
-       -moz-transform: translateX(0);
-       -moz-transform-origin: 0;
-       
-       backface-visibility :hidden;
-       transform: translateX(0);
-       transform-origin: 0;
-}
-.turn.out {
-       -webkit-transform: rotateY(-90deg) scale(.9);
-       -webkit-animation-name: flipouttoleft;
-       -webkit-animation-duration: 125ms;
-       -moz-transform: rotateY(-90deg) scale(.9);
-       -moz-animation-name: flipouttoleft;
-       -moz-animation-duration: 125ms;
-       transform: rotateY(-90deg) scale(.9);
-       animation-name: flipouttoleft;
-       animation-duration: 125ms;
-}
-.turn.in {
-       -webkit-animation-name: flipintoright;
-       -webkit-animation-duration: 250ms;
-       -moz-animation-name: flipintoright;
-       -moz-animation-duration: 250ms;
-       animation-name: flipintoright;
-       animation-duration: 250ms;
-       
-}
-.turn.out.reverse {
-       -webkit-transform: rotateY(90deg) scale(.9);
-       -webkit-animation-name: flipouttoright;
-       -moz-transform: rotateY(90deg) scale(.9);
-       -moz-animation-name: flipouttoright;
-       transform: rotateY(90deg) scale(.9);
-       animation-name: flipouttoright;
-}
-.turn.in.reverse {
-       -webkit-animation-name: flipintoleft;
-       -moz-animation-name: flipintoleft;
-       animation-name: flipintoleft;
-}
-@-webkit-keyframes flipouttoleft {
-    from { -webkit-transform: rotateY(0); }
-    to { -webkit-transform: rotateY(-90deg) scale(.9); }
-}
-@-moz-keyframes flipouttoleft {
-    from { -moz-transform: rotateY(0); }
-    to { -moz-transform: rotateY(-90deg) scale(.9); }
-}
-@keyframes flipouttoleft {
-    from { transform: rotateY(0); }
-    to { transform: rotateY(-90deg) scale(.9); }
-}
-@-webkit-keyframes flipouttoright {
-    from { -webkit-transform: rotateY(0) ; }
-    to { -webkit-transform: rotateY(90deg) scale(.9); }
-}
-@-moz-keyframes flipouttoright {
-    from { -moz-transform: rotateY(0); }
-    to { -moz-transform: rotateY(90deg) scale(.9); }
-}
-@keyframes flipouttoright {
-    from { transform: rotateY(0); }
-    to { transform: rotateY(90deg) scale(.9); }
-}
-@-webkit-keyframes flipintoleft {
-    from { -webkit-transform: rotateY(-90deg) scale(.9); }
-    to { -webkit-transform: rotateY(0); }
-}
-@-moz-keyframes flipintoleft {
-    from { -moz-transform: rotateY(-90deg) scale(.9); }
-    to { -moz-transform: rotateY(0); }
-}
-@keyframes flipintoleft {
-    from { transform: rotateY(-90deg) scale(.9); }
-    to { transform: rotateY(0); }
-}
-@-webkit-keyframes flipintoright {
-    from { -webkit-transform: rotateY(90deg) scale(.9); }
-    to { -webkit-transform: rotateY(0); }
-}
-@-moz-keyframes flipintoright {
-    from { -moz-transform: rotateY(90deg) scale(.9); }
-    to { -moz-transform: rotateY(0); }
-}
-@keyframes flipintoright {
-    from { transform: rotateY(90deg) scale(.9); }
-    to { transform: rotateY(0); }
-}
-/* flow transition */
-.flow {
-       -webkit-transform-origin: 50% 30%;
-       -webkit-box-shadow: 0 0 20px rgba(0,0,0,.4);
-       -moz-transform-origin: 50% 30%; 
-       -moz-box-shadow: 0 0 20px rgba(0,0,0,.4);
-       transform-origin: 50% 30%;      
-       box-shadow: 0 0 20px rgba(0,0,0,.4);
-}
-.ui-dialog.flow {
-       -webkit-transform-origin: none;
-       -webkit-box-shadow: none;
-       -moz-transform-origin: none;    
-       -moz-box-shadow: none;
-       transform-origin: none; 
-       box-shadow: none;
-}
-.flow.out {
-       -webkit-transform: translateX(-100%) scale(.7);
-       -webkit-animation-name: flowouttoleft;
-       -webkit-animation-timing-function: ease;
-       -webkit-animation-duration: 350ms;
-       -moz-transform: translateX(-100%) scale(.7);
-       -moz-animation-name: flowouttoleft;
-       -moz-animation-timing-function: ease;
-       -moz-animation-duration: 350ms;
-       transform: translateX(-100%) scale(.7);
-       animation-name: flowouttoleft;
-       animation-timing-function: ease;
-       animation-duration: 350ms;
-}
-.flow.in {
-       -webkit-transform: translateX(0) scale(1);
-       -webkit-animation-name: flowinfromright;
-       -webkit-animation-timing-function: ease;
-       -webkit-animation-duration: 350ms;
-       -moz-transform: translateX(0) scale(1);
-       -moz-animation-name: flowinfromright;
-       -moz-animation-timing-function: ease;
-       -moz-animation-duration: 350ms;
-       transform: translateX(0) scale(1);
-       animation-name: flowinfromright;
-       animation-timing-function: ease;
-       animation-duration: 350ms;
-}
-.flow.out.reverse {
-       -webkit-transform: translateX(100%);
-       -webkit-animation-name: flowouttoright;
-       -moz-transform: translateX(100%);
-       -moz-animation-name: flowouttoright;
-       transform: translateX(100%);
-       animation-name: flowouttoright;
-}
-.flow.in.reverse {
-       -webkit-animation-name: flowinfromleft;
-       -moz-animation-name: flowinfromleft;
-       animation-name: flowinfromleft;
-}
-@-webkit-keyframes flowouttoleft {
-    0% { -webkit-transform: translateX(0) scale(1); }
-       60%, 70% { -webkit-transform: translateX(0) scale(.7); }
-    100% { -webkit-transform: translateX(-100%) scale(.7); }
-}
-@-moz-keyframes flowouttoleft {
-    0% { -moz-transform: translateX(0) scale(1); }
-       60%, 70% { -moz-transform: translateX(0) scale(.7); }
-    100% { -moz-transform:  translateX(-100%) scale(.7); }
-}
-@keyframes flowouttoleft {
-    0% { transform: translateX(0) scale(1); }
-       60%, 70% { transform: translateX(0) scale(.7); }
-    100% { transform:  translateX(-100%) scale(.7); }
-}
-@-webkit-keyframes flowouttoright {
-    0% { -webkit-transform: translateX(0) scale(1); }
-       60%, 70% { -webkit-transform: translateX(0) scale(.7); }
-    100% { -webkit-transform:  translateX(100%) scale(.7); }
-}
-@-moz-keyframes flowouttoright {
-    0% { -moz-transform: translateX(0) scale(1); }
-       60%, 70% { -moz-transform: translateX(0) scale(.7); }
-    100% { -moz-transform:  translateX(100%) scale(.7); }
-}
-@keyframes flowouttoright {
-    0% { transform: translateX(0) scale(1); }
-       60%, 70% { transform: translateX(0) scale(.7); }
-    100% { transform:  translateX(100%) scale(.7); }
-}
-@-webkit-keyframes flowinfromleft {
-    0% { -webkit-transform: translateX(-100%) scale(.7); }
-       30%, 40% { -webkit-transform: translateX(0) scale(.7); }
-    100% { -webkit-transform: translateX(0) scale(1); }
-}
-@-moz-keyframes flowinfromleft {
-    0% { -moz-transform: translateX(-100%) scale(.7); }
-       30%, 40% { -moz-transform: translateX(0) scale(.7); }
-    100% { -moz-transform: translateX(0) scale(1); }
-}
-@keyframes flowinfromleft {
-    0% { transform: translateX(-100%) scale(.7); }
-       30%, 40% { transform: translateX(0) scale(.7); }
-    100% { transform: translateX(0) scale(1); }
-}
-@-webkit-keyframes flowinfromright {
-    0% { -webkit-transform: translateX(100%) scale(.7); }
-       30%, 40% { -webkit-transform: translateX(0) scale(.7); }
-    100% { -webkit-transform: translateX(0) scale(1); }
-}
-@-moz-keyframes flowinfromright {
-    0% { -moz-transform: translateX(100%) scale(.7); }
-       30%, 40% { -moz-transform: translateX(0) scale(.7); }
-    100% { -moz-transform: translateX(0) scale(1); }
-}
-@keyframes flowinfromright {
-    0% { transform: translateX(100%) scale(.7); }
-       30%, 40% { transform: translateX(0) scale(.7); }
-    100% { transform: translateX(0) scale(1); }
-}
-/* content configurations. */
-.ui-grid-a, .ui-grid-b, .ui-grid-c, .ui-grid-d { overflow: hidden; }
-.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e { margin: 0; padding: 0; border: 0; float: left; min-height: 1px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
-/* grid solo: 100 - single item fallback */
-.ui-grid-solo .ui-block-a { display: block; float: none; }
-/* Lower percentages for older browsers (i.e. IE7) to prevent wrapping. -.5px to fix BB5 wrap issue. */
-/* grid a: 50/50 */
-.ui-grid-a .ui-block-a, .ui-grid-a .ui-block-b { width: 49.95%; }
-.ui-grid-a > :nth-child(n) { width: 50%; margin-right: -.5px; }
-.ui-grid-a .ui-block-a { clear: left; }
-/* grid b: 33/33/33 */
-.ui-grid-b .ui-block-a, .ui-grid-b .ui-block-b, .ui-grid-b .ui-block-c { width: 33.25%; }
-.ui-grid-b > :nth-child(n) { width: 33.333%; margin-right: -.5px; }
-.ui-grid-b .ui-block-a { clear: left; }
-/* grid c: 25/25/25/25 */
-.ui-grid-c .ui-block-a, .ui-grid-c .ui-block-b, .ui-grid-c .ui-block-c, .ui-grid-c .ui-block-d { width: 24.925%; }
-.ui-grid-c > :nth-child(n) { width: 25%; margin-right: -.5px; }
-.ui-grid-c .ui-block-a { clear: left; }
-/* grid d: 20/20/20/20/20 */
-.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e { width: 19.925%; }
-.ui-grid-d > :nth-child(n) { width: 20%; }
-.ui-grid-d .ui-block-a { clear: left; }
-/* preset breakpoint to switch to stacked grid styles below 35em (560px) */
-@media all and (max-width: 35em) {
-       .ui-responsive .ui-block-a, 
-       .ui-responsive .ui-block-b, 
-       .ui-responsive .ui-block-c,
-       .ui-responsive .ui-block-d,
-       .ui-responsive .ui-block-e { 
-               width: 100%; 
-               float:none; 
-       }
-}
-/* fixed page header & footer configuration */
-.ui-header-fixed,
-.ui-footer-fixed {
-       left: 0;
-       right: 0;
-       width: 100%;
-       position: fixed;
-       z-index: 1000;
-}
-.ui-header-fixed {
-       top: -1px;
-       padding-top: 1px;
-}
-.ui-header-fixed.ui-fixed-hidden {
-       top: 0;
-       padding-top: 0;
-}
-.ui-footer-fixed {
-       bottom: -1px;
-       padding-bottom: 1px;
-}
-.ui-footer-fixed.ui-fixed-hidden {
-       bottom: 0;
-       padding-bottom: 0;
-}
-.ui-header-fullscreen,
-.ui-footer-fullscreen {
-       filter: Alpha(Opacity=90);
-       opacity: .9;
-}
-.ui-page-header-fixed {
-       padding-top: 2.6875em;
-}
-.ui-page-footer-fixed {
-       padding-bottom: 2.6875em;
-}
-.ui-page-header-fullscreen > .ui-content,
-.ui-page-footer-fullscreen > .ui-content {
-       padding: 0;
-}
-.ui-fixed-hidden {
-       position: absolute;
-}
-.ui-page-header-fullscreen .ui-fixed-hidden,
-.ui-page-footer-fullscreen .ui-fixed-hidden {
-       left: -9999px;
-}
-.ui-header-fixed .ui-btn,
-.ui-footer-fixed .ui-btn { 
-       z-index: 10;
-}
-/* workarounds for other widgets */
-.ui-android-2x-fixed .ui-li-has-thumb {
-       -webkit-transform: translate3d(0,0,0);
-}
-.ui-navbar { max-width: 100%; }
-.ui-navbar.ui-mini { margin: 0; }
-.ui-navbar ul:before, .ui-navbar ul:after { content: " "; display: table; }
-.ui-navbar ul:after { clear: both; }
-.ui-navbar ul { list-style:none; margin: 0; padding: 0; position: relative; display: block; border: 0; max-width: 100%; overflow: visible; zoom: 1; }
-.ui-navbar li .ui-btn { display: block; text-align: center; margin: 0 -1px 0 0; border-right-width: 0; }
-.ui-navbar li .ui-btn-icon-right .ui-icon { right: 6px; }
-/* add border if not in header/footer (full width) */
-.ui-navbar li:last-child .ui-btn,
-.ui-navbar .ui-grid-duo .ui-block-b .ui-btn { margin-right: 0; border-right-width: 1px; }
-.ui-header .ui-navbar li:last-child .ui-btn,
-.ui-footer .ui-navbar li:last-child .ui-btn,
-.ui-header .ui-navbar .ui-grid-duo .ui-block-b .ui-btn,
-.ui-footer .ui-navbar .ui-grid-duo .ui-block-b .ui-btn { margin-right: -1px; border-right-width: 0; }
-.ui-navbar .ui-grid-duo li.ui-block-a:last-child .ui-btn { margin-right: -1px; border-right-width: 1px; }
-.ui-header .ui-navbar li .ui-btn,
-.ui-footer .ui-navbar li .ui-btn { border-top-width: 0; border-bottom-width: 0; }
-/* fixing gaps caused by subpixel problem */
-.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn,
-.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn { margin-right: -5px; }
-.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn,
-.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn,
-.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn,
-.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn { margin-right: -4px; }
-.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon,
-.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon,
-.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon,
-.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon,
-.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon,
-.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon { right: 8px; }
-.ui-navbar li .ui-btn .ui-btn-inner { padding-top: .7em; padding-bottom: .8em }
-.ui-navbar li .ui-btn-icon-top .ui-btn-inner { padding-top: 30px; }
-.ui-navbar li .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 30px; }
-.ui-btn { display: block; text-align: center; cursor:pointer; position: relative; margin: .5em 0; padding: 0; }
-.ui-mini { margin-top: .25em; margin-bottom: .25em; }
-.ui-btn-left, .ui-btn-right, .ui-input-clear, .ui-btn-inline,
-.ui-grid-a .ui-btn, .ui-grid-b .ui-btn, .ui-grid-c .ui-btn, .ui-grid-d .ui-btn, .ui-grid-e .ui-btn, .ui-grid-solo .ui-btn { margin-right: 5px; margin-left: 5px; }
-.ui-btn-inner { font-size: 16px; padding: .6em 20px; min-width: .75em; display: block; position: relative; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; zoom: 1; }
-.ui-btn input, .ui-btn button { z-index: 2; }
-.ui-btn-left, .ui-btn-right, .ui-btn-inline { display: inline-block; vertical-align: middle; }
-.ui-mobile .ui-btn-left, .ui-mobile .ui-btn-right, .ui-btn-left > .ui-btn, .ui-btn-right > .ui-btn { margin: 0; } /* .ui-mobile to increase specificity level */
-.ui-btn-block { display: block; }
-.ui-header > .ui-btn,
-.ui-footer > .ui-btn { display: inline-block; margin: 0; }
-.ui-header .ui-btn-block,
-.ui-footer .ui-btn-block { display: block; }
-.ui-header .ui-btn-inner,
-.ui-footer .ui-btn-inner,
-.ui-mini .ui-btn-inner { font-size: 12.5px; padding: .55em 11px .5em; }
-.ui-fullsize .ui-btn-inner,
-.ui-fullsize .ui-btn-inner { font-size: 16px; padding: .6em 20px; }
-.ui-btn-icon-notext { width: 24px; height: 24px; }
-.ui-btn-icon-notext .ui-btn-inner { padding: 0; height: 100%; }
-.ui-btn-icon-notext .ui-btn-inner .ui-icon { margin: 2px 1px 2px 3px; float: left; }
-.ui-btn-text { position: relative; z-index: 1; width: 100%; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; }
-div.ui-btn-text { width: auto; }
-.ui-btn-icon-notext .ui-btn-text { position: absolute; left: -9999px; }
-.ui-btn-icon-left .ui-btn-inner { padding-left: 40px; }
-.ui-btn-icon-right .ui-btn-inner { padding-right: 40px; }
-.ui-btn-icon-top .ui-btn-inner { padding-top: 40px; }
-.ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 40px; }
-.ui-header .ui-btn-icon-left .ui-btn-inner,
-.ui-footer .ui-btn-icon-left .ui-btn-inner,
-.ui-mini.ui-btn-icon-left .ui-btn-inner,
-.ui-mini .ui-btn-icon-left .ui-btn-inner { padding-left: 30px; }
-.ui-header .ui-btn-icon-right .ui-btn-inner,
-.ui-footer .ui-btn-icon-right .ui-btn-inner,
-.ui-mini.ui-btn-icon-right .ui-btn-inner,
-.ui-mini .ui-btn-icon-right .ui-btn-inner { padding-right: 30px; }
-.ui-header .ui-btn-icon-top .ui-btn-inner,
-.ui-footer .ui-btn-icon-top .ui-btn-inner { padding: 30px 3px .5em 3px; }
-.ui-mini.ui-btn-icon-top .ui-btn-inner,
-.ui-mini .ui-btn-icon-top .ui-btn-inner { padding-top: 30px; }
-.ui-header .ui-btn-icon-bottom .ui-btn-inner,
-.ui-footer .ui-btn-icon-bottom .ui-btn-inner { padding: .55em 3px 30px 3px; }
-.ui-mini.ui-btn-icon-bottom .ui-btn-inner,
-.ui-mini .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 30px; }
-/* Corner styling inheritance */
-.ui-btn-inner {
-       -webkit-border-radius: inherit; 
-       border-radius: inherit;
-}
-/*btn icon positioning*/
-.ui-btn-icon-notext .ui-icon { display: block; z-index: 0;}
-.ui-btn-icon-left > .ui-btn-inner > .ui-icon, .ui-btn-icon-right > .ui-btn-inner > .ui-icon { position: absolute; top: 50%; margin-top: -9px; }
-.ui-btn-icon-top .ui-btn-inner .ui-icon, .ui-btn-icon-bottom .ui-btn-inner .ui-icon { position: absolute; left: 50%; margin-left: -9px; }
-.ui-btn-icon-left .ui-icon { left: 10px; }
-.ui-btn-icon-right .ui-icon { right: 10px; }
-.ui-btn-icon-top .ui-icon { top: 10px; }
-.ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; }
-.ui-header .ui-btn-icon-left .ui-icon,
-.ui-footer .ui-btn-icon-left .ui-icon,
-.ui-mini.ui-btn-icon-left .ui-icon,
-.ui-mini .ui-btn-icon-left .ui-icon { left: 5px; }
-.ui-header .ui-btn-icon-right .ui-icon,
-.ui-footer .ui-btn-icon-right .ui-icon,
-.ui-mini.ui-btn-icon-right .ui-icon,
-.ui-mini .ui-btn-icon-right .ui-icon { right: 5px; }
-.ui-header .ui-btn-icon-top .ui-icon,
-.ui-footer .ui-btn-icon-top .ui-icon,
-.ui-mini.ui-btn-icon-top .ui-icon,
-.ui-mini .ui-btn-icon-top .ui-icon { top: 5px; }
-.ui-header .ui-btn-icon-bottom .ui-icon,
-.ui-footer .ui-btn-icon-bottom .ui-icon,
-.ui-mini.ui-btn-icon-bottom .ui-icon,
-.ui-mini .ui-btn-icon-bottom .ui-icon { bottom: 5px; }
-/*hiding native button,inputs */
-.ui-btn-hidden { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-appearance: none; cursor: pointer; background: #fff; background: rgba(255,255,255,0); filter: Alpha(Opacity=0); opacity: .1; font-size: 1px; border: none; text-indent: -9999px; }
-/* Fixes IE/WP filter alpha opacity bugs */
-.ui-disabled .ui-btn-hidden { display: none; }
-.ui-disabled { z-index: 1; }
-.ui-field-contain .ui-btn.ui-submit { margin: 0; }
-label.ui-submit { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
-@media all and (min-width: 28em){
-       .ui-field-contain label.ui-submit { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
-       .ui-field-contain .ui-btn.ui-submit { width: 78%; display: inline-block; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
-       .ui-hide-label .ui-btn.ui-submit { width: auto; display: block; }
-}
-.ui-collapsible-inset { margin: .5em 0; }
-.ui-collapsible-heading { font-size: 16px; display: block; margin: 0 -15px; padding: 0; position: relative; }
-.ui-collapsible-inset .ui-collapsible-heading { margin: 0; }
-.ui-collapsible-heading .ui-btn { text-align: left; margin: 0; border-left-width: 0; border-right-width: 0; }
-.ui-collapsible-inset .ui-collapsible-heading .ui-btn { border-right-width: 1px; border-left-width: 1px; }
-.ui-collapsible-collapsed + .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn { border-top-width: 0; }
-.ui-collapsible-set .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn { border-top-width: 1px; }
-.ui-collapsible-heading .ui-btn-inner { padding-left: 12px; padding-right: 12px; }
-.ui-collapsible-heading .ui-btn-icon-left .ui-btn-inner { padding-left: 40px; }
-.ui-collapsible-heading .ui-btn-icon-right .ui-btn-inner { padding-right: 40px; }
-.ui-collapsible-heading .ui-btn-icon-top .ui-btn-inner,
-.ui-collapsible-heading .ui-btn-icon-bottom .ui-btn-inner { text-align: center; }
-.ui-collapsible-heading .ui-btn-icon-left.ui-mini .ui-btn-inner { padding-left: 30px; }
-.ui-collapsible-heading .ui-btn-icon-right.ui-mini .ui-btn-inner { padding-right: 30px; }
-.ui-collapsible-heading .ui-btn span.ui-btn { position: absolute; left: 6px; top: 50%; margin: -12px 0 0 0; width: 20px; height: 20px; padding: 1px 0 1px 2px; text-indent: -9999px; }
-.ui-collapsible-heading .ui-btn span.ui-btn .ui-btn-inner { padding: 10px 0; }
-.ui-collapsible-heading .ui-btn span.ui-btn .ui-icon { left: 0; margin-top: -10px; }
-.ui-collapsible-heading-status { position: absolute; top: -9999px; left: 0; }
-.ui-collapsible-content {
-       display: block;
-       margin: 0 -15px;        
-       padding: 10px 15px;
-       border-left-width: 0;
-       border-right-width: 0;
-       border-top: none;      /* Overrides ui-body-* */
-       background-image: none; /* Overrides ui-body-* */
-}
-.ui-collapsible-inset .ui-collapsible-content { margin: 0; border-right-width: 1px; border-left-width: 1px; }
-.ui-collapsible-content-collapsed { display: none; }
-.ui-collapsible-set > .ui-collapsible.ui-corner-all {
-       -webkit-border-radius: 0;
-       border-radius: 0;
-}
-.ui-collapsible-heading,
-.ui-collapsible-heading > .ui-btn {
-       -webkit-border-radius: inherit; 
-       border-radius: inherit; 
-}
-.ui-collapsible-set .ui-collapsible.ui-first-child {
-       -webkit-border-top-right-radius: inherit;       
-       border-top-right-radius: inherit;
-       -webkit-border-top-left-radius: inherit;        
-       border-top-left-radius: inherit;                
-}
-.ui-collapsible-content,
-.ui-collapsible-set .ui-collapsible.ui-last-child {
-       -webkit-border-bottom-right-radius: inherit;    
-       border-bottom-right-radius: inherit;
-       -webkit-border-bottom-left-radius: inherit;     
-       border-bottom-left-radius: inherit;             
-}
-.ui-collapsible-themed-content:not(.ui-collapsible-collapsed) > .ui-collapsible-heading {
-       -webkit-border-bottom-right-radius: 0;  
-       border-bottom-right-radius: 0;
-       -webkit-border-bottom-left-radius: 0;   
-       border-bottom-left-radius: 0;           
-}
-.ui-collapsible-set { margin: .5em 0; }
-.ui-collapsible-set .ui-collapsible { margin: -1px 0 0; }
-.ui-collapsible-set .ui-collapsible.ui-first-child { margin-top: 0; }
-.ui-controlgroup, fieldset.ui-controlgroup { padding: 0; margin: .5em 0; zoom: 1; }
-.ui-controlgroup.ui-mini, fieldset.ui-controlgroup.ui-mini { margin: .25em 0; }
-.ui-field-contain .ui-controlgroup, .ui-field-contain fieldset.ui-controlgroup { margin: 0; }
-.ui-bar .ui-controlgroup { margin: 0 5px; }
-.ui-controlgroup-label { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .4em; }
-.ui-controlgroup-controls label.ui-select,
-.ui-controlgroup-controls label.ui-submit { position: absolute; left: -9999px; }
-.ui-controlgroup li { list-style: none; }
-.ui-controlgroup .ui-btn { margin: 0; }
-.ui-controlgroup .ui-btn-icon-notext { width: auto; height: auto; top: auto; }
-.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { height: 20px; padding: .6em 20px .6em 20px }
-.ui-controlgroup-horizontal .ui-btn-icon-notext .ui-btn-inner { width: 18px; }
-.ui-controlgroup.ui-mini .ui-btn-icon-notext .ui-btn-inner,
-.ui-header .ui-controlgroup .ui-btn-icon-notext .ui-btn-inner,
-.ui-footer .ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { height: 16px; padding: .55em 11px .5em 11px; }
-.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner .ui-icon { position: absolute; top: 50%; right: 50%; margin: -9px -9px 0 0; }
-.ui-controlgroup-horizontal .ui-btn-inner { text-align: center; }
-.ui-controlgroup-horizontal.ui-mini .ui-btn-inner { height: 16px; line-height: 16px; }
-.ui-controlgroup .ui-checkbox label, .ui-controlgroup .ui-radio label { font-size: 16px; }
-.ui-controlgroup-horizontal .ui-controlgroup-controls:before,
-.ui-controlgroup-horizontal .ui-controlgroup-controls:after { content: ""; display: table; }
-.ui-controlgroup-horizontal .ui-controlgroup-controls:after { clear: both; }
-.ui-controlgroup-horizontal .ui-controlgroup-controls { display: inline-block; vertical-align: middle; zoom: 1; }
-.ui-controlgroup-horizontal .ui-controlgroup-controls > .ui-btn, .ui-controlgroup-horizontal .ui-controlgroup-controls li > .ui-btn,
-.ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio,
-.ui-controlgroup-horizontal .ui-select { float: left; clear: none; margin: 0; }
-/* On IE7 the floating selects will be displayed as block if .ui-btn-text has width 100% */
-.ui-controlgroup-horizontal .ui-select .ui-btn-text { width: auto; }
-.ui-controlgroup-vertical .ui-btn {    border-bottom-width: 0; }
-.ui-controlgroup-vertical .ui-btn.ui-last-child { border-bottom-width: 1px; }
-.ui-controlgroup-horizontal .ui-btn { border-right-width: 0; }
-.ui-controlgroup-horizontal .ui-btn.ui-last-child {    border-right-width: 1px; }
-.ui-controlgroup .ui-btn-corner-all {
-       -webkit-border-radius: 0;
-       border-radius: 0;
-}
-.ui-controlgroup .ui-controlgroup-controls,
-.ui-controlgroup .ui-radio,
-.ui-controlgroup .ui-checkbox,
-.ui-controlgroup .ui-select,
-.ui-controlgroup li {
-       -webkit-border-radius: inherit;
-       border-radius: inherit;
-}
-.ui-controlgroup-vertical .ui-btn.ui-first-child {
-       -webkit-border-top-left-radius: inherit;
-       border-top-left-radius: inherit;
-       -webkit-border-top-right-radius: inherit;
-       border-top-right-radius: inherit;
-}
-.ui-controlgroup-vertical .ui-btn.ui-last-child {
-       -webkit-border-bottom-left-radius: inherit;
-       border-bottom-left-radius: inherit;
-       -webkit-border-bottom-right-radius: inherit;
-       border-bottom-right-radius: inherit;
-}
-.ui-controlgroup-horizontal .ui-btn.ui-first-child {
-       -webkit-border-top-left-radius: inherit;
-       border-top-left-radius: inherit;
-       -webkit-border-bottom-left-radius: inherit;
-       border-bottom-left-radius: inherit;
-}
-.ui-controlgroup-horizontal .ui-btn.ui-last-child {
-       -webkit-border-top-right-radius: inherit;
-       border-top-right-radius: inherit;
-       -webkit-border-bottom-right-radius: inherit;
-       border-bottom-right-radius: inherit;
-}
-.ui-controlgroup .ui-shadow:not(.ui-focus) {
-       -moz-box-shadow: none;
-       -webkit-box-shadow: none;
-       box-shadow: none;
-}
-@media all and (min-width: 28em){
-       .ui-field-contain .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
-       .ui-field-contain .ui-controlgroup-controls { width: 78%; display: inline-block; }
-       .ui-field-contain .ui-controlgroup .ui-select { width: 100%; display: block; } 
-       .ui-field-contain .ui-controlgroup-horizontal .ui-select { width: auto; }
-       .ui-hide-label .ui-controlgroup-controls { width: 100%; }
-}      
-.ui-dialog {
-        background: none !important; /* this is to ensure that dialog theming does not apply (by default at least) on the page div */
-}
-.ui-dialog-contain {
-       width: 92.5%;
-       max-width: 500px;
-       margin: 10% auto 15px auto;
-       padding: 0;
-       position: relative;
-       top: -15px;
-}
-.ui-dialog-contain > .ui-header, 
-.ui-dialog-contain > .ui-content, 
-.ui-dialog-contain > .ui-footer { 
-       display: block;
-       position: relative; 
-       width: auto;
-       margin: 0;
-}
-.ui-dialog-contain > .ui-header {
-       border: none;
-       overflow: hidden;
-       z-index: 10; 
-       padding: 0;
-}
-.ui-dialog-contain > .ui-content { 
-       padding: 15px; 
-}
-.ui-dialog-contain > .ui-footer {
-       z-index: 10; 
-       padding: 0 15px; 
-}
-.ui-popup-open .ui-header-fixed,
-.ui-popup-open .ui-footer-fixed {
-       position: absolute !important;  /* See line #553 of popup.js */
-}
-.ui-popup-screen {
-       background-image: url(data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==); /* Necessary to set some form of background to ensure element is clickable in IE6/7. While legacy IE won't understand the data-URI'd image, it ensures no additional requests occur in all other browsers with little overhead. */
-       top: 0;
-       left: 0;
-       right: 0;
-       bottom: 1px;
-       position: absolute;
-       filter: Alpha(Opacity=0);
-       opacity: 0;
-       z-index: 1099;
-}
-.ui-popup-screen.in {
-       opacity: 0.5;
-       filter: Alpha(Opacity=50);
-}
-.ui-popup-screen.out {
-       opacity: 0;
-       filter: Alpha(Opacity=0);
-}
-.ui-popup-container {
-       z-index: 1100;
-       display: inline-block;
-       position: absolute;
-       padding: 0;
-       outline: 0;
-}
-.ui-popup {
-       position: relative;
-}
-.ui-popup.ui-content,
-.ui-popup .ui-content {
-       overflow: visible;
-}
-.ui-popup > p,
-.ui-popup > h1,
-.ui-popup > h2,
-.ui-popup > h3,
-.ui-popup > h4,
-.ui-popup > h5,
-.ui-popup > h6 {
-       margin: .5em 7px;
-}
-.ui-popup > span {
-       display: block;
-       margin: .5em 7px;
-}
-.ui-popup .ui-title {
-       font-size: 16px;
-       font-weight: bold;
-       margin-top: .5em;
-       margin-bottom: .5em;
-}
-.ui-popup-container .ui-content > p,
-.ui-popup-container .ui-content > h1,
-.ui-popup-container .ui-content > h2,
-.ui-popup-container .ui-content > h3,
-.ui-popup-container .ui-content > h4,
-.ui-popup-container .ui-content > h5,
-.ui-popup-container .ui-content > h6 {
-       margin: .5em 0;
-}
-.ui-popup-container .ui-content > span {
-       margin: 0;
-}
-.ui-popup-container .ui-content > p:first-child,
-.ui-popup-container .ui-content > h1:first-child,
-.ui-popup-container .ui-content > h2:first-child,
-.ui-popup-container .ui-content > h3:first-child,
-.ui-popup-container .ui-content > h4:first-child,
-.ui-popup-container .ui-content > h5:first-child,
-.ui-popup-container .ui-content > h6:first-child {
-       margin-top: 0;
-}
-.ui-popup-container .ui-content > p:last-child,
-.ui-popup-container .ui-content > h1:last-child,
-.ui-popup-container .ui-content > h2:last-child,
-.ui-popup-container .ui-content > h3:last-child,
-.ui-popup-container .ui-content > h4:last-child,
-.ui-popup-container .ui-content > h5:last-child,
-.ui-popup-container .ui-content > h6:last-child {
-       margin-bottom: 0;
-}
-.ui-popup > img {
-       width: auto;
-       height: auto;
-       max-width: 100%;
-       max-height: 100%;
-       vertical-align: middle;
-}
-.ui-popup:not(.ui-content) > img:only-child,
-.ui-popup:not(.ui-content) > .ui-btn-left:first-child + img:last-child,
-.ui-popup:not(.ui-content) > .ui-btn-right:first-child + img:last-child {
-       -webkit-border-radius: inherit;
-       border-radius: inherit;
-}
-.ui-popup iframe {
-       vertical-align: middle;
-}
-@media all and (min-width: 28em){
-       .ui-popup .ui-field-contain label.ui-submit,
-       .ui-popup .ui-field-contain .ui-controlgroup-label,
-       .ui-popup .ui-field-contain label.ui-select,
-       .ui-popup .ui-field-contain label.ui-input-text {
-               font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em;
-       }
-       .ui-popup .ui-field-contain .ui-btn.ui-submit,
-       .ui-popup .ui-field-contain .ui-controlgroup-controls,
-       .ui-popup .ui-field-contain .ui-select,
-       .ui-popup .ui-field-contain input.ui-input-text,
-       .ui-popup .ui-field-contain textarea.ui-input-text,
-       .ui-popup .ui-field-contain .ui-input-search {
-               width: 100%; display: block;
-       }
-}
-.ui-popup > .ui-btn-left,
-.ui-popup > .ui-btn-right {
-       position: absolute; 
-       top: -9px;
-       margin: 0;
-       z-index: 1101;
-}
-.ui-popup > .ui-btn-left { left: -9px; }
-.ui-popup > .ui-btn-right { right: -9px; }
-.ui-popup-hidden { top: -99999px; left: -9999px; }
-.ui-checkbox, .ui-radio { position: relative; clear: both; margin: 0; z-index: 1; }
-.ui-checkbox .ui-btn, .ui-radio .ui-btn { text-align: left; z-index: 2; }
-.ui-controlgroup .ui-checkbox .ui-btn, .ui-controlgroup .ui-radio .ui-btn { margin: 0; }
-.ui-checkbox .ui-btn-inner, .ui-radio .ui-btn-inner { white-space: normal; }
-.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner { padding-left: 45px; }
-.ui-checkbox .ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-left .ui-btn-inner { padding-left: 36px; }
-.ui-checkbox .ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; }
-.ui-checkbox .ui-mini.ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 36px; }
-.ui-checkbox .ui-btn-icon-top .ui-btn-inner, .ui-radio .ui-btn-icon-top .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; }
-.ui-checkbox .ui-btn-icon-bottom .ui-btn-inner, .ui-radio .ui-btn-icon-bottom .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; }
-.ui-checkbox .ui-icon, .ui-radio .ui-icon { top: 1.1em; }
-.ui-checkbox .ui-btn-icon-left .ui-icon, .ui-radio .ui-btn-icon-left .ui-icon { left: 15px; }
-.ui-checkbox .ui-mini.ui-btn-icon-left .ui-icon, .ui-radio .ui-mini.ui-btn-icon-left .ui-icon { left: 9px; }
-.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; }
-.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; }
-.ui-checkbox .ui-btn-icon-top .ui-icon, .ui-radio .ui-btn-icon-top .ui-icon { top: 10px; }
-.ui-checkbox .ui-btn-icon-bottom .ui-icon, .ui-radio .ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; }
-.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; }
-.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; }
-.ui-controlgroup-horizontal .ui-checkbox .ui-icon,
-.ui-controlgroup-horizontal .ui-radio .ui-icon { display: none; }
-.ui-controlgroup-horizontal .ui-checkbox .ui-btn-inner,
-.ui-controlgroup-horizontal .ui-radio .ui-btn-inner { padding: .6em 20px; }
-.ui-controlgroup-horizontal .ui-checkbox .ui-mini .ui-btn-inner,
-.ui-controlgroup-horizontal .ui-radio .ui-mini .ui-btn-inner { padding: .55em 11px .5em; }
-/* input, label positioning */
-.ui-checkbox input,.ui-radio input { position:absolute; left:20px; top:50%; width: 10px; height: 10px; margin:-5px 0 0 0; outline: 0 !important; z-index: 1; }
-.ui-field-contain, fieldset.ui-field-contain { padding: .8em 0; margin: 0; border-width: 0 0 1px 0; overflow: visible; }
-.ui-field-contain:last-child { border-bottom-width: 0; }
-.ui-field-contain { max-width: 100%; } /* This prevents horizontal scrollbar in IE7 */
-@media all and (min-width: 28em){
-       .ui-field-contain, .ui-mobile fieldset.ui-field-contain { border-width: 0; padding: 0; margin: 1em 0; }
-}
-.ui-select { display: block; position: relative; }
-.ui-select select { position: absolute; left: -9999px; top: -9999px; }
-.ui-select .ui-btn { opacity: 1; }
-.ui-field-contain .ui-select .ui-btn { margin: 0; }
-/* Fixes #2588: When Windows Phone 7.5 (Mango) tries to calculate a numeric opacity for a select (including "inherit") without explicitly specifying an opacity on the parent to give it context, a bug appears where clicking elsewhere on the page after opening the select will open the select again. */
-.ui-select .ui-btn select { cursor: pointer; -webkit-appearance: none; left: 0; top:0; width: 100%; min-height: 1.5em; min-height: 100%; height: 3em; max-height: 100%; filter: Alpha(Opacity=0); opacity: 0; z-index: 2; }
-.ui-select .ui-disabled { opacity: .3; }
-/* Display none because of issues with IE/WP's filter alpha opacity */
-.ui-select .ui-disabled select { display: none; }
-@-moz-document url-prefix() { .ui-select .ui-btn select { opacity: 0.0001; }}
-.ui-select .ui-btn.ui-select-nativeonly { border-radius: 0; border: 0; }
-.ui-select .ui-btn.ui-select-nativeonly select { opacity: 1; text-indent: 0; display: block; }
-.ui-select .ui-disabled.ui-select-nativeonly .ui-btn-inner { opacity: 0; }
-.ui-select .ui-btn-icon-right .ui-btn-inner, .ui-select .ui-li-has-count .ui-btn-inner { padding-right: 45px; }
-.ui-select .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 32px; }
-.ui-select .ui-btn-icon-right.ui-li-has-count .ui-btn-inner { padding-right: 80px; }
-.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-btn-inner { padding-right: 67px; }
-.ui-select .ui-btn-icon-right .ui-icon { right: 15px; }
-.ui-select .ui-mini.ui-btn-icon-right .ui-icon { right: 7px; }
-.ui-select .ui-btn-icon-right.ui-li-has-count .ui-li-count { right: 45px; }
-.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-li-count { right: 32px; }
-/* labels */
-label.ui-select { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
-/*listbox*/
-.ui-select .ui-btn-text, .ui-selectmenu .ui-btn-text { display: block; min-height: 1em; overflow: hidden !important;
-/* This !important is required for iPad Safari specifically. See https://github.com/jquery/jquery-mobile/issues/2647 */ }
-.ui-select .ui-btn-text { text-overflow: ellipsis; }
-.ui-selectmenu { padding: 6px; min-width: 160px; }
-.ui-selectmenu .ui-listview { margin: 0; }
-.ui-selectmenu .ui-btn.ui-li-divider { cursor: default; }
-.ui-screen-hidden, .ui-selectmenu-list .ui-li .ui-icon { display: none; }
-.ui-selectmenu-list .ui-li .ui-icon { display: block; }
-.ui-li.ui-selectmenu-placeholder { display: none; }
-.ui-selectmenu .ui-header { margin: 0; padding: 0; }
-.ui-selectmenu.ui-popup .ui-header { -webkit-border-top-left-radius: 0; border-top-left-radius: 0; -webkit-border-top-right-radius: 0; border-top-right-radius: 0; }
-.ui-selectmenu .ui-header .ui-title { margin: 0.6em 46px 0.8em; }
-@media all and (min-width: 28em){
-       .ui-field-contain label.ui-select { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
-       .ui-field-contain .ui-select { width: 78%; display: inline-block; }
-       .ui-hide-label .ui-select { width: 100%; } 
-}
-/* when no placeholder is defined in a multiple select, the header height doesn't even extend past the close button.  this shim's content in there */
-.ui-selectmenu .ui-header h1:after { content: '.'; visibility: hidden; }
-label.ui-input-text { font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em; }
-input.ui-input-text, textarea.ui-input-text { background-image: none; padding: .4em; margin: .5em 0; min-height: 1.4em; line-height: 1.4em; font-size: 16px; display: block; width: 100%; outline: 0; }
-input.ui-mini, .ui-mini input, textarea.ui-mini { font-size: 14px; }
-div.ui-input-text input.ui-input-text, div.ui-input-text textarea.ui-input-text,
-.ui-input-search input.ui-input-text { border: none; width: 100%; padding: .4em 0; margin: 0; display: block; background: transparent none; outline: 0 !important; }
-.ui-input-search, div.ui-input-text { margin: .5em 0; background-image: none; position: relative; }
-.ui-input-search { padding: 0 30px; }
-div.ui-input-text { padding: 0 .4em; }
-div.ui-input-has-clear { padding: 0 30px 0 .4em; }
-input.ui-input-text.ui-mini, textarea.ui-input-text.ui-mini,
-.ui-input-search.ui-mini, div.ui-input-text.ui-mini { margin: .25em 0; }
-.ui-field-contain input.ui-input-text, .ui-field-contain textarea.ui-input-text,
-.ui-field-contain .ui-input-search, .ui-field-contain div.ui-input-text { margin: 0; }
-textarea.ui-input-text { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
-input.ui-input-text { -webkit-appearance: none; }
-textarea.ui-input-text { height: 50px; -webkit-transition: height 200ms linear; -moz-transition: height 200ms linear; -o-transition: height 200ms linear; transition: height 200ms linear; }
-textarea.ui-mini { height: 45px; }
-.ui-icon-searchfield:after { position: absolute; left: 7px; top: 50%; margin-top: -9px; content: ""; width: 18px; height: 18px; opacity: .5; }
-.ui-input-search .ui-input-clear, .ui-input-text .ui-input-clear { position: absolute; right: 0; top: 50%; margin-top: -13px; }
-.ui-mini .ui-input-clear { right: -3px; }
-.ui-input-search .ui-input-clear-hidden, .ui-input-text .ui-input-clear-hidden { display: none; }
-/* Resolves issue #5166: Added to support issue introduced in Firefox 15. We can likely remove this in the future. */
-input::-moz-placeholder, textarea::-moz-placeholder { color: #aaa; }
-/* Resolves issue #5131: Width of textinput depends on its type, for Android 4.1 */
-input[type=number]::-webkit-outer-spin-button { margin: 0; }
-@media all and (min-width: 28em){
-       .ui-field-contain label.ui-input-text { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0 }
-       .ui-field-contain input.ui-input-text,
-       .ui-field-contain textarea.ui-input-text,
-       .ui-field-contain .ui-input-search,
-       .ui-field-contain div.ui-input-text { width: 78%; display: inline-block; }
-       .ui-field-contain .ui-input-search,
-       .ui-field-contain div.ui-input-text { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
-       .ui-hide-label input.ui-input-text,
-       .ui-hide-label textarea.ui-input-text,
-       .ui-hide-label .ui-input-search,
-       .ui-hide-label div.ui-input-text,
-       .ui-input-search input.ui-input-text,
-       div.ui-input-text input.ui-input-text { width: 100%; }
-}
-.ui-rangeslider {
-       zoom: 1;
-       margin: 0;
-}
-.ui-rangeslider:before,
-.ui-rangeslider:after {
-       content: "";
-       display: table;
-}
-.ui-rangeslider:after {
-       clear: both;
-}
-/* Margin-top/bottom: .5em * 16px/14px to make it equal to ui-rangeslider-sliders margin (input font-size is 14px) */
-.ui-rangeslider input.ui-input-text.ui-slider-input {
-       margin: .57143em 0;
-}
-.ui-rangeslider.ui-mini input.ui-slider-input {
-       margin: .28571em 0;
-}
-.ui-rangeslider input.ui-slider-input.ui-rangeslider-last {
-       float: right;
-}
-.ui-rangeslider .ui-rangeslider-sliders {
-       position: relative;
-       overflow: visible;
-       height: 30px;
-       margin: .5em 68px;
-}
-.ui-rangeslider.ui-mini .ui-rangeslider-sliders {
-       margin: .25em 68px;
-}
-.ui-field-contain .ui-rangeslider input.ui-slider-input,
-.ui-field-contain .ui-rangeslider.ui-mini input.ui-slider-input,
-.ui-field-contain .ui-rangeslider .ui-rangeslider-sliders,
-.ui-field-contain .ui-rangeslider.ui-mini .ui-rangeslider-sliders {
-       margin-top: 0;
-       margin-bottom: 0;
-}
-.ui-rangeslider .ui-rangeslider-sliders .ui-slider-track {
-       position: absolute;
-       top: 6px;
-       right: 0;
-       left: 0;
-       margin: 0;
-}
-.ui-rangeslider.ui-mini .ui-rangeslider-sliders .ui-slider-track {
-       top: 8px;
-}
-.ui-rangeslider .ui-slider-track:first-child .ui-slider-bg {
-       display: none;
-}
-.ui-rangeslider .ui-rangeslider-sliders .ui-slider-track:first-child {
-       background-color: transparent;
-       background: none;
-       border-width: 0;
-       height: 0;
-}
-/* this makes ie6 and ie7 set height to 0 to fix z-index problem */
-html >/**/body .ui-rangeslider .ui-rangeslider-sliders .ui-slider-track:first-child {
-       height: 15px;
-       border-width: 1px;
-}
-html >/**/body .ui-rangeslider.ui-mini .ui-rangeslider-sliders .ui-slider-track:first-child {
-       height: 12px;
-}
-@media all and (min-width: 28em){
-       .ui-field-contain .ui-rangeslider label.ui-slider {
-               float: left;
-       }
-       .ui-field-contain .ui-rangeslider input.ui-slider-input {
-               position: relative;
-               z-index: 1;
-       }
-       .ui-field-contain .ui-rangeslider input.ui-slider-input.ui-rangeslider-first,
-       .ui-field-contain .ui-rangeslider.ui-mini input.ui-slider-input.ui-rangeslider-first {
-               margin-right: 17px;
-       }
-       .ui-field-contain .ui-rangeslider .ui-rangeslider-sliders,
-       .ui-field-contain .ui-rangeslider.ui-mini .ui-rangeslider-sliders {
-               float: left;
-               width: 78%;
-               margin: 0 -68px;
-       }
-       .ui-field-contain .ui-rangeslider .ui-slider-track,
-       .ui-field-contain .ui-rangeslider.ui-mini .ui-slider-track {
-               right: 68px;
-               left: 68px;
-       }
-       .ui-field-contain.ui-hide-label .ui-rangeslider input.ui-slider-input.ui-rangeslider-first {
-               margin: 0;
-       }
-       .ui-field-contain.ui-hide-label .ui-rangeslider .ui-rangeslider-sliders,
-       .ui-field-contain.ui-hide-label .ui-rangeslider.ui-mini .ui-rangeslider-sliders {
-               width: auto;
-               float: none;
-               margin: 0 68px;
-       }
-       .ui-field-contain.ui-hide-label .ui-rangeslider .ui-slider-track,
-       .ui-field-contain.ui-hide-label .ui-rangeslider.ui-mini .ui-slider-track {
-               right: 0;
-               left: 0;
-       }
-}
-.ui-listview { margin: 0; }
-ol.ui-listview, ol.ui-listview .ui-li-divider { counter-reset: listnumbering; }
-.ui-content .ui-listview, .ui-panel-inner > .ui-listview { margin: -15px; }
-.ui-collapsible-content > .ui-listview { margin: -10px -15px; }
-.ui-content .ui-listview-inset, .ui-panel-inner .ui-listview-inset { margin: 1em 0; }
-.ui-collapsible-content .ui-listview-inset { margin: .5em 0; }
-.ui-listview, .ui-li { list-style: none; padding: 0; }
-.ui-li, .ui-li.ui-field-contain { display: block; margin: 0; position: relative; overflow: visible; text-align: left; border-width: 0; border-top-width: 1px; }
-.ui-li.ui-btn, .ui-li.ui-field-contain, .ui-li-divider, .ui-li-static { margin: 0; }
-.ui-listview-inset .ui-li { border-right-width: 1px; border-left-width: 1px; }
-.ui-li.ui-last-child, .ui-li.ui-field-contain.ui-last-child { border-bottom-width: 1px; }
-.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) > .ui-li.ui-first-child { border-top-width: 0; }
-.ui-collapsible-themed-content .ui-listview:not(.ui-listview-inset) > .ui-li.ui-last-child { border-bottom-width: 0; }
-.ui-li .ui-btn-text a.ui-link-inherit { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
-.ui-li-static { background-image: none; }
-.ui-li-divider { padding: .5em 15px; font-size: 14px; font-weight: bold; }
-ol.ui-listview .ui-link-inherit:before, ol.ui-listview .ui-li-static:before, .ui-li-dec { font-size: .8em; display: inline-block; padding-right: .3em; font-weight: normal; counter-increment: listnumbering; content: counter(listnumbering) ". "; }
-ol.ui-listview .ui-li-jsnumbering:before { content: "" !important; } /* to avoid chance of duplication */
-.ui-listview .ui-li > .ui-btn-text {
-       -webkit-border-radius: inherit; 
-       border-radius: inherit;
-}
-.ui-listview > .ui-li.ui-first-child,
-.ui-listview .ui-btn.ui-first-child > .ui-li > .ui-btn-text > .ui-link-inherit {
-       -webkit-border-top-right-radius: inherit;       
-       border-top-right-radius: inherit;
-       -webkit-border-top-left-radius: inherit;
-       border-top-left-radius: inherit;
-}
-.ui-listview > .ui-li.ui-last-child,
-.ui-listview .ui-btn.ui-last-child > .ui-li > .ui-btn-text > .ui-link-inherit,
-.ui-collapsible-content > .ui-listview:not(.ui-listview-inset),
-.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li.ui-last-child {
-       -webkit-border-bottom-right-radius: inherit;
-       border-bottom-right-radius: inherit;
-       -webkit-border-bottom-left-radius: inherit;
-       border-bottom-left-radius: inherit;
-}
-.ui-listview > .ui-li.ui-first-child .ui-li-link-alt {
-       -webkit-border-top-right-radius: inherit;       
-       border-top-right-radius: inherit;       
-}
-.ui-listview > .ui-li.ui-last-child .ui-li-link-alt {
-       -webkit-border-bottom-right-radius: inherit;
-       border-bottom-right-radius: inherit;    
-}
-.ui-listview > .ui-li.ui-first-child .ui-li-thumb:not(.ui-li-icon) {
-       -webkit-border-top-left-radius: inherit;
-       border-top-left-radius: inherit;        
-}
-.ui-listview > .ui-li.ui-last-child .ui-li-thumb:not(.ui-li-icon) {
-       -webkit-border-bottom-left-radius: inherit;
-       border-bottom-left-radius: inherit;     
-}
-.ui-li>.ui-btn-inner { display: block; position: relative; padding: 0; }
-.ui-li .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li { padding: .7em 15px; display: block; }
-.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-thumb  { min-height: 59px; padding-left: 100px; }
-.ui-li-has-icon .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-icon { min-height: 20px; padding-left: 40px; }
-.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-count, .ui-li-divider.ui-li-has-count { padding-right: 45px; }
-.ui-li-has-arrow .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow { padding-right: 40px; }
-.ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow.ui-li-has-count { padding-right: 75px; }
-.ui-li-heading { font-size: 16px; font-weight: bold; display: block; margin: .6em 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
-.ui-li-desc { font-size: 12px; font-weight: normal; display: block; margin: -.5em 0 .6em; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
-ol.ui-listview > .ui-li .ui-li-heading { display: inline-block; width: 100%; margin-left: -1.3em; text-indent: 1.3em; vertical-align: middle; }
-ol.ui-listview > .ui-li .ui-li-desc:not(.ui-li-aside) { text-indent: 1.55em; }
-.ui-li-thumb, .ui-listview .ui-li-icon { position: absolute; left: 1px; top: 0; max-height: 80px; max-width: 80px; }
-.ui-listview .ui-li-icon { max-height: 16px; max-width: 16px; left: 10px; top: .9em; }
-.ui-li-thumb, .ui-listview .ui-li-icon, .ui-li-content { float: left; margin-right: 10px; }
-.ui-li-aside { float: right; width: 50%; text-align: right; margin: .3em 0; }
-@media all and (min-width: 480px){
-        .ui-li-aside { width: 45%; }
-}       
-.ui-li-divider { cursor: default; }
-.ui-li-has-alt .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt { padding-right: 53px; }
-.ui-li-has-alt.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt.ui-li-has-count { padding-right: 88px; }
-.ui-li-has-count .ui-li-count { position: absolute; font-size: 11px; font-weight: bold; padding: .2em .5em; top: 50%; margin-top: -.9em; right: 10px; }
-.ui-li-has-count.ui-li-divider .ui-li-count, .ui-li-has-count .ui-link-inherit .ui-li-count { margin-top: -.95em; }
-.ui-li-has-arrow.ui-li-has-count .ui-li-count { right: 40px; }
-.ui-li-has-alt.ui-li-has-count .ui-li-count { right: 53px; }
-.ui-li-link-alt { position: absolute; width: 40px; height: 100%; border-width: 0; border-left-width: 1px; top: 0; right: 0; margin: 0; padding: 0; z-index: 2; }
-.ui-li-link-alt .ui-btn { overflow: hidden; position: absolute; right: 8px; top: 50%; margin: -13px 0 0 0; border-bottom-width: 1px; z-index: -1;}
-.ui-li-link-alt .ui-btn-inner { padding: 0; height: 100%; position: absolute; width: 100%; top: 0; left: 0;}
-.ui-li-link-alt .ui-btn .ui-icon { right: 50%; margin-right: -9px; }
-.ui-li-link-alt .ui-btn-icon-notext .ui-btn-inner .ui-icon { position: absolute; top: 50%; margin-top: -9px; }
-.ui-listview * .ui-btn-inner > .ui-btn > .ui-btn-inner { border-top: 0; }
-.ui-listview-filter { border-width: 0; overflow: hidden; margin: -15px -15px 15px -15px; }
-.ui-collapsible-content .ui-listview-filter { margin: -10px -15px 10px -15px; border-bottom: inherit; }
-.ui-listview-filter-inset { margin: -15px -5px; background: transparent; }
-.ui-collapsible-content .ui-listview-filter-inset { margin: -5px; border-bottom-width: 0; }
-.ui-listview-filter .ui-input-search { margin: 5px; width: auto; display: block; }
-.ui-li.ui-screen-hidden{ display:none; }
-/* Odd iPad positioning issue. */
-@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
-    .ui-li .ui-btn-text { overflow:  visible; }
-}
-label.ui-slider {
-       font-size: 16px;
-       line-height: 1.4;
-       font-weight: normal;
-       margin: 0;
-       display: block;
-}
-.ui-field-contain label.ui-slider {
-       margin-bottom: .4em;
-}
-div.ui-slider {
-       height: 30px;
-       margin: .5em 0;
-       zoom: 1;
-}
-div.ui-slider.ui-mini {
-       margin: .25em 0;
-}
-.ui-field-contain div.ui-slider,
-.ui-field-contain div.ui-slider.ui-mini {
-       margin: 0;
-}
-div.ui-slider:before, div.ui-slider:after {
-       content: "";
-       display: table;
-}
-div.ui-slider:after {
-       clear: both;
-}
-/* High level of specificity to override Textinput CSS. */
-input.ui-input-text.ui-slider-input {
-       display: block;
-       float: left;
-       margin: 0;
-       padding: 4px;
-       width: 40px;
-       height: 22px;
-       line-height: 22px;
-       font-size: 14px;
-       border-width: 0;
-       background-image: none;
-       font-weight: bold;
-       text-align: center;
-       vertical-align: text-bottom;
-       outline: 0;
-       -webkit-box-sizing: content-box;
-       -moz-box-sizing: content-box;
-       -ms-box-sizing: content-box;
-       box-sizing: content-box;
-}
-.ui-slider-input::-webkit-outer-spin-button,
-.ui-slider-input::-webkit-inner-spin-button {
-       -webkit-appearance: none;
-       margin: 0;
-}
-.ui-slider-track,
-.ui-slider-switch {
-       position: relative;
-       overflow: visible;
-       height: 15px;
-       margin: 0 15px 0 68px;
-       top: 6px;
-}
-.ui-slider-track.ui-mini {
-       height: 12px;
-       top: 8px;
-}
-.ui-slider-bg {
-       border: none;
-       height: 100%;
-}
-/* High level of specificity to override button margins in grids */
-.ui-slider-track .ui-btn.ui-slider-handle,
-.ui-slider-switch .ui-btn.ui-slider-handle {
-       position: absolute;
-       z-index: 1;
-       top: 50%;
-       width: 28px;
-       height: 28px;
-       margin: -15px 0 0 -15px;
-       outline: 0;
-}
-.ui-slider-track.ui-mini .ui-slider-handle {
-       height: 14px;
-       width: 14px;
-       margin: -8px 0 0 -7px;
-}
-.ui-slider-handle .ui-btn-inner {
-       padding: 0;
-       height: 100%;
-}
-.ui-slider-track.ui-mini .ui-slider-handle .ui-btn-inner {
-       height: 30px;
-       width: 30px;
-       padding: 0;
-       margin: -9px 0 0 -9px;
-       border-top: none;
-}
-select.ui-slider-switch {
-       display: none;
-}
-div.ui-slider-switch {
-       display: inline-block;
-       height: 32px;
-       width: 5.8em;
-       margin: .5em 0;
-       top: 0;
-}
-/* reset the clearfix */
-div.ui-slider-switch:before, div.ui-slider-switch:after {
-       display: none;
-       clear: none;
-}
-div.ui-slider-switch.ui-mini {
-       width: 5em;
-       height: 29px;
-       margin: .25em 0;
-       top: 0;
-}
-.ui-field-contain .ui-slider-switch,
-.ui-field-contain .ui-slider-switch.ui-mini {
-       margin: 0;
-}
-.ui-slider-inneroffset {
-       margin: 0 16px;
-       position: relative;
-       z-index: 1;
-}
-.ui-slider-switch.ui-mini .ui-slider-inneroffset {
-       margin: 0 15px 0 14px;
-}
-.ui-slider-switch .ui-btn.ui-slider-handle {
-       margin: 1px 0 0 -15px;
-}
-.ui-slider-switch.ui-mini .ui-slider-handle {
-       width: 25px;
-       height: 25px;
-       margin: 1px 0 0 -13px;
-       padding: 0;
-}
-.ui-slider-handle-snapping {
-       -webkit-transition: left 70ms linear;
-       -moz-transition: left 70ms linear;
-}
-.ui-slider-switch.ui-mini .ui-slider-handle .ui-btn-inner {
-       height: 30px;
-       width: 30px;
-       padding: 0;
-       margin: 0;
-       border-top: none;
-}
-.ui-slider-switch .ui-slider-label {
-       position: absolute;
-       text-align: center;
-       width: 100%;
-       overflow: hidden;
-       font-size: 16px;
-       top: 0;
-       line-height: 2;
-       min-height: 100%;
-       border-width: 0;
-       white-space: nowrap;
-       cursor: pointer;
-}
-.ui-slider-switch.ui-mini .ui-slider-label {
-       font-size: 14px;
-}
-.ui-slider-switch .ui-slider-label-a {
-       z-index: 1;
-       left: 0;
-       text-indent: -1.5em;
-}
-.ui-slider-switch .ui-slider-label-b {
-       z-index: 0;
-       right: 0;
-       text-indent: 1.5em;
-}
-@media all and (min-width: 28em){
-       .ui-field-contain label.ui-slider {
-               vertical-align: top;
-               display: inline-block;
-               width: 20%;
-               margin: 0 2% 0 0;
-       }
-       .ui-field-contain div.ui-slider {
-               display: inline-block;
-               width: 78%;
-       }
-       .ui-field-contain.ui-hide-label div.ui-slider {
-               display: block;
-               width: auto;
-       }
-       .ui-field-contain div.ui-slider-switch,
-       .ui-field-contain.ui-hide-label div.ui-slider-switch {
-               display: inline-block;
-               width: 5.8em;
-       }
-       .ui-field-contain div.ui-slider-switch.ui-mini {
-               width: 5em;
-       }
-}      
-.ui-table {
-   border: 0;
-   border-collapse: collapse;
-   padding: 0;
-   width: 100%;
-}
-.ui-table th,
-.ui-table td {
-  line-height: 1.5em;
-  text-align: left;
-  padding: .4em .5em;
-  vertical-align:top;
-}
-.ui-table th .ui-btn,
-.ui-table td .ui-btn {
-       line-height: normal;
-}
-.ui-table th {
-  font-weight: bold;
-}
-.ui-table caption {
-  text-align:left;
-  margin-bottom:1.4em;
-  opacity: .5;
-}
-/* Add strokes between each row */
-.table-stroke thead th {
-  border-bottom: 1px solid #d6d6d6; /* non-RGBA fallback */
-  border-bottom: 1px solid rgba(0, 0, 0, .1);
-}
-.table-stroke tbody th,
-.table-stroke tbody td {
-  border-bottom: 1px solid #e6e6e6; /* non-RGBA fallback  */
-  border-bottom: 1px solid rgba(0, 0, 0, .05);
-}
-/* Add alternating row stripes */
-.table-stripe tbody tr:nth-child(odd) td,
-.table-stripe tbody tr:nth-child(odd) th {
-  background-color: #eeeeee; /* non-RGBA fallback  */
-  background-color: rgba(0,0,0,0.04);
-}
-/* Add stroke to the header and last item */
-.table-stripe thead th,
-.table-stripe tbody tr:last-child {
-  border-bottom: 1px solid #d6d6d6; /* non-RGBA fallback  */
-  border-bottom: 1px solid rgba(0, 0, 0, .1);
-}
-/*
- Styles for the table columntoggle mode
-*/
-.ui-table-columntoggle-btn {
-       float: right;
-       margin-bottom:.8em;
-}
-/* Remove top/bottom margins around the fieldcontain on check list */
-.ui-table-columntoggle-popup fieldset {
-       margin:0;
-}
-/* Hide all prioritized columns by default */
-@media only all {
-       th.ui-table-priority-6,
-       td.ui-table-priority-6,
-       th.ui-table-priority-5,
-       td.ui-table-priority-5,
-       th.ui-table-priority-4,
-       td.ui-table-priority-4,
-       th.ui-table-priority-3,
-       td.ui-table-priority-3,
-       th.ui-table-priority-2,
-       td.ui-table-priority-2,
-       th.ui-table-priority-1,
-       td.ui-table-priority-1 {
-               display: none;
-       }
-}
-/* Preset breakpoints if ".ui-responsive" class added to table */
-/* Show priority 1 at 320px (20em x 16px) */
-@media screen and (min-width: 20em) {
-       .ui-table-columntoggle.ui-responsive th.ui-table-priority-1,
-       .ui-table-columntoggle.ui-responsive td.ui-table-priority-1 {
-               display: table-cell;
-       }
-}
-/* Show priority 2 at 480px (30em x 16px) */
-@media screen and (min-width: 30em) {
-       .ui-table-columntoggle.ui-responsive th.ui-table-priority-2,
-       .ui-table-columntoggle.ui-responsive td.ui-table-priority-2 {
-               display: table-cell;
-       }
-}
-/* Show priority 3 at 640px (40em x 16px) */
-@media screen and (min-width: 40em) {
-       .ui-table-columntoggle.ui-responsive th.ui-table-priority-3,
-       .ui-table-columntoggle.ui-responsive td.ui-table-priority-3 {
-               display: table-cell;
-       }
-}
-/* Show priority 4 at 800px (50em x 16px) */
-@media screen and (min-width: 50em) {
-       .ui-table-columntoggle.ui-responsive th.ui-table-priority-4,
-       .ui-table-columntoggle.ui-responsive td.ui-table-priority-4 {
-               display: table-cell;
-       }
-}
-/* Show priority 5 at 960px (60em x 16px) */
-@media screen and (min-width: 60em) {
-       .ui-table-columntoggle.ui-responsive th.ui-table-priority-5,
-       .ui-table-columntoggle.ui-responsive td.ui-table-priority-5 {
-               display: table-cell;
-       }
-}
-/* Show priority 6 at 1,120px (70em x 16px) */
-@media screen and (min-width: 70em) {
-       .ui-table-columntoggle.ui-responsive th.ui-table-priority-6,
-       .ui-table-columntoggle.ui-responsive td.ui-table-priority-6 {
-               display: table-cell;
-       }
-}
-/* Unchecked manually: Always hide */
-.ui-table-columntoggle th.ui-table-cell-hidden,
-.ui-table-columntoggle td.ui-table-cell-hidden,
-.ui-table-columntoggle.ui-responsive th.ui-table-cell-hidden,
-.ui-table-columntoggle.ui-responsive td.ui-table-cell-hidden {
-       display: none;
-}
-/* Checked manually: Always show */
-.ui-table-columntoggle th.ui-table-cell-visible,
-.ui-table-columntoggle td.ui-table-cell-visible,
-.ui-table-columntoggle.ui-responsive th.ui-table-cell-visible,
-.ui-table-columntoggle.ui-responsive td.ui-table-cell-visible {
-       display: table-cell;
-}
-/*
- Styles for the table columntoggle mode
-*/
-.ui-table-reflow td .ui-table-cell-label,
-.ui-table-reflow th .ui-table-cell-label { 
-       display: none;
-}
-/* Mobile first styles: Begin with the stacked presentation at narrow widths */ 
-@media only all {
-       /* Hide the table headers */ 
-       .ui-table-reflow thead td, 
-       .ui-table-reflow thead th {
-               display: none;
-       }
-       /* Show the table cells as a block level element */ 
-       .ui-table-reflow td,
-       .ui-table-reflow th { 
-               text-align: left;
-               display: block;
-       }
-       /* Add a fair amount of top margin to visually separate each row when stacked */  
-       .ui-table-reflow tbody th {
-               margin-top: 3em;
-       }
-       /* Make the label elements a percentage width */ 
-       .ui-table-reflow td .ui-table-cell-label,
-       .ui-table-reflow th .ui-table-cell-label { 
-               display: block;
-               padding: .4em; 
-               min-width: 30%; 
-               display: inline-block;
-               margin: -.4em 1em -.4em -.4em;
-       }
-       /* For grouped headers, have a different style to visually separate the levels by classing the first label in each col group */ 
-       .ui-table-reflow th .ui-table-cell-label-top,
-       .ui-table-reflow td .ui-table-cell-label-top {
-               display: block;
-               padding: .4em 0;
-               margin: .4em 0;
-               text-transform: uppercase;
-               font-size: .9em;
-               font-weight: normal;
-       }
-}
-/* Breakpoint to show as a standard table at 560px (35em x 16px) or wider */ 
-@media ( min-width: 35em ) {
-       /* Fixes table rendering when switching between breakpoints in Safari <= 5. See https://github.com/jquery/jquery-mobile/issues/5380 */
-       .ui-table-reflow.ui-responsive {
-               display: table-row-group;
-       }
-       /* Show the table header rows */ 
-       .ui-table-reflow.ui-responsive td,
-       .ui-table-reflow.ui-responsive th,
-       .ui-table-reflow.ui-responsive tbody th,
-       .ui-table-reflow.ui-responsive tbody td,
-       .ui-table-reflow.ui-responsive thead td,
-       .ui-table-reflow.ui-responsive thead th {
-               display: table-cell;
-               margin: 0;
-       }
-       /* Hide the labels in each cell */ 
-       .ui-table-reflow.ui-responsive td .ui-table-cell-label,
-       .ui-table-reflow.ui-responsive th .ui-table-cell-label { 
-               display: none;
-       }
-}
-/* Hack to make IE9 and WP7.5 treat cells like block level elements, scoped to ui-responsive class */ 
-/* Applied in a max-width media query up to the table layout breakpoint so we don't need to negate this*/ 
-@media ( max-width: 35em ) {
-       .ui-table-reflow.ui-responsive td,
-       .ui-table-reflow.ui-responsive th {
-               width: 100%;
-               -webkit-box-sizing: border-box;
-               -moz-box-sizing: border-box;
-               box-sizing: border-box;
-               float: left;
-               clear: left;
-       }
-}
-/* panel */
-.ui-panel {
-       width: 17em;
-       min-height: 100%;
-       max-height: none;
-       border-width: 0;
-       position: absolute;
-       top: 0;
-       display: block;
-}
-.ui-panel-closed {
-       width: 0;
-       max-height: 100%;
-       overflow: hidden;
-       visibility: hidden;
-}
-.ui-panel-fixed {
-       position: fixed;
-       bottom: -1px; /* fixes gap on Chrome for Android */
-       padding-bottom: 1px;
-}
-.ui-panel-display-overlay {
-       z-index: 1001; /* fixed toolbars have z-index 1000 */
-}
-.ui-panel-display-reveal {
-       z-index: 0;
-}
-.ui-panel-display-push {
-       z-index: 999;
-}
-.ui-panel-inner {
-       padding: 15px;
-}
-/* content-wrap */
-.ui-panel-content-wrap {
-       position: relative;
-       left: 0;
-       min-height: inherit;
-       border: none;
-       z-index: 999;
-}
-.ui-panel-content-wrap-display-overlay,
-.ui-panel-animate.ui-panel-content-wrap > .ui-header, /* ios4 fix */
-.ui-panel-content-wrap-closed {
-       position: static;
-}
-/* dismiss */
-.ui-panel-dismiss {
-       position: absolute;
-       top: 0;
-       left:0;
-       height: 100%;
-       width: 100%;
-       z-index: 1002;
-       display: none;
-}
-.ui-panel-dismiss-open {
-       display: block;
-}
-/* animate class is added to panel, wrapper and fixed toolbars */
-.ui-panel-animate {
-       -webkit-transition: -webkit-transform 350ms ease;
-       -moz-transition: -moz-transform 350ms ease;
-       transition: transform 350ms ease;
-}
-/* hardware acceleration for smoother transitions on WebKit browsers */
-.ui-panel-animate.ui-panel:not(.ui-panel-display-reveal),
-.ui-panel-animate.ui-panel:not(.ui-panel-display-reveal) > div,
-.ui-panel-animate.ui-panel-closed.ui-panel-display-reveal > div,
-.ui-panel-animate.ui-panel-content-wrap,
-.ui-panel-animate.ui-panel-content-fixed-toolbar {
-       -webkit-backface-visibility: hidden;
-       -webkit-transform: translate3d(0,0,0);
-}
-/* positioning: panel */
-/* panel left  */
-.ui-panel-position-left {
-       left: -17em;
-}
-/* animated: panel left (for overlay and push) */
-.ui-panel-animate.ui-panel-position-left.ui-panel-display-overlay,
-.ui-panel-animate.ui-panel-position-left.ui-panel-display-push {
-       left: 0;
-       -webkit-transform: translate3d(-17em,0,0);
-       -moz-transform: translate3d(-17em,0,0);
-       transform: translate3d(-17em,0,0);
-}
-/* panel left open */
-.ui-panel-position-left.ui-panel-display-reveal, /* negate "panel left" for reveal */
-.ui-panel-position-left.ui-panel-open {
-       left: 0;
-}
-/* animated: panel left open (for overlay and push) */
-.ui-panel-animate.ui-panel-position-left.ui-panel-open.ui-panel-display-overlay,
-.ui-panel-animate.ui-panel-position-left.ui-panel-open.ui-panel-display-push {
-       -webkit-transform: translate3d(0,0,0);
-       transform: translate3d(0,0,0);
-       -moz-transform: none;
-}
-/* panel right */
-.ui-panel-position-right {
-       right: -17em;
-}
-/* animated: panel right (for overlay and push) */
-.ui-panel-animate.ui-panel-position-right.ui-panel-display-overlay,
-.ui-panel-animate.ui-panel-position-right.ui-panel-display-push {
-       right: 0;
-       -webkit-transform: translate3d(17em,0,0);
-       -moz-transform: translate3d(17em,0,0);
-       transform: translate3d(17em,0,0);
-}
-/* panel right open */
-.ui-panel-position-right.ui-panel-display-reveal,  /* negate "panel right" for reveal */
-.ui-panel-position-right.ui-panel-open {
-       right: 0;
-}
-/* animated: panel right open (for overlay and push) */
-.ui-panel-animate.ui-panel-position-right.ui-panel-open.ui-panel-display-overlay,
-.ui-panel-animate.ui-panel-position-right.ui-panel-open.ui-panel-display-push {
-       -webkit-transform: translate3d(0,0,0);
-       transform: translate3d(0,0,0);
-       -moz-transform: none;
-}
-/* positioning: content wrap, fixed toolbars and dismiss */
-/* panel left open */
-.ui-panel-content-fixed-toolbar-position-left.ui-panel-content-fixed-toolbar-open,
-.ui-panel-content-wrap-position-left.ui-panel-content-wrap-open,
-.ui-panel-dismiss-position-left.ui-panel-dismiss-open {
-       left: 17em;
-       right: -17em;
-}
-/* animated: panel left open (for reveal and push) */
-.ui-panel-animate.ui-panel-content-fixed-toolbar-position-left.ui-panel-content-fixed-toolbar-open.ui-panel-content-fixed-toolbar-display-reveal,
-.ui-panel-animate.ui-panel-content-fixed-toolbar-position-left.ui-panel-content-fixed-toolbar-open.ui-panel-content-fixed-toolbar-display-push,
-.ui-panel-animate.ui-panel-content-wrap-position-left.ui-panel-content-wrap-open.ui-panel-content-wrap-display-reveal,
-.ui-panel-animate.ui-panel-content-wrap-position-left.ui-panel-content-wrap-open.ui-panel-content-wrap-display-push {
-       left: 0;
-       right: 0;
-       -webkit-transform: translate3d(17em,0,0);
-       -moz-transform: translate3d(17em,0,0);
-       transform: translate3d(17em,0,0);
-}
-/* panel right open */
-.ui-panel-content-fixed-toolbar-position-right.ui-panel-content-fixed-toolbar-open,
-.ui-panel-content-wrap-position-right.ui-panel-content-wrap-open,
-.ui-panel-dismiss-position-right.ui-panel-dismiss-open {
-       left: -17em;
-       right: 17em;
-}
-/* animated: panel right open (for reveal and push) */
-.ui-panel-animate.ui-panel-content-fixed-toolbar-position-right.ui-panel-content-fixed-toolbar-open.ui-panel-content-fixed-toolbar-display-reveal, 
-.ui-panel-animate.ui-panel-content-fixed-toolbar-position-right.ui-panel-content-fixed-toolbar-open.ui-panel-content-fixed-toolbar-display-push,
-.ui-panel-animate.ui-panel-content-wrap-position-right.ui-panel-content-wrap-open.ui-panel-content-wrap-display-reveal, 
-.ui-panel-animate.ui-panel-content-wrap-position-right.ui-panel-content-wrap-open.ui-panel-content-wrap-display-push {
-       left: 0;
-       right: 0;
-       -webkit-transform: translate3d(-17em,0,0);
-       -moz-transform: translate3d(-17em,0,0);
-       transform: translate3d(-17em,0,0);
-}
-/* negate "panel left/right open" for overlay */
-.ui-panel-content-fixed-toolbar-open.ui-panel-content-fixed-toolbar-display-overlay,
-.ui-panel-content-wrap-open.ui-panel-content-wrap-display-overlay {
-       left: 0;
-}
-/* always disable overflow-x to prevent zoom issue on Android */
-.ui-page-active.ui-page-panel {
-       overflow-x: hidden;
-}
-/* shadows and borders */
-.ui-panel-display-reveal {
-       -webkit-box-shadow: inset -5px 0 5px rgba(0,0,0,.15);
-       -moz-box-shadow: inset -5px 0 5px rgba(0,0,0,.15);
-       box-shadow: inset -5px 0 5px rgba(0,0,0,.15);
-}
-.ui-panel-position-right.ui-panel-display-reveal {
-       -webkit-box-shadow: inset 5px 0 5px rgba(0,0,0,.15);
-       -moz-box-shadow: inset 5px 0 5px rgba(0,0,0,.15);
-       box-shadow: inset 5px 0 5px rgba(0,0,0,.15);
-}
-.ui-panel-display-overlay {
-       -webkit-box-shadow: 5px 0 5px rgba(0,0,0,.15);
-       -moz-box-shadow: 5px 0 5px rgba(0,0,0,.15);
-       box-shadow: 5px 0 5px rgba(0,0,0,.15);
-}
-.ui-panel-position-right.ui-panel-display-overlay {
-       -webkit-box-shadow: -5px 0 5px rgba(0,0,0,.15);
-       -moz-box-shadow: -5px 0 5px rgba(0,0,0,.15);
-       box-shadow: -5px 0 5px rgba(0,0,0,.15);
-}
-.ui-panel-display-push.ui-panel-open.ui-panel-position-left {
-       border-right-width: 1px;
-       margin-right: -1px;
-}
-.ui-panel-animate.ui-panel-content-fixed-toolbar-position-left.ui-panel-content-fixed-toolbar-open.ui-panel-content-fixed-toolbar-display-push {
-       margin-left: 1px;
-}
-.ui-panel-display-push.ui-panel-open.ui-panel-position-right {
-       border-left-width: 1px;
-       margin-left: -1px;
-}
-.ui-panel-animate.ui-panel-content-fixed-toolbar-position-right.ui-panel-content-fixed-toolbar-open.ui-panel-content-fixed-toolbar-display-push {
-       margin-right: 1px;
-}
-/* wrap on wide viewports once open */
-@media (min-width:55em){
-       .ui-responsive-panel.ui-page-panel-open .ui-panel-content-fixed-toolbar-display-push.ui-panel-content-fixed-toolbar-position-left,
-       .ui-responsive-panel.ui-page-panel-open .ui-panel-content-fixed-toolbar-display-reveal.ui-panel-content-fixed-toolbar-position-left,
-       .ui-responsive-panel.ui-page-panel-open .ui-panel-content-wrap-display-push.ui-panel-content-wrap-position-left,
-       .ui-responsive-panel.ui-page-panel-open .ui-panel-content-wrap-display-reveal.ui-panel-content-wrap-position-left {
-               margin-right: 17em;
-       }
-       .ui-responsive-panel.ui-page-panel-open .ui-panel-content-fixed-toolbar-display-push.ui-panel-content-fixed-toolbar-position-right,
-       .ui-responsive-panel.ui-page-panel-open .ui-panel-content-fixed-toolbar-display-reveal.ui-panel-content-fixed-toolbar-position-right,
-       .ui-responsive-panel.ui-page-panel-open .ui-panel-content-wrap-display-push.ui-panel-content-wrap-position-right,
-       .ui-responsive-panel.ui-page-panel-open .ui-panel-content-wrap-display-reveal.ui-panel-content-wrap-position-right {
-               margin-left: 17em;
-       }
-       .ui-responsive-panel.ui-page-panel-open .ui-panel-content-fixed-toolbar-display-push,
-       .ui-responsive-panel.ui-page-panel-open .ui-panel-content-fixed-toolbar-display-reveal {
-               width: auto;    
-       }
-       .ui-responsive-panel .ui-panel-dismiss-display-push {
-               display: none;
-       }       
-}
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/style.css b/samples/web/Sample/Tizen/Web App/SettingsApp/project/css/style.css
deleted file mode 100644 (file)
index b19f5a0..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
- body {
-}
-/* this makes the toggle buttons align to the right of the screen */
-.ui-field-contain div.ui-slider-switch {
-    position: absolute;
-    text-align: center;
-    top: 0;
-    bottom: 0;
-    margin: auto;
-    right: 10px;
-}
-/* WiFi */
-#wifi_networks {
-    display: none;
-}
-.network-connected .network-status {
-    color: green;
-}
-.network-ssid {
-    font-size: 15px;
-}
-.network-encryption {
-    font-size: 10px;
-}
-.network-strength {
-    font-size: 10px;
-}
-.network-address {
-    font-size: 10px;
-}
-.network-status {
-    font-size: 10px;
-}
-.network-action-button {
-    max-width: 150px;
-    text-align: center;
-}
-/* make the button text so that it doesn't add the ellipsis */
-.network-action-button .ui-btn-inner {
-    text-overflow: initial;
-}
-/* make room for bottom for bottom of the screen due to weston compositor */
-#button_wifi_add {
-    margin-bottom: 100px;
-}
-/* Bluetooth */
-#bluetooth_devices {
-    display: none;
-}
-.device-paired .device-status {
-    color: green;
-}
-.device-connected .device-status {
-    color: blue;
-}
-.device-name {
-    font-size: 10px;
-}
-.device-address {
-    font-size: 10px;
-}
-.device-status {
-    font-size: 10px;
-}
-.device-action-button {
-    max-width: 150px;
-    text-align: center;
-}
-/* Date and Time */
-#button_datetime_apply, #button_datetime_cancel{
-    display: none;
-}
-/* make the button text so that it doesn't add the ellipsis */
-.device-action-button .ui-btn-inner {
-    text-overflow: initial;
-}
-/* make room for bottom for bottom of the screen due to weston compositor */
-#button_bluetooth_scan {
-    margin-bottom: 100px;
-}
\ No newline at end of file
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/images/bluetooth.png b/samples/web/Sample/Tizen/Web App/SettingsApp/project/images/bluetooth.png
deleted file mode 100644 (file)
index 2951a55..0000000
Binary files a/samples/web/Sample/Tizen/Web App/SettingsApp/project/images/bluetooth.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/index.html b/samples/web/Sample/Tizen/Web App/SettingsApp/project/index.html
deleted file mode 100644 (file)
index 99b8370..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<!--
-* Copyright (c) 2013, Intel Corporation.
-*
-* This program is licensed under the terms and conditions of the
-* Apache License, version 2.0.  The full text of the Apache License is at
-* http://www.apache.org/licenses/LICENSE-2.0
-*
--->
-<html>
-<head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">
-
-    <title>Settings</title>
-
-    <link rel="stylesheet" href="./css/jquery.mobile-1.3.1.css"/>
-    <script type="text/javascript" src="./js/jquery-1.10.1.js"></script>
-    <script type="text/javascript" src="./js/jquery.mobile-1.3.1.js"></script>
-    <script type="text/javascript" src="./js/main.js"></script>
-    <script type="text/javascript" src="./js/utils.js"></script>
-    <script type="text/javascript" src="./js/websocket.js"></script>
-    <script type="text/javascript" src="./js/api-wifi.js"></script>
-    <script type="text/javascript" src="./js/api-bluetooth.js"></script>
-    <script type="text/javascript" src="./js/api-datetime.js"></script>
-    <script type="text/javascript" src="./js/panel-wifi.js"></script>
-    <script type="text/javascript" src="./js/panel-bluetooth.js"></script>
-    <script type="text/javascript" src="./js/panel-datetime.js"></script>
-    <link rel="stylesheet" href="./css/style.css" />
-</head>
-
-<body>
-       <!-- Settings -->
-    <div data-role="page" id="main">
-        <div data-role="header" data-position="fixed">
-               <a href="" id="quit" data-icon="back">Quit</a>
-            <h1>Settings</h1>
-        </div><!-- /header -->
-
-               <div data-role="collapsible-set">
-                   <div data-role="collapsible" id="col_connectivity" data-collapsed="false">
-                       <h3>Connectivity</h3>
-                               <div data-role="content">
-                                   <ul data-role="listview">
-                               <li>
-                                   <a href="#page_wifi" id="button_wifi_settings">Wi-Fi</a>
-                               </li>
-                               <li>
-                                   <a href="#page_bluetooth" id="button_bluetooth_settings">Bluetooth</a>
-                               </li>
-                                   </ul>
-                               </div>
-                   </div>
-               </div>
-
-               <div data-role="collapsible-set">
-                   <div data-role="collapsible" id="col_system" data-collapsed="false">
-                       <h3>System</h3>
-                               <div data-role="content">
-                                   <ul data-role="listview">
-                               <li>
-                                   <a href="#page_datetime" id="button_datetime_settings">Date and Time</a>
-                               </li>
-                                   </ul>
-                               </div>
-                   </div>
-               </div>
-       </div>
-
-       <!-- Wi-Fi Settings -->
-       <div data-role="page" id="page_wifi">
-               <div data-role="header" data-position="fixed">
-                       <a href="#main" data-icon="back">Back</a>
-                       <h1>Wi-Fi</h1>
-               </div>
-
-               <div data-role="content">
-            <div class="adapter-info">
-                <div class="adapter-name">
-                    <div id="label_wifi_adapter"></div>
-                </div>
-            </div>
-            <ul data-role="listview" data-inset="true" class="ui-listview ui-listview-inset">
-                <li data-role="fieldcontain">
-                    <label for="toggle_wifi" class="ui-slider">WiFi</label>
-                    <select data-role="slider" name="toggle_wifi" id="toggle_wifi" class="ui-slider-switch">
-                        <option value="off">Off</option>
-                        <option value="on">On</option>
-                    </select>
-                </li>
-            </ul>
-            <div id="wifi_networks">
-                <div><p>Available Networks</p></div>
-                <ul data-role="listview" id="listview_network_known" data-inset="true" class="device-list ui-listview"></ul>
-                <ul data-role="listview" id="listview_network_available" data-inset="true" class="device-list ui-listview"></ul>
-                <div data-role="button" id="button_wifi_refresh">Refresh</div>
-                <div data-role="button" id="button_wifi_add">Add</div>
-            </div>
-               </div>
-       </div>
-
-    <!-- WiFi Network Info -->
-    <div data-role="page" id="page_wifi_detail">
-        <div data-role="header" data-position="fixed">
-            <a href="#page_wifi" data-icon="back">Back</a>
-            <h1>Network Info</h1>
-        </div>
-
-        <div data-role="content" id="page_wifi_detail_content">
-        </div>
-    </div>
-
-    <!-- WiFi Add New Network -->
-    <div data-role="page" id="page_wifi_add">
-        <div data-role="header" data-position="fixed">
-            <a href="#page_wifi" id="page_wifi_button_back" data-icon="back">Back</a>
-            <h1>Add Network</h1>
-            <a href="#" id="page_wifi_button_add" data-icon="plus">Add</a>
-        </div>
-
-        <div data-role="content" id="page_wifi_add_content">
-            <label for="input_wifi_ssid">SSID:</label>
-            <input type="text" name="name" id="input_wifi_ssid" value="" />
-
-            <label for="select_wifi_security" class="select">Security:</label>
-            <ul data-role="listview" data-inset="true" class="device-list ui-listview">
-                <li>
-                    <select name="select_wifi_security" id="select_wifi_security">
-                        <option value="None">None</option>
-                        <option value="WEP">WEP</option>
-                        <option value="WPA">WPA</option>
-                        <option value="WPA2">WPA2</option>
-                        <option value="WPA_Enterprise">WPA Enterprise</option>
-                        <option value="WPA2_Enterprise">WPA2 Enterprise</option>
-                    </select>
-                </li>
-                <li id="page_wifi_password">
-                    <label for="input_wifi_password">Password:</label>
-                    <input type="password" name="name" id="input_wifi_password" value="" />
-                </li>
-            </ul>
-        </div>
-    </div>
-       
-       <!-- Bluetooth Settings -->
-       <div data-role="page" id="page_bluetooth">
-               <div data-role="header" data-position="fixed">
-                       <a href="#main" data-icon="back">Back</a>
-                       <h1>Bluetooth</h1>
-               </div>
-
-               <div data-role="content">
-               <div class="adapter-info">  
-                   <div class="adapter-name">
-                       <div id="label_bluetooth_adapter"></div>
-                   </div>
-               </div>
-                       <ul data-role="listview" data-inset="true" class="ui-listview ui-listview-inset">
-                               <li data-role="fieldcontain">
-                                       <label for="toggle_bluetooth" class="ui-slider">Bluetooth</label>
-                                       <select data-role="slider" name="toggle_bluetooth" id="toggle_bluetooth" class="ui-slider-switch">
-                                               <option value="off">Off</option>
-                                               <option value="on">On</option>
-                                       </select>
-                               </li>
-                       </ul>
-                       <div id="bluetooth_devices">
-                           <div><p>Available Devices</p></div>
-                <ul data-role="listview" id="listview_device_paired" data-inset="true" class="device-list ui-listview"></ul>
-                   <ul data-role="listview" id="listview_device_available" data-inset="true" class="device-list ui-listview"></ul>
-                           <div data-role="button" id="button_bluetooth_scan">Scan</div>
-                       </div>
-               </div>
-       </div>
-
-    <!-- Bluetooth Device Info -->
-    <div data-role="page" id="page_bluetooth_detail">
-        <div data-role="header" data-position="fixed">
-            <a href="#page_bluetooth" data-icon="back">Back</a>
-            <h1>Device Info</h1>
-        </div>
-
-        <div data-role="content" id="page_bluetooth_detail_content">
-        </div>
-    </div>
-
-       <!--  Date and Time Settings -->
-       <div data-role="page" id="page_datetime">
-               <div data-role="header" data-position="fixed">
-                       <a href="#main" id="page_datetime_button_back" data-icon="back">Back</a>
-                       <h1>Date and Time</h1>
-               </div>
-
-               <div data-role="content">
-                   <ul data-role="listview" data-inset="true" class="ui-listview ui-listview-inset">
-                       <li data-role="fieldcontain">
-                <label for="toggle_timeupdates" class="ui-slider">Automatic time</label>
-                <select data-role="slider" name="toggle_timeupdates" id="toggle_timeupdates" class="ui-slider-switch">
-                    <option value="manual">Off</option>
-                    <option value="auto">On</option>
-                    </select>
-                </li>
-            </ul>
-                       <ul data-role="listview" data-inset="true" class="ui-listview ui-listview-inset">
-                               <li data-role="fieldcontain">
-                                       <label for="input_time">Time (hh:mm:ss):</label>
-                                       <input type="text" data-clear-btn="false" name="input_time" id="input_time" value="">
-                               </li>
-                       </ul>
-            <ul data-role="listview" data-inset="true" class="ui-listview ui-listview-inset">
-                <li data-role="fieldcontain">
-                    <label for="input_date">Date (yyyy-mm-dd):</label>
-                    <input type="text" data-clear-btn="false" name="input_date" id="input_date" value="">
-                </li>
-            </ul>
-            <ul data-role="listview" data-inset="true" class="ui-listview ui-listview-inset">
-                <li data-role="fieldcontain">
-                <label for="toggle_timezoneupdates" class="ui-slider">Automatic time zone</label>
-                <select data-role="slider" name="toggle_timezoneupdates" id="toggle_timezoneupdates" class="ui-slider-switch">
-                    <option value="manual">Off</option>
-                    <option value="auto">On</option>
-                    </select>
-                </li>
-            </ul>
-                       <ul data-role="listview" data-inset="true" class="ui-listview ui-listview-inset">
-                               <li data-role="fieldcontain">
-                                       <label for="select_timezone" class="select">Time zone:</label>
-                                       <select name="select_timezone" id="select_timezone">
-                                               <option value="Pacific/Midway">(GMT-11:00) Midway Island, Samoa</option>
-                                               <option value="America/Adak">(GMT-10:00) Hawaii-Aleutian</option>
-                                               <option value="Etc/GMT+10">(GMT-10:00) Hawaii</option>
-                                               <option value="Pacific/Marquesas">(GMT-09:30) Marquesas Islands</option>
-                                               <option value="Pacific/Gambier">(GMT-09:00) Gambier Islands</option>
-                                               <option value="America/Anchorage">(GMT-09:00) Alaska</option>
-                                               <option value="America/Ensenada">(GMT-08:00) Tijuana, Baja California</option>
-                                               <option value="Etc/GMT+8">(GMT-08:00) Pitcairn Islands</option>
-                                               <option value="America/Los_Angeles">(GMT-08:00) Pacific Time (US & Canada)</option>
-                                               <option value="America/Denver">(GMT-07:00) Mountain Time (US & Canada)</option>
-                                               <option value="America/Chihuahua">(GMT-07:00) Chihuahua, La Paz, Mazatlan</option>
-                                               <option value="America/Dawson_Creek">(GMT-07:00) Arizona</option>
-                                               <option value="America/Belize">(GMT-06:00) Saskatchewan, Central America</option>
-                                               <option value="America/Cancun">(GMT-06:00) Guadalajara, Mexico City, Monterrey</option>
-                                               <option value="Chile/EasterIsland">(GMT-06:00) Easter Island</option>
-                                               <option value="America/Chicago">(GMT-06:00) Central Time (US & Canada)</option>
-                                               <option value="America/New_York">(GMT-05:00) Eastern Time (US & Canada)</option>
-                                               <option value="America/Havana">(GMT-05:00) Cuba</option>
-                                               <option value="America/Bogota">(GMT-05:00) Bogota, Lima, Quito, Rio Branco</option>
-                                               <option value="America/Caracas">(GMT-04:30) Caracas</option>
-                                               <option value="America/Santiago">(GMT-04:00) Santiago</option>
-                                               <option value="America/La_Paz">(GMT-04:00) La Paz</option>
-                                               <option value="Atlantic/Stanley">(GMT-04:00) Faukland Islands</option>
-                                               <option value="America/Campo_Grande">(GMT-04:00) Brazil</option>
-                                               <option value="America/Goose_Bay">(GMT-04:00) Atlantic Time (Goose Bay)</option>
-                                               <option value="America/Glace_Bay">(GMT-04:00) Atlantic Time (Canada)</option>
-                                               <option value="America/St_Johns">(GMT-03:30) Newfoundland</option>
-                                               <option value="America/Araguaina">(GMT-03:00) UTC-3</option>
-                                               <option value="America/Montevideo">(GMT-03:00) Montevideo</option>
-                                               <option value="America/Miquelon">(GMT-03:00) Miquelon, St. Pierre</option>
-                                               <option value="America/Godthab">(GMT-03:00) Greenland</option>
-                                               <option value="America/Argentina/Buenos_Aires">(GMT-03:00) Buenos Aires</option>
-                                               <option value="America/Sao_Paulo">(GMT-03:00) Brasilia</option>
-                                               <option value="America/Noronha">(GMT-02:00) Mid-Atlantic</option>
-                                               <option value="Atlantic/Cape_Verde">(GMT-01:00) Cape Verde Is.</option>
-                                               <option value="Atlantic/Azores">(GMT-01:00) Azores</option>
-                                               <option value="Europe/Belfast">(GMT) Greenwich Mean Time : Belfast</option>
-                                               <option value="Europe/Dublin">(GMT) Greenwich Mean Time : Dublin</option>
-                                               <option value="Europe/Lisbon">(GMT) Greenwich Mean Time : Lisbon</option>
-                                               <option value="Europe/London">(GMT) Greenwich Mean Time : London</option>
-                                               <option value="Africa/Abidjan">(GMT) Monrovia, Reykjavik</option>
-                                               <option value="Europe/Amsterdam">(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna</option>
-                                               <option value="Europe/Belgrade">(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague</option>
-                                               <option value="Europe/Brussels">(GMT+01:00) Brussels, Copenhagen, Madrid, Paris</option>
-                                               <option value="Africa/Algiers">(GMT+01:00) West Central Africa</option>
-                                               <option value="Africa/Windhoek">(GMT+01:00) Windhoek</option>
-                                               <option value="Asia/Beirut">(GMT+02:00) Beirut</option>
-                                               <option value="Africa/Cairo">(GMT+02:00) Cairo</option>
-                                               <option value="Asia/Gaza">(GMT+02:00) Gaza</option>
-                                               <option value="Africa/Blantyre">(GMT+02:00) Harare, Pretoria</option>
-                                               <option value="Asia/Jerusalem">(GMT+02:00) Jerusalem</option>
-                                               <option value="Europe/Minsk">(GMT+02:00) Minsk</option>
-                                               <option value="Asia/Damascus">(GMT+02:00) Syria</option>
-                                               <option value="Europe/Moscow">(GMT+03:00) Moscow, St. Petersburg, Volgograd</option>
-                                               <option value="Africa/Addis_Ababa">(GMT+03:00) Nairobi</option>
-                                               <option value="Asia/Tehran">(GMT+03:30) Tehran</option>
-                                               <option value="Asia/Dubai">(GMT+04:00) Abu Dhabi, Muscat</option>
-                                               <option value="Asia/Yerevan">(GMT+04:00) Yerevan</option>
-                                               <option value="Asia/Kabul">(GMT+04:30) Kabul</option>
-                                               <option value="Asia/Yekaterinburg">(GMT+05:00) Ekaterinburg</option>
-                                               <option value="Asia/Tashkent">(GMT+05:00) Tashkent</option>
-                                               <option value="Asia/Kolkata">(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi</option>
-                                               <option value="Asia/Katmandu">(GMT+05:45) Kathmandu</option>
-                                               <option value="Asia/Dhaka">(GMT+06:00) Astana, Dhaka</option>
-                                               <option value="Asia/Novosibirsk">(GMT+06:00) Novosibirsk</option>
-                                               <option value="Asia/Rangoon">(GMT+06:30) Yangon (Rangoon)</option>
-                                               <option value="Asia/Bangkok">(GMT+07:00) Bangkok, Hanoi, Jakarta</option>
-                                               <option value="Asia/Krasnoyarsk">(GMT+07:00) Krasnoyarsk</option>
-                                               <option value="Asia/Hong_Kong">(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi</option>
-                                               <option value="Asia/Irkutsk">(GMT+08:00) Irkutsk, Ulaan Bataar</option>
-                                               <option value="Australia/Perth">(GMT+08:00) Perth</option>
-                                               <option value="Australia/Eucla">(GMT+08:45) Eucla</option>
-                                               <option value="Asia/Tokyo">(GMT+09:00) Osaka, Sapporo, Tokyo</option>
-                                               <option value="Asia/Seoul">(GMT+09:00) Seoul</option>
-                                               <option value="Asia/Yakutsk">(GMT+09:00) Yakutsk</option>
-                                               <option value="Australia/Adelaide">(GMT+09:30) Adelaide</option>
-                                               <option value="Australia/Darwin">(GMT+09:30) Darwin</option>
-                                               <option value="Australia/Brisbane">(GMT+10:00) Brisbane</option>
-                                               <option value="Australia/Hobart">(GMT+10:00) Hobart</option>
-                                               <option value="Asia/Vladivostok">(GMT+10:00) Vladivostok</option>
-                                               <option value="Australia/Lord_Howe">(GMT+10:30) Lord Howe Island</option>
-                                               <option value="Etc/GMT-11">(GMT+11:00) Solomon Is., New Caledonia</option>
-                                               <option value="Asia/Magadan">(GMT+11:00) Magadan</option>
-                                               <option value="Pacific/Norfolk">(GMT+11:30) Norfolk Island</option>
-                                               <option value="Asia/Anadyr">(GMT+12:00) Anadyr, Kamchatka</option>
-                                               <option value="Pacific/Auckland">(GMT+12:00) Auckland, Wellington</option>
-                                               <option value="Etc/GMT-12">(GMT+12:00) Fiji, Kamchatka, Marshall Is.</option>
-                                               <option value="Pacific/Chatham">(GMT+12:45) Chatham Islands</option>
-                                               <option value="Pacific/Tongatapu">(GMT+13:00) Nuku\'alofa</option>
-                                               <option value="Pacific/Kiritimati">(GMT+14:00) Kiritimati</option>
-                                       </select>
-                               </li>
-                       </ul>
-                       <div data-role="button" id="button_datetime_apply">Apply</div>
-                       <div data-role="button" id="button_datetime_cancel">Cancel</div>
-               </div>
-       </div>
-       
-</body>
-</html>
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/api-bluetooth.js b/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/api-bluetooth.js
deleted file mode 100644 (file)
index 55ed44e..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-
-/* Namespace */
-var settings = settings || {};
-settings.bluetooth = settings.bluetooth || {};
-
-/* Module */
-settings.bluetooth = (function() {
-
-    var default_adapter = null;
-
-    /* Adapter class */
-    var BluetoothAdapter = function(adapter) {
-            this.bt_adapter = adapter;
-            this.name = adapter.name;
-            this.powered = adapter.powered;
-            this.visible = adapter.visible;
-        };
-
-    BluetoothAdapter.prototype.setPowered = function(powered, success_cb, error_cb) {
-        if (this.bt_adapter === undefined) return;
-
-        var self = this;
-        if (powered) {
-            // Power on
-            this.bt_adapter.setPowered(true, function() {
-                self.powered = self.bt_adapter.powered;
-                success_cb();
-            }, function(e) {
-                self.powered = self.bt_adapter.powered;
-                error_cb(e);
-            });
-        } else {
-            // Power off
-            this.bt_adapter.setPowered(false, function() {
-                self.powered = self.bt_adapter.powered;
-                success_cb();
-            }, function(e) {
-                self.powered = self.bt_adapter.powered;
-                error_cb(e);
-            });
-        }
-    };
-
-    BluetoothAdapter.prototype.setVisible = function(visible, success_cb, error_cb) {
-        if (this.bt_adapter === undefined || !this.bt_adapter.powered) return;
-
-        console.log('settings.bluetooth - Failed to set bluetooth visibility - not supported');
-    };
-
-    BluetoothAdapter.prototype.startScanDevices = function(success_cb, error_cb) {
-        if (this.bt_adapter === undefined || !this.bt_adapter.powered) return;
-
-        this.bt_adapter.discoverDevices({
-            onstarted: success_cb.onstarted,
-            ondevicefound: function(device) {
-                success_cb.ondevicefound(new BluetoothDevice(device));
-            },
-            ondevicedisappeared: success_cb.ondevicedisappeared,
-            onfinished: function(devices) {
-                var arr = [];
-                for (var i = 0; i < devices.length; i++) {
-                    arr.push(new BluetoothDevice(devices[i]));
-                }
-                success_cb.onfinished(arr);
-            }
-        }, error_cb);
-    };
-
-    BluetoothAdapter.prototype.stopScanDevices = function(success_cb, error_cb) {
-        if (this.bt_adapter === undefined || !this.bt_adapter.powered) return;
-
-        this.bt_adapter.stopDiscovery(success_cb, error_cb);
-    };
-
-    BluetoothAdapter.prototype.pairDevice = function(device_address, success_cb, error_cb) {
-        if (this.bt_adapter === undefined || !this.bt_adapter.powered) return;
-
-        this.bt_adapter.createBonding(device_address, success_cb, error_cb);
-    };
-
-    BluetoothAdapter.prototype.unpairDevice = function(device_address, success_cb, error_cb) {
-        if (this.bt_adapter === undefined || !this.bt_adapter.powered) return;
-
-        this.bt_adapter.destroyBonding(device_address, success_cb, error_cb);
-    };
-
-    /* Device class */
-    var BluetoothDevice = function(device) {
-            this.bt_device = device;
-            this.name = device.name;
-            this.address = device.address;
-            this.paired = device.isBonded;
-            this.connected = device.isConnected;
-        };
-
-    function enableBluetooth(success_cb, error_cb) {
-        wsAPI.sendRequest(WS_REQUEST_TYPE.BLUETOOTH, 'enable', true, success_cb, function(e) {
-            if (e.indexOf('Already enabled') >= 0) {
-                console.log('bluetooth subsystem already enabled');
-                success_cb();
-            } else {
-                error_cb(e);
-            }
-        });
-    }
-
-    function disableBluetooth(success_cb, error_cb) {
-        wsAPI.sendRequest(WS_REQUEST_TYPE.BLUETOOTH, 'enable', false, success_cb, function(e) {
-            if (e.indexOf('Already disabled') >= 0) {
-                console.log('bluetooth subsystem already disabled');
-                success_cb();
-            } else {
-                error_cb(e);
-            }
-        });
-    }
-
-    function subscribeEvents(event_callback) {
-        wsAPI.subscribeEvents(event_callback);
-    }
-
-    function unsubscribeEvents(event_callback) {
-        wsAPI.unsubscribeEvents(event_callback);
-    }
-
-    function getDefaultAdapter() {
-        try {
-            if (tizen.bluetooth.getDefaultAdapter() == null) {
-                return null;
-            } else if (default_adapter == null) {
-                default_adapter = new BluetoothAdapter(tizen.bluetooth.getDefaultAdapter());
-            }
-            return default_adapter;
-        } catch (e) {
-            console.error('Tizen web api missing ' + e);
-            return null;
-        }
-    };
-
-    return {
-        BluetoothAdapter: BluetoothAdapter,
-        BluetoothDevice: BluetoothDevice,
-        subscribeEvents: subscribeEvents,
-        unsubscribeEvents: unsubscribeEvents,
-        getDefaultAdapter: getDefaultAdapter
-    };
-})();
\ No newline at end of file
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/api-datetime.js b/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/api-datetime.js
deleted file mode 100644 (file)
index c1d4a09..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-
-/* Namespace */
-var settings = settings || {};
-settings.datetime = settings.datetime || {};
-
-/* Module */
-settings.datetime = (function() {
-
-    function isTimeAuto(success_cb, error_cb) {
-        wsAPI.sendRequest(WS_REQUEST_TYPE.DATETIME, 'is_time_updates_auto', null, success_cb, error_cb);
-    }
-
-    function isTimezoneAuto(success_cb, error_cb) {
-        wsAPI.sendRequest(WS_REQUEST_TYPE.DATETIME, 'is_timezone_updates_auto', null, success_cb, error_cb);
-    }
-
-    function setTime(new_time, success_cb, error_cb) {
-        wsAPI.sendRequest(WS_REQUEST_TYPE.DATETIME, 'time', new_time, success_cb, error_cb);
-    }
-
-    function setTimezone(new_timezone, success_cb, error_cb) {
-        wsAPI.sendRequest(WS_REQUEST_TYPE.DATETIME, 'timezone', new_timezone, success_cb, error_cb);
-    }
-
-    function setTimeUpdates(manual_or_auto, success_cb, error_cb) {
-        wsAPI.sendRequest(WS_REQUEST_TYPE.DATETIME, 'time_updates', manual_or_auto, success_cb, error_cb);
-    }
-
-    function setTimezoneUpdates(manual_or_auto, success_cb, error_cb) {
-        wsAPI.sendRequest(WS_REQUEST_TYPE.DATETIME, 'timezone_updates', manual_or_auto, success_cb, error_cb);
-    }
-
-    return {
-        isTimeAuto: isTimeAuto,
-        isTimezoneAuto: isTimezoneAuto,
-        setTime: setTime,
-        setTimezone: setTimezone,
-        setTimeUpdates: setTimeUpdates,
-        setTimezoneUpdates: setTimezoneUpdates
-    };
-})();
\ No newline at end of file
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/api-wifi.js b/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/api-wifi.js
deleted file mode 100644 (file)
index c8be691..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-
-/* Namespace */
-var settings = settings || {};
-settings.wifi = settings.wifi || {};
-
-var WIFI_SECURITY_TYPE = {
-    NONE: 0,
-    WEP: 1,
-    WPA: 2,
-    WPA2: 3,
-    WPA_ENTERPRISE: 4,
-    WPA2_ENTERPRISE: 5
-};
-
-/* Module */
-settings.wifi = (function() {
-
-    var default_adapter = null;
-
-    /* Adapter class */
-    var WiFiAdapter = function(adapter) {
-            this.wifi_adapter = adapter;
-            this.name = 'Connman-WiFi';
-            this.powered = false;
-        };
-
-    WiFiAdapter.prototype.setPowered = function(powered, success_cb, error_cb) {
-        if (wsAPI === undefined) return;
-        wsAPI.sendRequest(WS_REQUEST_TYPE.WIFI, 'enable', powered, success_cb, function(e) {
-            if (e.indexOf('Already enabled') >= 0) {
-                console.log('wifi subsystem already enabled');
-                success_cb();
-            } else if (e.indexOf('Already disabled') >= 0) {
-                console.log('wifi subsystem already disabled');
-                success_cb();
-            } else {
-                error_cb(e);
-            }
-        });
-    };
-
-    WiFiAdapter.prototype.getPowered = function(success_cb, error_cb) {
-        if (wsAPI === undefined) return;
-        var me = this;
-        wsAPI.sendRequest(WS_REQUEST_TYPE.WIFI, 'is_enabled', null, function(isEnabled) {
-            if (isEnabled === undefined) {
-                console.log('Badly formed json message: ' + json_msg);
-            }
-            me.powered = isEnabled;
-            success_cb(me.powered);
-        }, error_cb);
-    };
-
-    WiFiAdapter.prototype.scan = function(success_cb, error_cb) {
-        if (wsAPI === undefined) return;
-        wsAPI.sendRequest(WS_REQUEST_TYPE.WIFI, 'scan', null, function(results) {
-            if (results.length >= 0 && results[0].length >= 0 && results[0][0][0] === undefined) {
-                error_cb('Cannot parse scan results');
-                return;
-            }
-
-            var network_list = results[0];
-
-            try {
-                var results = [];
-                for (var i = 0; i < network_list.length; i++) {
-                    if (network_list[i][1] === undefined) {
-                        console.log('Badly form json message: ' + json_msg);
-                    }
-                    if (network_list[i][1].Type === 'wifi') {
-                        var network = new settings.wifi.WiFiNetwork(network_list[i][0]);
-                        if (network_list[i][1].Name !== undefined) {
-                            network.ssid = network_list[i][1].Name;
-                        }
-                        if (network_list[i][1].State === 'ready') {
-                            network.connected = true;
-                        } else if (network_list[i][1].State === 'idle') {
-                            network.connected = false;
-                        }
-                        if (network_list[i][1].EncryptionMode !== undefined) {
-                            network.encryption = network_list[i][1].EncryptionMode;
-                        }
-                        if (network_list[i][1].Strength !== undefined) {
-                            network.strength = network_list[i][1].Strength;
-                        }
-                        if (network_list[i][1].IPv4.Address !== undefined) {
-                            network.ipAddress = network_list[i][1].IPv4.Address;
-                        }
-                        if (network_list[i][1].IPv4.Gateway !== undefined) {
-                            network.gateway = network_list[i][1].IPv4.Gateway;
-                        }
-                        if (network_list[i][1].IPv4.Netmask !== undefined) {
-                            network.netmask = network_list[i][1].IPv4.Netmask;
-                        }
-                        results.push(network);
-                    }
-                }
-            } catch (e) {
-                error_cb(e);
-            }
-            success_cb(results);
-        }, error_cb);
-    };
-
-    WiFiAdapter.prototype.connectNetwork = function(network_id, security, passcode, success_cb, error_cb) {
-        if (wsAPI === undefined) return;
-
-        wsAPI.sendRequest(WS_REQUEST_TYPE.WIFI, 'connect', network_id, success_cb, error_cb);
-    };
-
-    WiFiAdapter.prototype.disconnectNetwork = function(network_id, success_cb, error_cb) {
-        if (wsAPI === undefined) return;
-        wsAPI.sendRequest(WS_REQUEST_TYPE.WIFI, 'disconnect', network_id, success_cb, error_cb);
-    };
-
-    /* Network class */
-    WiFiNetwork = function(object_path) {
-        this.id = object_path;
-        this.ssid = '';
-        this.connected = false;
-        this.security = WIFI_SECURITY_TYPE.NONE;
-        this.encryption = 'Unknown';
-        this.ipAddress = 'Unknown';
-        this.gateway = 'Unknown';
-        this.netmask = 'Unknown';
-        this.strength = -1;
-    };
-
-    WiFiNetwork.prototype.getSecurity = function() {
-        return this.security;
-    }
-
-    function subscribeEvents(callback) {
-        wsAPI.subscribeEvents(callback);
-    }
-
-    function unsubscribeEvents(callback) {
-        wsAPI.unsubscribeEvents(callback);
-    }
-
-    function getDefaultAdapter() {
-        if (default_adapter === null) {
-            default_adapter = new WiFiAdapter(wsAPI);
-        }
-
-        return default_adapter;
-    };
-
-    return {
-        WiFiAdapter: WiFiAdapter,
-        WiFiNetwork: WiFiNetwork,
-        subscribeEvents: subscribeEvents,
-        unsubscribeEvents: unsubscribeEvents,
-        getDefaultAdapter: getDefaultAdapter
-    };
-})();
\ No newline at end of file
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/jquery-1.10.1.js b/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/jquery-1.10.1.js
deleted file mode 100644 (file)
index 6f8c967..0000000
+++ /dev/null
@@ -1,9807 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.10.1
- * http://jquery.com/
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- *
- * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2013-05-30T21:49Z
- */
-(function( window, undefined ) {
-
-// Can't do this because several apps including ASP.NET trace
-// the stack via arguments.caller.callee and Firefox dies if
-// you try to trace through "use strict" call chains. (#13335)
-// Support: Firefox 18+
-//"use strict";
-var
-       // The deferred used on DOM ready
-       readyList,
-
-       // A central reference to the root jQuery(document)
-       rootjQuery,
-
-       // Support: IE<10
-       // For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`
-       core_strundefined = typeof undefined,
-
-       // Use the correct document accordingly with window argument (sandbox)
-       location = window.location,
-       document = window.document,
-       docElem = document.documentElement,
-
-       // Map over jQuery in case of overwrite
-       _jQuery = window.jQuery,
-
-       // Map over the $ in case of overwrite
-       _$ = window.$,
-
-       // [[Class]] -> type pairs
-       class2type = {},
-
-       // List of deleted data cache ids, so we can reuse them
-       core_deletedIds = [],
-
-       core_version = "1.10.1",
-
-       // Save a reference to some core methods
-       core_concat = core_deletedIds.concat,
-       core_push = core_deletedIds.push,
-       core_slice = core_deletedIds.slice,
-       core_indexOf = core_deletedIds.indexOf,
-       core_toString = class2type.toString,
-       core_hasOwn = class2type.hasOwnProperty,
-       core_trim = core_version.trim,
-
-       // Define a local copy of jQuery
-       jQuery = function( selector, context ) {
-               // The jQuery object is actually just the init constructor 'enhanced'
-               return new jQuery.fn.init( selector, context, rootjQuery );
-       },
-
-       // Used for matching numbers
-       core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
-
-       // Used for splitting on whitespace
-       core_rnotwhite = /\S+/g,
-
-       // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
-       rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
-       // A simple way to check for HTML strings
-       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
-       // Strict HTML recognition (#11290: must start with <)
-       rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
-
-       // Match a standalone tag
-       rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
-
-       // JSON RegExp
-       rvalidchars = /^[\],:{}\s]*$/,
-       rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-       rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
-       rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
-
-       // Matches dashed string for camelizing
-       rmsPrefix = /^-ms-/,
-       rdashAlpha = /-([\da-z])/gi,
-
-       // Used by jQuery.camelCase as callback to replace()
-       fcamelCase = function( all, letter ) {
-               return letter.toUpperCase();
-       },
-
-       // The ready event handler
-       completed = function( event ) {
-
-               // readyState === "complete" is good enough for us to call the dom ready in oldIE
-               if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
-                       detach();
-                       jQuery.ready();
-               }
-       },
-       // Clean-up method for dom ready events
-       detach = function() {
-               if ( document.addEventListener ) {
-                       document.removeEventListener( "DOMContentLoaded", completed, false );
-                       window.removeEventListener( "load", completed, false );
-
-               } else {
-                       document.detachEvent( "onreadystatechange", completed );
-                       window.detachEvent( "onload", completed );
-               }
-       };
-
-jQuery.fn = jQuery.prototype = {
-       // The current version of jQuery being used
-       jquery: core_version,
-
-       constructor: jQuery,
-       init: function( selector, context, rootjQuery ) {
-               var match, elem;
-
-               // HANDLE: $(""), $(null), $(undefined), $(false)
-               if ( !selector ) {
-                       return this;
-               }
-
-               // Handle HTML strings
-               if ( typeof selector === "string" ) {
-                       if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
-                               // Assume that strings that start and end with <> are HTML and skip the regex check
-                               match = [ null, selector, null ];
-
-                       } else {
-                               match = rquickExpr.exec( selector );
-                       }
-
-                       // Match html or make sure no context is specified for #id
-                       if ( match && (match[1] || !context) ) {
-
-                               // HANDLE: $(html) -> $(array)
-                               if ( match[1] ) {
-                                       context = context instanceof jQuery ? context[0] : context;
-
-                                       // scripts is true for back-compat
-                                       jQuery.merge( this, jQuery.parseHTML(
-                                               match[1],
-                                               context && context.nodeType ? context.ownerDocument || context : document,
-                                               true
-                                       ) );
-
-                                       // HANDLE: $(html, props)
-                                       if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
-                                               for ( match in context ) {
-                                                       // Properties of context are called as methods if possible
-                                                       if ( jQuery.isFunction( this[ match ] ) ) {
-                                                               this[ match ]( context[ match ] );
-
-                                                       // ...and otherwise set as attributes
-                                                       } else {
-                                                               this.attr( match, context[ match ] );
-                                                       }
-                                               }
-                                       }
-
-                                       return this;
-
-                               // HANDLE: $(#id)
-                               } else {
-                                       elem = document.getElementById( match[2] );
-
-                                       // Check parentNode to catch when Blackberry 4.6 returns
-                                       // nodes that are no longer in the document #6963
-                                       if ( elem && elem.parentNode ) {
-                                               // Handle the case where IE and Opera return items
-                                               // by name instead of ID
-                                               if ( elem.id !== match[2] ) {
-                                                       return rootjQuery.find( selector );
-                                               }
-
-                                               // Otherwise, we inject the element directly into the jQuery object
-                                               this.length = 1;
-                                               this[0] = elem;
-                                       }
-
-                                       this.context = document;
-                                       this.selector = selector;
-                                       return this;
-                               }
-
-                       // HANDLE: $(expr, $(...))
-                       } else if ( !context || context.jquery ) {
-                               return ( context || rootjQuery ).find( selector );
-
-                       // HANDLE: $(expr, context)
-                       // (which is just equivalent to: $(context).find(expr)
-                       } else {
-                               return this.constructor( context ).find( selector );
-                       }
-
-               // HANDLE: $(DOMElement)
-               } else if ( selector.nodeType ) {
-                       this.context = this[0] = selector;
-                       this.length = 1;
-                       return this;
-
-               // HANDLE: $(function)
-               // Shortcut for document ready
-               } else if ( jQuery.isFunction( selector ) ) {
-                       return rootjQuery.ready( selector );
-               }
-
-               if ( selector.selector !== undefined ) {
-                       this.selector = selector.selector;
-                       this.context = selector.context;
-               }
-
-               return jQuery.makeArray( selector, this );
-       },
-
-       // Start with an empty selector
-       selector: "",
-
-       // The default length of a jQuery object is 0
-       length: 0,
-
-       toArray: function() {
-               return core_slice.call( this );
-       },
-
-       // Get the Nth element in the matched element set OR
-       // Get the whole matched element set as a clean array
-       get: function( num ) {
-               return num == null ?
-
-                       // Return a 'clean' array
-                       this.toArray() :
-
-                       // Return just the object
-                       ( num < 0 ? this[ this.length + num ] : this[ num ] );
-       },
-
-       // Take an array of elements and push it onto the stack
-       // (returning the new matched element set)
-       pushStack: function( elems ) {
-
-               // Build a new jQuery matched element set
-               var ret = jQuery.merge( this.constructor(), elems );
-
-               // Add the old object onto the stack (as a reference)
-               ret.prevObject = this;
-               ret.context = this.context;
-
-               // Return the newly-formed element set
-               return ret;
-       },
-
-       // Execute a callback for every element in the matched set.
-       // (You can seed the arguments with an array of args, but this is
-       // only used internally.)
-       each: function( callback, args ) {
-               return jQuery.each( this, callback, args );
-       },
-
-       ready: function( fn ) {
-               // Add the callback
-               jQuery.ready.promise().done( fn );
-
-               return this;
-       },
-
-       slice: function() {
-               return this.pushStack( core_slice.apply( this, arguments ) );
-       },
-
-       first: function() {
-               return this.eq( 0 );
-       },
-
-       last: function() {
-               return this.eq( -1 );
-       },
-
-       eq: function( i ) {
-               var len = this.length,
-                       j = +i + ( i < 0 ? len : 0 );
-               return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
-       },
-
-       map: function( callback ) {
-               return this.pushStack( jQuery.map(this, function( elem, i ) {
-                       return callback.call( elem, i, elem );
-               }));
-       },
-
-       end: function() {
-               return this.prevObject || this.constructor(null);
-       },
-
-       // For internal use only.
-       // Behaves like an Array's method, not like a jQuery method.
-       push: core_push,
-       sort: [].sort,
-       splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
-       var src, copyIsArray, copy, name, options, clone,
-               target = arguments[0] || {},
-               i = 1,
-               length = arguments.length,
-               deep = false;
-
-       // Handle a deep copy situation
-       if ( typeof target === "boolean" ) {
-               deep = target;
-               target = arguments[1] || {};
-               // skip the boolean and the target
-               i = 2;
-       }
-
-       // Handle case when target is a string or something (possible in deep copy)
-       if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
-               target = {};
-       }
-
-       // extend jQuery itself if only one argument is passed
-       if ( length === i ) {
-               target = this;
-               --i;
-       }
-
-       for ( ; i < length; i++ ) {
-               // Only deal with non-null/undefined values
-               if ( (options = arguments[ i ]) != null ) {
-                       // Extend the base object
-                       for ( name in options ) {
-                               src = target[ name ];
-                               copy = options[ name ];
-
-                               // Prevent never-ending loop
-                               if ( target === copy ) {
-                                       continue;
-                               }
-
-                               // Recurse if we're merging plain objects or arrays
-                               if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
-                                       if ( copyIsArray ) {
-                                               copyIsArray = false;
-                                               clone = src && jQuery.isArray(src) ? src : [];
-
-                                       } else {
-                                               clone = src && jQuery.isPlainObject(src) ? src : {};
-                                       }
-
-                                       // Never move original objects, clone them
-                                       target[ name ] = jQuery.extend( deep, clone, copy );
-
-                               // Don't bring in undefined values
-                               } else if ( copy !== undefined ) {
-                                       target[ name ] = copy;
-                               }
-                       }
-               }
-       }
-
-       // Return the modified object
-       return target;
-};
-
-jQuery.extend({
-       // Unique for each copy of jQuery on the page
-       // Non-digits removed to match rinlinejQuery
-       expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
-
-       noConflict: function( deep ) {
-               if ( window.$ === jQuery ) {
-                       window.$ = _$;
-               }
-
-               if ( deep && window.jQuery === jQuery ) {
-                       window.jQuery = _jQuery;
-               }
-
-               return jQuery;
-       },
-
-       // Is the DOM ready to be used? Set to true once it occurs.
-       isReady: false,
-
-       // A counter to track how many items to wait for before
-       // the ready event fires. See #6781
-       readyWait: 1,
-
-       // Hold (or release) the ready event
-       holdReady: function( hold ) {
-               if ( hold ) {
-                       jQuery.readyWait++;
-               } else {
-                       jQuery.ready( true );
-               }
-       },
-
-       // Handle when the DOM is ready
-       ready: function( wait ) {
-
-               // Abort if there are pending holds or we're already ready
-               if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
-                       return;
-               }
-
-               // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-               if ( !document.body ) {
-                       return setTimeout( jQuery.ready );
-               }
-
-               // Remember that the DOM is ready
-               jQuery.isReady = true;
-
-               // If a normal DOM Ready event fired, decrement, and wait if need be
-               if ( wait !== true && --jQuery.readyWait > 0 ) {
-                       return;
-               }
-
-               // If there are functions bound, to execute
-               readyList.resolveWith( document, [ jQuery ] );
-
-               // Trigger any bound ready events
-               if ( jQuery.fn.trigger ) {
-                       jQuery( document ).trigger("ready").off("ready");
-               }
-       },
-
-       // See test/unit/core.js for details concerning isFunction.
-       // Since version 1.3, DOM methods and functions like alert
-       // aren't supported. They return false on IE (#2968).
-       isFunction: function( obj ) {
-               return jQuery.type(obj) === "function";
-       },
-
-       isArray: Array.isArray || function( obj ) {
-               return jQuery.type(obj) === "array";
-       },
-
-       isWindow: function( obj ) {
-               /* jshint eqeqeq: false */
-               return obj != null && obj == obj.window;
-       },
-
-       isNumeric: function( obj ) {
-               return !isNaN( parseFloat(obj) ) && isFinite( obj );
-       },
-
-       type: function( obj ) {
-               if ( obj == null ) {
-                       return String( obj );
-               }
-               return typeof obj === "object" || typeof obj === "function" ?
-                       class2type[ core_toString.call(obj) ] || "object" :
-                       typeof obj;
-       },
-
-       isPlainObject: function( obj ) {
-               var key;
-
-               // Must be an Object.
-               // Because of IE, we also have to check the presence of the constructor property.
-               // Make sure that DOM nodes and window objects don't pass through, as well
-               if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
-                       return false;
-               }
-
-               try {
-                       // Not own constructor property must be Object
-                       if ( obj.constructor &&
-                               !core_hasOwn.call(obj, "constructor") &&
-                               !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
-                               return false;
-                       }
-               } catch ( e ) {
-                       // IE8,9 Will throw exceptions on certain host objects #9897
-                       return false;
-               }
-
-               // Support: IE<9
-               // Handle iteration over inherited properties before own properties.
-               if ( jQuery.support.ownLast ) {
-                       for ( key in obj ) {
-                               return core_hasOwn.call( obj, key );
-                       }
-               }
-
-               // Own properties are enumerated firstly, so to speed up,
-               // if last one is own, then all properties are own.
-               for ( key in obj ) {}
-
-               return key === undefined || core_hasOwn.call( obj, key );
-       },
-
-       isEmptyObject: function( obj ) {
-               var name;
-               for ( name in obj ) {
-                       return false;
-               }
-               return true;
-       },
-
-       error: function( msg ) {
-               throw new Error( msg );
-       },
-
-       // data: string of html
-       // context (optional): If specified, the fragment will be created in this context, defaults to document
-       // keepScripts (optional): If true, will include scripts passed in the html string
-       parseHTML: function( data, context, keepScripts ) {
-               if ( !data || typeof data !== "string" ) {
-                       return null;
-               }
-               if ( typeof context === "boolean" ) {
-                       keepScripts = context;
-                       context = false;
-               }
-               context = context || document;
-
-               var parsed = rsingleTag.exec( data ),
-                       scripts = !keepScripts && [];
-
-               // Single tag
-               if ( parsed ) {
-                       return [ context.createElement( parsed[1] ) ];
-               }
-
-               parsed = jQuery.buildFragment( [ data ], context, scripts );
-               if ( scripts ) {
-                       jQuery( scripts ).remove();
-               }
-               return jQuery.merge( [], parsed.childNodes );
-       },
-
-       parseJSON: function( data ) {
-               // Attempt to parse using the native JSON parser first
-               if ( window.JSON && window.JSON.parse ) {
-                       return window.JSON.parse( data );
-               }
-
-               if ( data === null ) {
-                       return data;
-               }
-
-               if ( typeof data === "string" ) {
-
-                       // Make sure leading/trailing whitespace is removed (IE can't handle it)
-                       data = jQuery.trim( data );
-
-                       if ( data ) {
-                               // Make sure the incoming data is actual JSON
-                               // Logic borrowed from http://json.org/json2.js
-                               if ( rvalidchars.test( data.replace( rvalidescape, "@" )
-                                       .replace( rvalidtokens, "]" )
-                                       .replace( rvalidbraces, "")) ) {
-
-                                       return ( new Function( "return " + data ) )();
-                               }
-                       }
-               }
-
-               jQuery.error( "Invalid JSON: " + data );
-       },
-
-       // Cross-browser xml parsing
-       parseXML: function( data ) {
-               var xml, tmp;
-               if ( !data || typeof data !== "string" ) {
-                       return null;
-               }
-               try {
-                       if ( window.DOMParser ) { // Standard
-                               tmp = new DOMParser();
-                               xml = tmp.parseFromString( data , "text/xml" );
-                       } else { // IE
-                               xml = new ActiveXObject( "Microsoft.XMLDOM" );
-                               xml.async = "false";
-                               xml.loadXML( data );
-                       }
-               } catch( e ) {
-                       xml = undefined;
-               }
-               if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
-                       jQuery.error( "Invalid XML: " + data );
-               }
-               return xml;
-       },
-
-       noop: function() {},
-
-       // Evaluates a script in a global context
-       // Workarounds based on findings by Jim Driscoll
-       // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
-       globalEval: function( data ) {
-               if ( data && jQuery.trim( data ) ) {
-                       // We use execScript on Internet Explorer
-                       // We use an anonymous function so that context is window
-                       // rather than jQuery in Firefox
-                       ( window.execScript || function( data ) {
-                               window[ "eval" ].call( window, data );
-                       } )( data );
-               }
-       },
-
-       // Convert dashed to camelCase; used by the css and data modules
-       // Microsoft forgot to hump their vendor prefix (#9572)
-       camelCase: function( string ) {
-               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
-       },
-
-       nodeName: function( elem, name ) {
-               return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
-       },
-
-       // args is for internal usage only
-       each: function( obj, callback, args ) {
-               var value,
-                       i = 0,
-                       length = obj.length,
-                       isArray = isArraylike( obj );
-
-               if ( args ) {
-                       if ( isArray ) {
-                               for ( ; i < length; i++ ) {
-                                       value = callback.apply( obj[ i ], args );
-
-                                       if ( value === false ) {
-                                               break;
-                                       }
-                               }
-                       } else {
-                               for ( i in obj ) {
-                                       value = callback.apply( obj[ i ], args );
-
-                                       if ( value === false ) {
-                                               break;
-                                       }
-                               }
-                       }
-
-               // A special, fast, case for the most common use of each
-               } else {
-                       if ( isArray ) {
-                               for ( ; i < length; i++ ) {
-                                       value = callback.call( obj[ i ], i, obj[ i ] );
-
-                                       if ( value === false ) {
-                                               break;
-                                       }
-                               }
-                       } else {
-                               for ( i in obj ) {
-                                       value = callback.call( obj[ i ], i, obj[ i ] );
-
-                                       if ( value === false ) {
-                                               break;
-                                       }
-                               }
-                       }
-               }
-
-               return obj;
-       },
-
-       // Use native String.trim function wherever possible
-       trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
-               function( text ) {
-                       return text == null ?
-                               "" :
-                               core_trim.call( text );
-               } :
-
-               // Otherwise use our own trimming functionality
-               function( text ) {
-                       return text == null ?
-                               "" :
-                               ( text + "" ).replace( rtrim, "" );
-               },
-
-       // results is for internal usage only
-       makeArray: function( arr, results ) {
-               var ret = results || [];
-
-               if ( arr != null ) {
-                       if ( isArraylike( Object(arr) ) ) {
-                               jQuery.merge( ret,
-                                       typeof arr === "string" ?
-                                       [ arr ] : arr
-                               );
-                       } else {
-                               core_push.call( ret, arr );
-                       }
-               }
-
-               return ret;
-       },
-
-       inArray: function( elem, arr, i ) {
-               var len;
-
-               if ( arr ) {
-                       if ( core_indexOf ) {
-                               return core_indexOf.call( arr, elem, i );
-                       }
-
-                       len = arr.length;
-                       i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
-                       for ( ; i < len; i++ ) {
-                               // Skip accessing in sparse arrays
-                               if ( i in arr && arr[ i ] === elem ) {
-                                       return i;
-                               }
-                       }
-               }
-
-               return -1;
-       },
-
-       merge: function( first, second ) {
-               var l = second.length,
-                       i = first.length,
-                       j = 0;
-
-               if ( typeof l === "number" ) {
-                       for ( ; j < l; j++ ) {
-                               first[ i++ ] = second[ j ];
-                       }
-               } else {
-                       while ( second[j] !== undefined ) {
-                               first[ i++ ] = second[ j++ ];
-                       }
-               }
-
-               first.length = i;
-
-               return first;
-       },
-
-       grep: function( elems, callback, inv ) {
-               var retVal,
-                       ret = [],
-                       i = 0,
-                       length = elems.length;
-               inv = !!inv;
-
-               // Go through the array, only saving the items
-               // that pass the validator function
-               for ( ; i < length; i++ ) {
-                       retVal = !!callback( elems[ i ], i );
-                       if ( inv !== retVal ) {
-                               ret.push( elems[ i ] );
-                       }
-               }
-
-               return ret;
-       },
-
-       // arg is for internal usage only
-       map: function( elems, callback, arg ) {
-               var value,
-                       i = 0,
-                       length = elems.length,
-                       isArray = isArraylike( elems ),
-                       ret = [];
-
-               // Go through the array, translating each of the items to their
-               if ( isArray ) {
-                       for ( ; i < length; i++ ) {
-                               value = callback( elems[ i ], i, arg );
-
-                               if ( value != null ) {
-                                       ret[ ret.length ] = value;
-                               }
-                       }
-
-               // Go through every key on the object,
-               } else {
-                       for ( i in elems ) {
-                               value = callback( elems[ i ], i, arg );
-
-                               if ( value != null ) {
-                                       ret[ ret.length ] = value;
-                               }
-                       }
-               }
-
-               // Flatten any nested arrays
-               return core_concat.apply( [], ret );
-       },
-
-       // A global GUID counter for objects
-       guid: 1,
-
-       // Bind a function to a context, optionally partially applying any
-       // arguments.
-       proxy: function( fn, context ) {
-               var args, proxy, tmp;
-
-               if ( typeof context === "string" ) {
-                       tmp = fn[ context ];
-                       context = fn;
-                       fn = tmp;
-               }
-
-               // Quick check to determine if target is callable, in the spec
-               // this throws a TypeError, but we will just return undefined.
-               if ( !jQuery.isFunction( fn ) ) {
-                       return undefined;
-               }
-
-               // Simulated bind
-               args = core_slice.call( arguments, 2 );
-               proxy = function() {
-                       return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
-               };
-
-               // Set the guid of unique handler to the same of original handler, so it can be removed
-               proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
-               return proxy;
-       },
-
-       // Multifunctional method to get and set values of a collection
-       // The value/s can optionally be executed if it's a function
-       access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
-               var i = 0,
-                       length = elems.length,
-                       bulk = key == null;
-
-               // Sets many values
-               if ( jQuery.type( key ) === "object" ) {
-                       chainable = true;
-                       for ( i in key ) {
-                               jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
-                       }
-
-               // Sets one value
-               } else if ( value !== undefined ) {
-                       chainable = true;
-
-                       if ( !jQuery.isFunction( value ) ) {
-                               raw = true;
-                       }
-
-                       if ( bulk ) {
-                               // Bulk operations run against the entire set
-                               if ( raw ) {
-                                       fn.call( elems, value );
-                                       fn = null;
-
-                               // ...except when executing function values
-                               } else {
-                                       bulk = fn;
-                                       fn = function( elem, key, value ) {
-                                               return bulk.call( jQuery( elem ), value );
-                                       };
-                               }
-                       }
-
-                       if ( fn ) {
-                               for ( ; i < length; i++ ) {
-                                       fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
-                               }
-                       }
-               }
-
-               return chainable ?
-                       elems :
-
-                       // Gets
-                       bulk ?
-                               fn.call( elems ) :
-                               length ? fn( elems[0], key ) : emptyGet;
-       },
-
-       now: function() {
-               return ( new Date() ).getTime();
-       },
-
-       // A method for quickly swapping in/out CSS properties to get correct calculations.
-       // Note: this method belongs to the css module but it's needed here for the support module.
-       // If support gets modularized, this method should be moved back to the css module.
-       swap: function( elem, options, callback, args ) {
-               var ret, name,
-                       old = {};
-
-               // Remember the old values, and insert the new ones
-               for ( name in options ) {
-                       old[ name ] = elem.style[ name ];
-                       elem.style[ name ] = options[ name ];
-               }
-
-               ret = callback.apply( elem, args || [] );
-
-               // Revert the old values
-               for ( name in options ) {
-                       elem.style[ name ] = old[ name ];
-               }
-
-               return ret;
-       }
-});
-
-jQuery.ready.promise = function( obj ) {
-       if ( !readyList ) {
-
-               readyList = jQuery.Deferred();
-
-               // Catch cases where $(document).ready() is called after the browser event has already occurred.
-               // we once tried to use readyState "interactive" here, but it caused issues like the one
-               // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
-               if ( document.readyState === "complete" ) {
-                       // Handle it asynchronously to allow scripts the opportunity to delay ready
-                       setTimeout( jQuery.ready );
-
-               // Standards-based browsers support DOMContentLoaded
-               } else if ( document.addEventListener ) {
-                       // Use the handy event callback
-                       document.addEventListener( "DOMContentLoaded", completed, false );
-
-                       // A fallback to window.onload, that will always work
-                       window.addEventListener( "load", completed, false );
-
-               // If IE event model is used
-               } else {
-                       // Ensure firing before onload, maybe late but safe also for iframes
-                       document.attachEvent( "onreadystatechange", completed );
-
-                       // A fallback to window.onload, that will always work
-                       window.attachEvent( "onload", completed );
-
-                       // If IE and not a frame
-                       // continually check to see if the document is ready
-                       var top = false;
-
-                       try {
-                               top = window.frameElement == null && document.documentElement;
-                       } catch(e) {}
-
-                       if ( top && top.doScroll ) {
-                               (function doScrollCheck() {
-                                       if ( !jQuery.isReady ) {
-
-                                               try {
-                                                       // Use the trick by Diego Perini
-                                                       // http://javascript.nwbox.com/IEContentLoaded/
-                                                       top.doScroll("left");
-                                               } catch(e) {
-                                                       return setTimeout( doScrollCheck, 50 );
-                                               }
-
-                                               // detach all dom ready events
-                                               detach();
-
-                                               // and execute any waiting functions
-                                               jQuery.ready();
-                                       }
-                               })();
-                       }
-               }
-       }
-       return readyList.promise( obj );
-};
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
-       class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-function isArraylike( obj ) {
-       var length = obj.length,
-               type = jQuery.type( obj );
-
-       if ( jQuery.isWindow( obj ) ) {
-               return false;
-       }
-
-       if ( obj.nodeType === 1 && length ) {
-               return true;
-       }
-
-       return type === "array" || type !== "function" &&
-               ( length === 0 ||
-               typeof length === "number" && length > 0 && ( length - 1 ) in obj );
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-/*!
- * Sizzle CSS Selector Engine v1.9.4-pre
- * http://sizzlejs.com/
- *
- * Copyright 2013 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2013-05-27
- */
-(function( window, undefined ) {
-
-var i,
-       support,
-       cachedruns,
-       Expr,
-       getText,
-       isXML,
-       compile,
-       outermostContext,
-       sortInput,
-
-       // Local document vars
-       setDocument,
-       document,
-       docElem,
-       documentIsHTML,
-       rbuggyQSA,
-       rbuggyMatches,
-       matches,
-       contains,
-
-       // Instance-specific data
-       expando = "sizzle" + -(new Date()),
-       preferredDoc = window.document,
-       dirruns = 0,
-       done = 0,
-       classCache = createCache(),
-       tokenCache = createCache(),
-       compilerCache = createCache(),
-       hasDuplicate = false,
-       sortOrder = function() { return 0; },
-
-       // General-purpose constants
-       strundefined = typeof undefined,
-       MAX_NEGATIVE = 1 << 31,
-
-       // Instance methods
-       hasOwn = ({}).hasOwnProperty,
-       arr = [],
-       pop = arr.pop,
-       push_native = arr.push,
-       push = arr.push,
-       slice = arr.slice,
-       // Use a stripped-down indexOf if we can't use a native one
-       indexOf = arr.indexOf || function( elem ) {
-               var i = 0,
-                       len = this.length;
-               for ( ; i < len; i++ ) {
-                       if ( this[i] === elem ) {
-                               return i;
-                       }
-               }
-               return -1;
-       },
-
-       booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
-       // Regular expressions
-
-       // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
-       whitespace = "[\\x20\\t\\r\\n\\f]",
-       // http://www.w3.org/TR/css3-syntax/#characters
-       characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
-
-       // Loosely modeled on CSS identifier characters
-       // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
-       // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
-       identifier = characterEncoding.replace( "w", "w#" ),
-
-       // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
-       attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
-               "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
-
-       // Prefer arguments quoted,
-       //   then not containing pseudos/brackets,
-       //   then attribute selectors/non-parenthetical expressions,
-       //   then anything else
-       // These preferences are here to reduce the number of selectors
-       //   needing tokenize in the PSEUDO preFilter
-       pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
-
-       // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
-       rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
-       rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
-       rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
-
-       rsibling = new RegExp( whitespace + "*[+~]" ),
-       rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ),
-
-       rpseudo = new RegExp( pseudos ),
-       ridentifier = new RegExp( "^" + identifier + "$" ),
-
-       matchExpr = {
-               "ID": new RegExp( "^#(" + characterEncoding + ")" ),
-               "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
-               "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
-               "ATTR": new RegExp( "^" + attributes ),
-               "PSEUDO": new RegExp( "^" + pseudos ),
-               "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
-                       "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
-                       "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
-               "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
-               // For use in libraries implementing .is()
-               // We use this for POS matching in `select`
-               "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
-                       whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
-       },
-
-       rnative = /^[^{]+\{\s*\[native \w/,
-
-       // Easily-parseable/retrievable ID or TAG or CLASS selectors
-       rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
-       rinputs = /^(?:input|select|textarea|button)$/i,
-       rheader = /^h\d$/i,
-
-       rescape = /'|\\/g,
-
-       // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
-       runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
-       funescape = function( _, escaped, escapedWhitespace ) {
-               var high = "0x" + escaped - 0x10000;
-               // NaN means non-codepoint
-               // Support: Firefox
-               // Workaround erroneous numeric interpretation of +"0x"
-               return high !== high || escapedWhitespace ?
-                       escaped :
-                       // BMP codepoint
-                       high < 0 ?
-                               String.fromCharCode( high + 0x10000 ) :
-                               // Supplemental Plane codepoint (surrogate pair)
-                               String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
-       };
-
-// Optimize for push.apply( _, NodeList )
-try {
-       push.apply(
-               (arr = slice.call( preferredDoc.childNodes )),
-               preferredDoc.childNodes
-       );
-       // Support: Android<4.0
-       // Detect silently failing push.apply
-       arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
-       push = { apply: arr.length ?
-
-               // Leverage slice if possible
-               function( target, els ) {
-                       push_native.apply( target, slice.call(els) );
-               } :
-
-               // Support: IE<9
-               // Otherwise append directly
-               function( target, els ) {
-                       var j = target.length,
-                               i = 0;
-                       // Can't trust NodeList.length
-                       while ( (target[j++] = els[i++]) ) {}
-                       target.length = j - 1;
-               }
-       };
-}
-
-function Sizzle( selector, context, results, seed ) {
-       var match, elem, m, nodeType,
-               // QSA vars
-               i, groups, old, nid, newContext, newSelector;
-
-       if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
-               setDocument( context );
-       }
-
-       context = context || document;
-       results = results || [];
-
-       if ( !selector || typeof selector !== "string" ) {
-               return results;
-       }
-
-       if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
-               return [];
-       }
-
-       if ( documentIsHTML && !seed ) {
-
-               // Shortcuts
-               if ( (match = rquickExpr.exec( selector )) ) {
-                       // Speed-up: Sizzle("#ID")
-                       if ( (m = match[1]) ) {
-                               if ( nodeType === 9 ) {
-                                       elem = context.getElementById( m );
-                                       // Check parentNode to catch when Blackberry 4.6 returns
-                                       // nodes that are no longer in the document #6963
-                                       if ( elem && elem.parentNode ) {
-                                               // Handle the case where IE, Opera, and Webkit return items
-                                               // by name instead of ID
-                                               if ( elem.id === m ) {
-                                                       results.push( elem );
-                                                       return results;
-                                               }
-                                       } else {
-                                               return results;
-                                       }
-                               } else {
-                                       // Context is not a document
-                                       if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
-                                               contains( context, elem ) && elem.id === m ) {
-                                               results.push( elem );
-                                               return results;
-                                       }
-                               }
-
-                       // Speed-up: Sizzle("TAG")
-                       } else if ( match[2] ) {
-                               push.apply( results, context.getElementsByTagName( selector ) );
-                               return results;
-
-                       // Speed-up: Sizzle(".CLASS")
-                       } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
-                               push.apply( results, context.getElementsByClassName( m ) );
-                               return results;
-                       }
-               }
-
-               // QSA path
-               if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
-                       nid = old = expando;
-                       newContext = context;
-                       newSelector = nodeType === 9 && selector;
-
-                       // qSA works strangely on Element-rooted queries
-                       // We can work around this by specifying an extra ID on the root
-                       // and working up from there (Thanks to Andrew Dupont for the technique)
-                       // IE 8 doesn't work on object elements
-                       if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
-                               groups = tokenize( selector );
-
-                               if ( (old = context.getAttribute("id")) ) {
-                                       nid = old.replace( rescape, "\\$&" );
-                               } else {
-                                       context.setAttribute( "id", nid );
-                               }
-                               nid = "[id='" + nid + "'] ";
-
-                               i = groups.length;
-                               while ( i-- ) {
-                                       groups[i] = nid + toSelector( groups[i] );
-                               }
-                               newContext = rsibling.test( selector ) && context.parentNode || context;
-                               newSelector = groups.join(",");
-                       }
-
-                       if ( newSelector ) {
-                               try {
-                                       push.apply( results,
-                                               newContext.querySelectorAll( newSelector )
-                                       );
-                                       return results;
-                               } catch(qsaError) {
-                               } finally {
-                                       if ( !old ) {
-                                               context.removeAttribute("id");
-                                       }
-                               }
-                       }
-               }
-       }
-
-       // All others
-       return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * For feature detection
- * @param {Function} fn The function to test for native support
- */
-function isNative( fn ) {
-       return rnative.test( fn + "" );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
- *     property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- *     deleting the oldest entry
- */
-function createCache() {
-       var keys = [];
-
-       function cache( key, value ) {
-               // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
-               if ( keys.push( key += " " ) > Expr.cacheLength ) {
-                       // Only keep the most recent entries
-                       delete cache[ keys.shift() ];
-               }
-               return (cache[ key ] = value);
-       }
-       return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
-       fn[ expando ] = true;
-       return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created div and expects a boolean result
- */
-function assert( fn ) {
-       var div = document.createElement("div");
-
-       try {
-               return !!fn( div );
-       } catch (e) {
-               return false;
-       } finally {
-               // Remove from its parent by default
-               if ( div.parentNode ) {
-                       div.parentNode.removeChild( div );
-               }
-               // release memory in IE
-               div = null;
-       }
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied if the test fails
- * @param {Boolean} test The result of a test. If true, null will be set as the handler in leiu of the specified handler
- */
-function addHandle( attrs, handler, test ) {
-       attrs = attrs.split("|");
-       var current,
-               i = attrs.length,
-               setHandle = test ? null : handler;
-
-       while ( i-- ) {
-               // Don't override a user's handler
-               if ( !(current = Expr.attrHandle[ attrs[i] ]) || current === handler ) {
-                       Expr.attrHandle[ attrs[i] ] = setHandle;
-               }
-       }
-}
-
-/**
- * Fetches boolean attributes by node
- * @param {Element} elem
- * @param {String} name
- */
-function boolHandler( elem, name ) {
-       // XML does not need to be checked as this will not be assigned for XML documents
-       var val = elem.getAttributeNode( name );
-       return val && val.specified ?
-               val.value :
-               elem[ name ] === true ? name.toLowerCase() : null;
-}
-
-/**
- * Fetches attributes without interpolation
- * http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
- * @param {Element} elem
- * @param {String} name
- */
-function interpolationHandler( elem, name ) {
-       // XML does not need to be checked as this will not be assigned for XML documents
-       return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
-}
-
-/**
- * Uses defaultValue to retrieve value in IE6/7
- * @param {Element} elem
- * @param {String} name
- */
-function valueHandler( elem ) {
-       // Ignore the value *property* on inputs by using defaultValue
-       // Fallback to Sizzle.attr by returning undefined where appropriate
-       // XML does not need to be checked as this will not be assigned for XML documents
-       if ( elem.nodeName.toLowerCase() === "input" ) {
-               return elem.defaultValue;
-       }
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns Returns -1 if a precedes b, 1 if a follows b
- */
-function siblingCheck( a, b ) {
-       var cur = b && a,
-               diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
-                       ( ~b.sourceIndex || MAX_NEGATIVE ) -
-                       ( ~a.sourceIndex || MAX_NEGATIVE );
-
-       // Use IE sourceIndex if available on both nodes
-       if ( diff ) {
-               return diff;
-       }
-
-       // Check if b follows a
-       if ( cur ) {
-               while ( (cur = cur.nextSibling) ) {
-                       if ( cur === b ) {
-                               return -1;
-                       }
-               }
-       }
-
-       return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
-       return function( elem ) {
-               var name = elem.nodeName.toLowerCase();
-               return name === "input" && elem.type === type;
-       };
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
-       return function( elem ) {
-               var name = elem.nodeName.toLowerCase();
-               return (name === "input" || name === "button") && elem.type === type;
-       };
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
-       return markFunction(function( argument ) {
-               argument = +argument;
-               return markFunction(function( seed, matches ) {
-                       var j,
-                               matchIndexes = fn( [], seed.length, argument ),
-                               i = matchIndexes.length;
-
-                       // Match elements found at the specified indexes
-                       while ( i-- ) {
-                               if ( seed[ (j = matchIndexes[i]) ] ) {
-                                       seed[j] = !(matches[j] = seed[j]);
-                               }
-                       }
-               });
-       });
-}
-
-/**
- * Detect xml
- * @param {Element|Object} elem An element or a document
- */
-isXML = Sizzle.isXML = function( elem ) {
-       // documentElement is verified for cases where it doesn't yet exist
-       // (such as loading iframes in IE - #4833)
-       var documentElement = elem && (elem.ownerDocument || elem).documentElement;
-       return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
-       var doc = node ? node.ownerDocument || node : preferredDoc,
-               parent = doc.parentWindow;
-
-       // If no document and documentElement is available, return
-       if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
-               return document;
-       }
-
-       // Set our document
-       document = doc;
-       docElem = doc.documentElement;
-
-       // Support tests
-       documentIsHTML = !isXML( doc );
-
-       // Support: IE>8
-       // If iframe document is assigned to "document" variable and if iframe has been reloaded,
-       // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
-       if ( parent && parent.frameElement ) {
-               parent.attachEvent( "onbeforeunload", function() {
-                       setDocument();
-               });
-       }
-
-       /* Attributes
-       ---------------------------------------------------------------------- */
-
-       // Support: IE<8
-       // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
-       support.attributes = assert(function( div ) {
-
-               // Support: IE<8
-               // Prevent attribute/property "interpolation"
-               div.innerHTML = "<a href='#'></a>";
-               addHandle( "type|href|height|width", interpolationHandler, div.firstChild.getAttribute("href") === "#" );
-
-               // Support: IE<9
-               // Use getAttributeNode to fetch booleans when getAttribute lies
-               addHandle( booleans, boolHandler, div.getAttribute("disabled") == null );
-
-               div.className = "i";
-               return !div.getAttribute("className");
-       });
-
-       // Support: IE<9
-       // Retrieving value should defer to defaultValue
-       support.input = assert(function( div ) {
-               div.innerHTML = "<input>";
-               div.firstChild.setAttribute( "value", "" );
-               return div.firstChild.getAttribute( "value" ) === "";
-       });
-
-       // IE6/7 still return empty string for value,
-       // but are actually retrieving the property
-       addHandle( "value", valueHandler, support.attributes && support.input );
-
-       /* getElement(s)By*
-       ---------------------------------------------------------------------- */
-
-       // Check if getElementsByTagName("*") returns only elements
-       support.getElementsByTagName = assert(function( div ) {
-               div.appendChild( doc.createComment("") );
-               return !div.getElementsByTagName("*").length;
-       });
-
-       // Check if getElementsByClassName can be trusted
-       support.getElementsByClassName = assert(function( div ) {
-               div.innerHTML = "<div class='a'></div><div class='a i'></div>";
-
-               // Support: Safari<4
-               // Catch class over-caching
-               div.firstChild.className = "i";
-               // Support: Opera<10
-               // Catch gEBCN failure to find non-leading classes
-               return div.getElementsByClassName("i").length === 2;
-       });
-
-       // Support: IE<10
-       // Check if getElementById returns elements by name
-       // The broken getElementById methods don't pick up programatically-set names,
-       // so use a roundabout getElementsByName test
-       support.getById = assert(function( div ) {
-               docElem.appendChild( div ).id = expando;
-               return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
-       });
-
-       // ID find and filter
-       if ( support.getById ) {
-               Expr.find["ID"] = function( id, context ) {
-                       if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
-                               var m = context.getElementById( id );
-                               // Check parentNode to catch when Blackberry 4.6 returns
-                               // nodes that are no longer in the document #6963
-                               return m && m.parentNode ? [m] : [];
-                       }
-               };
-               Expr.filter["ID"] = function( id ) {
-                       var attrId = id.replace( runescape, funescape );
-                       return function( elem ) {
-                               return elem.getAttribute("id") === attrId;
-                       };
-               };
-       } else {
-               // Support: IE6/7
-               // getElementById is not reliable as a find shortcut
-               delete Expr.find["ID"];
-
-               Expr.filter["ID"] =  function( id ) {
-                       var attrId = id.replace( runescape, funescape );
-                       return function( elem ) {
-                               var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
-                               return node && node.value === attrId;
-                       };
-               };
-       }
-
-       // Tag
-       Expr.find["TAG"] = support.getElementsByTagName ?
-               function( tag, context ) {
-                       if ( typeof context.getElementsByTagName !== strundefined ) {
-                               return context.getElementsByTagName( tag );
-                       }
-               } :
-               function( tag, context ) {
-                       var elem,
-                               tmp = [],
-                               i = 0,
-                               results = context.getElementsByTagName( tag );
-
-                       // Filter out possible comments
-                       if ( tag === "*" ) {
-                               while ( (elem = results[i++]) ) {
-                                       if ( elem.nodeType === 1 ) {
-                                               tmp.push( elem );
-                                       }
-                               }
-
-                               return tmp;
-                       }
-                       return results;
-               };
-
-       // Class
-       Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
-               if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
-                       return context.getElementsByClassName( className );
-               }
-       };
-
-       /* QSA/matchesSelector
-       ---------------------------------------------------------------------- */
-
-       // QSA and matchesSelector support
-
-       // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
-       rbuggyMatches = [];
-
-       // qSa(:focus) reports false when true (Chrome 21)
-       // We allow this because of a bug in IE8/9 that throws an error
-       // whenever `document.activeElement` is accessed on an iframe
-       // So, we allow :focus to pass through QSA all the time to avoid the IE error
-       // See http://bugs.jquery.com/ticket/13378
-       rbuggyQSA = [];
-
-       if ( (support.qsa = isNative(doc.querySelectorAll)) ) {
-               // Build QSA regex
-               // Regex strategy adopted from Diego Perini
-               assert(function( div ) {
-                       // Select is set to empty string on purpose
-                       // This is to test IE's treatment of not explicitly
-                       // setting a boolean content attribute,
-                       // since its presence should be enough
-                       // http://bugs.jquery.com/ticket/12359
-                       div.innerHTML = "<select><option selected=''></option></select>";
-
-                       // Support: IE8
-                       // Boolean attributes and "value" are not treated correctly
-                       if ( !div.querySelectorAll("[selected]").length ) {
-                               rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
-                       }
-
-                       // Webkit/Opera - :checked should return selected option elements
-                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
-                       // IE8 throws error here and will not see later tests
-                       if ( !div.querySelectorAll(":checked").length ) {
-                               rbuggyQSA.push(":checked");
-                       }
-               });
-
-               assert(function( div ) {
-
-                       // Support: Opera 10-12/IE8
-                       // ^= $= *= and empty values
-                       // Should not select anything
-                       // Support: Windows 8 Native Apps
-                       // The type attribute is restricted during .innerHTML assignment
-                       var input = doc.createElement("input");
-                       input.setAttribute( "type", "hidden" );
-                       div.appendChild( input ).setAttribute( "t", "" );
-
-                       if ( div.querySelectorAll("[t^='']").length ) {
-                               rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
-                       }
-
-                       // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
-                       // IE8 throws error here and will not see later tests
-                       if ( !div.querySelectorAll(":enabled").length ) {
-                               rbuggyQSA.push( ":enabled", ":disabled" );
-                       }
-
-                       // Opera 10-11 does not throw on post-comma invalid pseudos
-                       div.querySelectorAll("*,:x");
-                       rbuggyQSA.push(",.*:");
-               });
-       }
-
-       if ( (support.matchesSelector = isNative( (matches = docElem.webkitMatchesSelector ||
-               docElem.mozMatchesSelector ||
-               docElem.oMatchesSelector ||
-               docElem.msMatchesSelector) )) ) {
-
-               assert(function( div ) {
-                       // Check to see if it's possible to do matchesSelector
-                       // on a disconnected node (IE 9)
-                       support.disconnectedMatch = matches.call( div, "div" );
-
-                       // This should fail with an exception
-                       // Gecko does not error, returns false instead
-                       matches.call( div, "[s!='']:x" );
-                       rbuggyMatches.push( "!=", pseudos );
-               });
-       }
-
-       rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
-       rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
-
-       /* Contains
-       ---------------------------------------------------------------------- */
-
-       // Element contains another
-       // Purposefully does not implement inclusive descendent
-       // As in, an element does not contain itself
-       contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?
-               function( a, b ) {
-                       var adown = a.nodeType === 9 ? a.documentElement : a,
-                               bup = b && b.parentNode;
-                       return a === bup || !!( bup && bup.nodeType === 1 && (
-                               adown.contains ?
-                                       adown.contains( bup ) :
-                                       a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
-                       ));
-               } :
-               function( a, b ) {
-                       if ( b ) {
-                               while ( (b = b.parentNode) ) {
-                                       if ( b === a ) {
-                                               return true;
-                                       }
-                               }
-                       }
-                       return false;
-               };
-
-       /* Sorting
-       ---------------------------------------------------------------------- */
-
-       // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
-       // Detached nodes confoundingly follow *each other*
-       support.sortDetached = assert(function( div1 ) {
-               // Should return 1, but returns 4 (following)
-               return div1.compareDocumentPosition( doc.createElement("div") ) & 1;
-       });
-
-       // Document order sorting
-       sortOrder = docElem.compareDocumentPosition ?
-       function( a, b ) {
-
-               // Flag for duplicate removal
-               if ( a === b ) {
-                       hasDuplicate = true;
-                       return 0;
-               }
-
-               var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );
-
-               if ( compare ) {
-                       // Disconnected nodes
-                       if ( compare & 1 ||
-                               (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
-
-                               // Choose the first element that is related to our preferred document
-                               if ( a === doc || contains(preferredDoc, a) ) {
-                                       return -1;
-                               }
-                               if ( b === doc || contains(preferredDoc, b) ) {
-                                       return 1;
-                               }
-
-                               // Maintain original order
-                               return sortInput ?
-                                       ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
-                                       0;
-                       }
-
-                       return compare & 4 ? -1 : 1;
-               }
-
-               // Not directly comparable, sort on existence of method
-               return a.compareDocumentPosition ? -1 : 1;
-       } :
-       function( a, b ) {
-               var cur,
-                       i = 0,
-                       aup = a.parentNode,
-                       bup = b.parentNode,
-                       ap = [ a ],
-                       bp = [ b ];
-
-               // Exit early if the nodes are identical
-               if ( a === b ) {
-                       hasDuplicate = true;
-                       return 0;
-
-               // Parentless nodes are either documents or disconnected
-               } else if ( !aup || !bup ) {
-                       return a === doc ? -1 :
-                               b === doc ? 1 :
-                               aup ? -1 :
-                               bup ? 1 :
-                               sortInput ?
-                               ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
-                               0;
-
-               // If the nodes are siblings, we can do a quick check
-               } else if ( aup === bup ) {
-                       return siblingCheck( a, b );
-               }
-
-               // Otherwise we need full lists of their ancestors for comparison
-               cur = a;
-               while ( (cur = cur.parentNode) ) {
-                       ap.unshift( cur );
-               }
-               cur = b;
-               while ( (cur = cur.parentNode) ) {
-                       bp.unshift( cur );
-               }
-
-               // Walk down the tree looking for a discrepancy
-               while ( ap[i] === bp[i] ) {
-                       i++;
-               }
-
-               return i ?
-                       // Do a sibling check if the nodes have a common ancestor
-                       siblingCheck( ap[i], bp[i] ) :
-
-                       // Otherwise nodes in our document sort first
-                       ap[i] === preferredDoc ? -1 :
-                       bp[i] === preferredDoc ? 1 :
-                       0;
-       };
-
-       return doc;
-};
-
-Sizzle.matches = function( expr, elements ) {
-       return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
-       // Set document vars if needed
-       if ( ( elem.ownerDocument || elem ) !== document ) {
-               setDocument( elem );
-       }
-
-       // Make sure that attribute selectors are quoted
-       expr = expr.replace( rattributeQuotes, "='$1']" );
-
-       if ( support.matchesSelector && documentIsHTML &&
-               ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
-               ( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
-
-               try {
-                       var ret = matches.call( elem, expr );
-
-                       // IE 9's matchesSelector returns false on disconnected nodes
-                       if ( ret || support.disconnectedMatch ||
-                                       // As well, disconnected nodes are said to be in a document
-                                       // fragment in IE 9
-                                       elem.document && elem.document.nodeType !== 11 ) {
-                               return ret;
-                       }
-               } catch(e) {}
-       }
-
-       return Sizzle( expr, document, null, [elem] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
-       // Set document vars if needed
-       if ( ( context.ownerDocument || context ) !== document ) {
-               setDocument( context );
-       }
-       return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
-       // Set document vars if needed
-       if ( ( elem.ownerDocument || elem ) !== document ) {
-               setDocument( elem );
-       }
-
-       var fn = Expr.attrHandle[ name.toLowerCase() ],
-               // Don't get fooled by Object.prototype properties (jQuery #13807)
-               val = ( fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
-                       fn( elem, name, !documentIsHTML ) :
-                       undefined );
-
-       return val === undefined ?
-               support.attributes || !documentIsHTML ?
-                       elem.getAttribute( name ) :
-                       (val = elem.getAttributeNode(name)) && val.specified ?
-                               val.value :
-                               null :
-               val;
-};
-
-Sizzle.error = function( msg ) {
-       throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
-       var elem,
-               duplicates = [],
-               j = 0,
-               i = 0;
-
-       // Unless we *know* we can detect duplicates, assume their presence
-       hasDuplicate = !support.detectDuplicates;
-       sortInput = !support.sortStable && results.slice( 0 );
-       results.sort( sortOrder );
-
-       if ( hasDuplicate ) {
-               while ( (elem = results[i++]) ) {
-                       if ( elem === results[ i ] ) {
-                               j = duplicates.push( i );
-                       }
-               }
-               while ( j-- ) {
-                       results.splice( duplicates[ j ], 1 );
-               }
-       }
-
-       return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
-       var node,
-               ret = "",
-               i = 0,
-               nodeType = elem.nodeType;
-
-       if ( !nodeType ) {
-               // If no nodeType, this is expected to be an array
-               for ( ; (node = elem[i]); i++ ) {
-                       // Do not traverse comment nodes
-                       ret += getText( node );
-               }
-       } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
-               // Use textContent for elements
-               // innerText usage removed for consistency of new lines (see #11153)
-               if ( typeof elem.textContent === "string" ) {
-                       return elem.textContent;
-               } else {
-                       // Traverse its children
-                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
-                               ret += getText( elem );
-                       }
-               }
-       } else if ( nodeType === 3 || nodeType === 4 ) {
-               return elem.nodeValue;
-       }
-       // Do not include comment or processing instruction nodes
-
-       return ret;
-};
-
-Expr = Sizzle.selectors = {
-
-       // Can be adjusted by the user
-       cacheLength: 50,
-
-       createPseudo: markFunction,
-
-       match: matchExpr,
-
-       attrHandle: {},
-
-       find: {},
-
-       relative: {
-               ">": { dir: "parentNode", first: true },
-               " ": { dir: "parentNode" },
-               "+": { dir: "previousSibling", first: true },
-               "~": { dir: "previousSibling" }
-       },
-
-       preFilter: {
-               "ATTR": function( match ) {
-                       match[1] = match[1].replace( runescape, funescape );
-
-                       // Move the given value to match[3] whether quoted or unquoted
-                       match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
-
-                       if ( match[2] === "~=" ) {
-                               match[3] = " " + match[3] + " ";
-                       }
-
-                       return match.slice( 0, 4 );
-               },
-
-               "CHILD": function( match ) {
-                       /* matches from matchExpr["CHILD"]
-                               1 type (only|nth|...)
-                               2 what (child|of-type)
-                               3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
-                               4 xn-component of xn+y argument ([+-]?\d*n|)
-                               5 sign of xn-component
-                               6 x of xn-component
-                               7 sign of y-component
-                               8 y of y-component
-                       */
-                       match[1] = match[1].toLowerCase();
-
-                       if ( match[1].slice( 0, 3 ) === "nth" ) {
-                               // nth-* requires argument
-                               if ( !match[3] ) {
-                                       Sizzle.error( match[0] );
-                               }
-
-                               // numeric x and y parameters for Expr.filter.CHILD
-                               // remember that false/true cast respectively to 0/1
-                               match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
-                               match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
-                       // other types prohibit arguments
-                       } else if ( match[3] ) {
-                               Sizzle.error( match[0] );
-                       }
-
-                       return match;
-               },
-
-               "PSEUDO": function( match ) {
-                       var excess,
-                               unquoted = !match[5] && match[2];
-
-                       if ( matchExpr["CHILD"].test( match[0] ) ) {
-                               return null;
-                       }
-
-                       // Accept quoted arguments as-is
-                       if ( match[3] && match[4] !== undefined ) {
-                               match[2] = match[4];
-
-                       // Strip excess characters from unquoted arguments
-                       } else if ( unquoted && rpseudo.test( unquoted ) &&
-                               // Get excess from tokenize (recursively)
-                               (excess = tokenize( unquoted, true )) &&
-                               // advance to the next closing parenthesis
-                               (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
-                               // excess is a negative index
-                               match[0] = match[0].slice( 0, excess );
-                               match[2] = unquoted.slice( 0, excess );
-                       }
-
-                       // Return only captures needed by the pseudo filter method (type and argument)
-                       return match.slice( 0, 3 );
-               }
-       },
-
-       filter: {
-
-               "TAG": function( nodeNameSelector ) {
-                       var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
-                       return nodeNameSelector === "*" ?
-                               function() { return true; } :
-                               function( elem ) {
-                                       return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
-                               };
-               },
-
-               "CLASS": function( className ) {
-                       var pattern = classCache[ className + " " ];
-
-                       return pattern ||
-                               (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
-                               classCache( className, function( elem ) {
-                                       return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
-                               });
-               },
-
-               "ATTR": function( name, operator, check ) {
-                       return function( elem ) {
-                               var result = Sizzle.attr( elem, name );
-
-                               if ( result == null ) {
-                                       return operator === "!=";
-                               }
-                               if ( !operator ) {
-                                       return true;
-                               }
-
-                               result += "";
-
-                               return operator === "=" ? result === check :
-                                       operator === "!=" ? result !== check :
-                                       operator === "^=" ? check && result.indexOf( check ) === 0 :
-                                       operator === "*=" ? check && result.indexOf( check ) > -1 :
-                                       operator === "$=" ? check && result.slice( -check.length ) === check :
-                                       operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
-                                       operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
-                                       false;
-                       };
-               },
-
-               "CHILD": function( type, what, argument, first, last ) {
-                       var simple = type.slice( 0, 3 ) !== "nth",
-                               forward = type.slice( -4 ) !== "last",
-                               ofType = what === "of-type";
-
-                       return first === 1 && last === 0 ?
-
-                               // Shortcut for :nth-*(n)
-                               function( elem ) {
-                                       return !!elem.parentNode;
-                               } :
-
-                               function( elem, context, xml ) {
-                                       var cache, outerCache, node, diff, nodeIndex, start,
-                                               dir = simple !== forward ? "nextSibling" : "previousSibling",
-                                               parent = elem.parentNode,
-                                               name = ofType && elem.nodeName.toLowerCase(),
-                                               useCache = !xml && !ofType;
-
-                                       if ( parent ) {
-
-                                               // :(first|last|only)-(child|of-type)
-                                               if ( simple ) {
-                                                       while ( dir ) {
-                                                               node = elem;
-                                                               while ( (node = node[ dir ]) ) {
-                                                                       if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
-                                                                               return false;
-                                                                       }
-                                                               }
-                                                               // Reverse direction for :only-* (if we haven't yet done so)
-                                                               start = dir = type === "only" && !start && "nextSibling";
-                                                       }
-                                                       return true;
-                                               }
-
-                                               start = [ forward ? parent.firstChild : parent.lastChild ];
-
-                                               // non-xml :nth-child(...) stores cache data on `parent`
-                                               if ( forward && useCache ) {
-                                                       // Seek `elem` from a previously-cached index
-                                                       outerCache = parent[ expando ] || (parent[ expando ] = {});
-                                                       cache = outerCache[ type ] || [];
-                                                       nodeIndex = cache[0] === dirruns && cache[1];
-                                                       diff = cache[0] === dirruns && cache[2];
-                                                       node = nodeIndex && parent.childNodes[ nodeIndex ];
-
-                                                       while ( (node = ++nodeIndex && node && node[ dir ] ||
-
-                                                               // Fallback to seeking `elem` from the start
-                                                               (diff = nodeIndex = 0) || start.pop()) ) {
-
-                                                               // When found, cache indexes on `parent` and break
-                                                               if ( node.nodeType === 1 && ++diff && node === elem ) {
-                                                                       outerCache[ type ] = [ dirruns, nodeIndex, diff ];
-                                                                       break;
-                                                               }
-                                                       }
-
-                                               // Use previously-cached element index if available
-                                               } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
-                                                       diff = cache[1];
-
-                                               // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
-                                               } else {
-                                                       // Use the same loop as above to seek `elem` from the start
-                                                       while ( (node = ++nodeIndex && node && node[ dir ] ||
-                                                               (diff = nodeIndex = 0) || start.pop()) ) {
-
-                                                               if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
-                                                                       // Cache the index of each encountered element
-                                                                       if ( useCache ) {
-                                                                               (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
-                                                                       }
-
-                                                                       if ( node === elem ) {
-                                                                               break;
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-
-                                               // Incorporate the offset, then check against cycle size
-                                               diff -= last;
-                                               return diff === first || ( diff % first === 0 && diff / first >= 0 );
-                                       }
-                               };
-               },
-
-               "PSEUDO": function( pseudo, argument ) {
-                       // pseudo-class names are case-insensitive
-                       // http://www.w3.org/TR/selectors/#pseudo-classes
-                       // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
-                       // Remember that setFilters inherits from pseudos
-                       var args,
-                               fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
-                                       Sizzle.error( "unsupported pseudo: " + pseudo );
-
-                       // The user may use createPseudo to indicate that
-                       // arguments are needed to create the filter function
-                       // just as Sizzle does
-                       if ( fn[ expando ] ) {
-                               return fn( argument );
-                       }
-
-                       // But maintain support for old signatures
-                       if ( fn.length > 1 ) {
-                               args = [ pseudo, pseudo, "", argument ];
-                               return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
-                                       markFunction(function( seed, matches ) {
-                                               var idx,
-                                                       matched = fn( seed, argument ),
-                                                       i = matched.length;
-                                               while ( i-- ) {
-                                                       idx = indexOf.call( seed, matched[i] );
-                                                       seed[ idx ] = !( matches[ idx ] = matched[i] );
-                                               }
-                                       }) :
-                                       function( elem ) {
-                                               return fn( elem, 0, args );
-                                       };
-                       }
-
-                       return fn;
-               }
-       },
-
-       pseudos: {
-               // Potentially complex pseudos
-               "not": markFunction(function( selector ) {
-                       // Trim the selector passed to compile
-                       // to avoid treating leading and trailing
-                       // spaces as combinators
-                       var input = [],
-                               results = [],
-                               matcher = compile( selector.replace( rtrim, "$1" ) );
-
-                       return matcher[ expando ] ?
-                               markFunction(function( seed, matches, context, xml ) {
-                                       var elem,
-                                               unmatched = matcher( seed, null, xml, [] ),
-                                               i = seed.length;
-
-                                       // Match elements unmatched by `matcher`
-                                       while ( i-- ) {
-                                               if ( (elem = unmatched[i]) ) {
-                                                       seed[i] = !(matches[i] = elem);
-                                               }
-                                       }
-                               }) :
-                               function( elem, context, xml ) {
-                                       input[0] = elem;
-                                       matcher( input, null, xml, results );
-                                       return !results.pop();
-                               };
-               }),
-
-               "has": markFunction(function( selector ) {
-                       return function( elem ) {
-                               return Sizzle( selector, elem ).length > 0;
-                       };
-               }),
-
-               "contains": markFunction(function( text ) {
-                       return function( elem ) {
-                               return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
-                       };
-               }),
-
-               // "Whether an element is represented by a :lang() selector
-               // is based solely on the element's language value
-               // being equal to the identifier C,
-               // or beginning with the identifier C immediately followed by "-".
-               // The matching of C against the element's language value is performed case-insensitively.
-               // The identifier C does not have to be a valid language name."
-               // http://www.w3.org/TR/selectors/#lang-pseudo
-               "lang": markFunction( function( lang ) {
-                       // lang value must be a valid identifier
-                       if ( !ridentifier.test(lang || "") ) {
-                               Sizzle.error( "unsupported lang: " + lang );
-                       }
-                       lang = lang.replace( runescape, funescape ).toLowerCase();
-                       return function( elem ) {
-                               var elemLang;
-                               do {
-                                       if ( (elemLang = documentIsHTML ?
-                                               elem.lang :
-                                               elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
-
-                                               elemLang = elemLang.toLowerCase();
-                                               return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
-                                       }
-                               } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
-                               return false;
-                       };
-               }),
-
-               // Miscellaneous
-               "target": function( elem ) {
-                       var hash = window.location && window.location.hash;
-                       return hash && hash.slice( 1 ) === elem.id;
-               },
-
-               "root": function( elem ) {
-                       return elem === docElem;
-               },
-
-               "focus": function( elem ) {
-                       return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
-               },
-
-               // Boolean properties
-               "enabled": function( elem ) {
-                       return elem.disabled === false;
-               },
-
-               "disabled": function( elem ) {
-                       return elem.disabled === true;
-               },
-
-               "checked": function( elem ) {
-                       // In CSS3, :checked should return both checked and selected elements
-                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
-                       var nodeName = elem.nodeName.toLowerCase();
-                       return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
-               },
-
-               "selected": function( elem ) {
-                       // Accessing this property makes selected-by-default
-                       // options in Safari work properly
-                       if ( elem.parentNode ) {
-                               elem.parentNode.selectedIndex;
-                       }
-
-                       return elem.selected === true;
-               },
-
-               // Contents
-               "empty": function( elem ) {
-                       // http://www.w3.org/TR/selectors/#empty-pseudo
-                       // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
-                       //   not comment, processing instructions, or others
-                       // Thanks to Diego Perini for the nodeName shortcut
-                       //   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
-                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
-                               if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
-                                       return false;
-                               }
-                       }
-                       return true;
-               },
-
-               "parent": function( elem ) {
-                       return !Expr.pseudos["empty"]( elem );
-               },
-
-               // Element/input types
-               "header": function( elem ) {
-                       return rheader.test( elem.nodeName );
-               },
-
-               "input": function( elem ) {
-                       return rinputs.test( elem.nodeName );
-               },
-
-               "button": function( elem ) {
-                       var name = elem.nodeName.toLowerCase();
-                       return name === "input" && elem.type === "button" || name === "button";
-               },
-
-               "text": function( elem ) {
-                       var attr;
-                       // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
-                       // use getAttribute instead to test this case
-                       return elem.nodeName.toLowerCase() === "input" &&
-                               elem.type === "text" &&
-                               ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
-               },
-
-               // Position-in-collection
-               "first": createPositionalPseudo(function() {
-                       return [ 0 ];
-               }),
-
-               "last": createPositionalPseudo(function( matchIndexes, length ) {
-                       return [ length - 1 ];
-               }),
-
-               "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
-                       return [ argument < 0 ? argument + length : argument ];
-               }),
-
-               "even": createPositionalPseudo(function( matchIndexes, length ) {
-                       var i = 0;
-                       for ( ; i < length; i += 2 ) {
-                               matchIndexes.push( i );
-                       }
-                       return matchIndexes;
-               }),
-
-               "odd": createPositionalPseudo(function( matchIndexes, length ) {
-                       var i = 1;
-                       for ( ; i < length; i += 2 ) {
-                               matchIndexes.push( i );
-                       }
-                       return matchIndexes;
-               }),
-
-               "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
-                       var i = argument < 0 ? argument + length : argument;
-                       for ( ; --i >= 0; ) {
-                               matchIndexes.push( i );
-                       }
-                       return matchIndexes;
-               }),
-
-               "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
-                       var i = argument < 0 ? argument + length : argument;
-                       for ( ; ++i < length; ) {
-                               matchIndexes.push( i );
-                       }
-                       return matchIndexes;
-               })
-       }
-};
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
-       Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
-       Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-function tokenize( selector, parseOnly ) {
-       var matched, match, tokens, type,
-               soFar, groups, preFilters,
-               cached = tokenCache[ selector + " " ];
-
-       if ( cached ) {
-               return parseOnly ? 0 : cached.slice( 0 );
-       }
-
-       soFar = selector;
-       groups = [];
-       preFilters = Expr.preFilter;
-
-       while ( soFar ) {
-
-               // Comma and first run
-               if ( !matched || (match = rcomma.exec( soFar )) ) {
-                       if ( match ) {
-                               // Don't consume trailing commas as valid
-                               soFar = soFar.slice( match[0].length ) || soFar;
-                       }
-                       groups.push( tokens = [] );
-               }
-
-               matched = false;
-
-               // Combinators
-               if ( (match = rcombinators.exec( soFar )) ) {
-                       matched = match.shift();
-                       tokens.push({
-                               value: matched,
-                               // Cast descendant combinators to space
-                               type: match[0].replace( rtrim, " " )
-                       });
-                       soFar = soFar.slice( matched.length );
-               }
-
-               // Filters
-               for ( type in Expr.filter ) {
-                       if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
-                               (match = preFilters[ type ]( match ))) ) {
-                               matched = match.shift();
-                               tokens.push({
-                                       value: matched,
-                                       type: type,
-                                       matches: match
-                               });
-                               soFar = soFar.slice( matched.length );
-                       }
-               }
-
-               if ( !matched ) {
-                       break;
-               }
-       }
-
-       // Return the length of the invalid excess
-       // if we're just parsing
-       // Otherwise, throw an error or return tokens
-       return parseOnly ?
-               soFar.length :
-               soFar ?
-                       Sizzle.error( selector ) :
-                       // Cache the tokens
-                       tokenCache( selector, groups ).slice( 0 );
-}
-
-function toSelector( tokens ) {
-       var i = 0,
-               len = tokens.length,
-               selector = "";
-       for ( ; i < len; i++ ) {
-               selector += tokens[i].value;
-       }
-       return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
-       var dir = combinator.dir,
-               checkNonElements = base && dir === "parentNode",
-               doneName = done++;
-
-       return combinator.first ?
-               // Check against closest ancestor/preceding element
-               function( elem, context, xml ) {
-                       while ( (elem = elem[ dir ]) ) {
-                               if ( elem.nodeType === 1 || checkNonElements ) {
-                                       return matcher( elem, context, xml );
-                               }
-                       }
-               } :
-
-               // Check against all ancestor/preceding elements
-               function( elem, context, xml ) {
-                       var data, cache, outerCache,
-                               dirkey = dirruns + " " + doneName;
-
-                       // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
-                       if ( xml ) {
-                               while ( (elem = elem[ dir ]) ) {
-                                       if ( elem.nodeType === 1 || checkNonElements ) {
-                                               if ( matcher( elem, context, xml ) ) {
-                                                       return true;
-                                               }
-                                       }
-                               }
-                       } else {
-                               while ( (elem = elem[ dir ]) ) {
-                                       if ( elem.nodeType === 1 || checkNonElements ) {
-                                               outerCache = elem[ expando ] || (elem[ expando ] = {});
-                                               if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
-                                                       if ( (data = cache[1]) === true || data === cachedruns ) {
-                                                               return data === true;
-                                                       }
-                                               } else {
-                                                       cache = outerCache[ dir ] = [ dirkey ];
-                                                       cache[1] = matcher( elem, context, xml ) || cachedruns;
-                                                       if ( cache[1] === true ) {
-                                                               return true;
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               };
-}
-
-function elementMatcher( matchers ) {
-       return matchers.length > 1 ?
-               function( elem, context, xml ) {
-                       var i = matchers.length;
-                       while ( i-- ) {
-                               if ( !matchers[i]( elem, context, xml ) ) {
-                                       return false;
-                               }
-                       }
-                       return true;
-               } :
-               matchers[0];
-}
-
-function condense( unmatched, map, filter, context, xml ) {
-       var elem,
-               newUnmatched = [],
-               i = 0,
-               len = unmatched.length,
-               mapped = map != null;
-
-       for ( ; i < len; i++ ) {
-               if ( (elem = unmatched[i]) ) {
-                       if ( !filter || filter( elem, context, xml ) ) {
-                               newUnmatched.push( elem );
-                               if ( mapped ) {
-                                       map.push( i );
-                               }
-                       }
-               }
-       }
-
-       return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
-       if ( postFilter && !postFilter[ expando ] ) {
-               postFilter = setMatcher( postFilter );
-       }
-       if ( postFinder && !postFinder[ expando ] ) {
-               postFinder = setMatcher( postFinder, postSelector );
-       }
-       return markFunction(function( seed, results, context, xml ) {
-               var temp, i, elem,
-                       preMap = [],
-                       postMap = [],
-                       preexisting = results.length,
-
-                       // Get initial elements from seed or context
-                       elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
-                       // Prefilter to get matcher input, preserving a map for seed-results synchronization
-                       matcherIn = preFilter && ( seed || !selector ) ?
-                               condense( elems, preMap, preFilter, context, xml ) :
-                               elems,
-
-                       matcherOut = matcher ?
-                               // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
-                               postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
-                                       // ...intermediate processing is necessary
-                                       [] :
-
-                                       // ...otherwise use results directly
-                                       results :
-                               matcherIn;
-
-               // Find primary matches
-               if ( matcher ) {
-                       matcher( matcherIn, matcherOut, context, xml );
-               }
-
-               // Apply postFilter
-               if ( postFilter ) {
-                       temp = condense( matcherOut, postMap );
-                       postFilter( temp, [], context, xml );
-
-                       // Un-match failing elements by moving them back to matcherIn
-                       i = temp.length;
-                       while ( i-- ) {
-                               if ( (elem = temp[i]) ) {
-                                       matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
-                               }
-                       }
-               }
-
-               if ( seed ) {
-                       if ( postFinder || preFilter ) {
-                               if ( postFinder ) {
-                                       // Get the final matcherOut by condensing this intermediate into postFinder contexts
-                                       temp = [];
-                                       i = matcherOut.length;
-                                       while ( i-- ) {
-                                               if ( (elem = matcherOut[i]) ) {
-                                                       // Restore matcherIn since elem is not yet a final match
-                                                       temp.push( (matcherIn[i] = elem) );
-                                               }
-                                       }
-                                       postFinder( null, (matcherOut = []), temp, xml );
-                               }
-
-                               // Move matched elements from seed to results to keep them synchronized
-                               i = matcherOut.length;
-                               while ( i-- ) {
-                                       if ( (elem = matcherOut[i]) &&
-                                               (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
-
-                                               seed[temp] = !(results[temp] = elem);
-                                       }
-                               }
-                       }
-
-               // Add elements to results, through postFinder if defined
-               } else {
-                       matcherOut = condense(
-                               matcherOut === results ?
-                                       matcherOut.splice( preexisting, matcherOut.length ) :
-                                       matcherOut
-                       );
-                       if ( postFinder ) {
-                               postFinder( null, results, matcherOut, xml );
-                       } else {
-                               push.apply( results, matcherOut );
-                       }
-               }
-       });
-}
-
-function matcherFromTokens( tokens ) {
-       var checkContext, matcher, j,
-               len = tokens.length,
-               leadingRelative = Expr.relative[ tokens[0].type ],
-               implicitRelative = leadingRelative || Expr.relative[" "],
-               i = leadingRelative ? 1 : 0,
-
-               // The foundational matcher ensures that elements are reachable from top-level context(s)
-               matchContext = addCombinator( function( elem ) {
-                       return elem === checkContext;
-               }, implicitRelative, true ),
-               matchAnyContext = addCombinator( function( elem ) {
-                       return indexOf.call( checkContext, elem ) > -1;
-               }, implicitRelative, true ),
-               matchers = [ function( elem, context, xml ) {
-                       return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
-                               (checkContext = context).nodeType ?
-                                       matchContext( elem, context, xml ) :
-                                       matchAnyContext( elem, context, xml ) );
-               } ];
-
-       for ( ; i < len; i++ ) {
-               if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
-                       matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
-               } else {
-                       matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
-                       // Return special upon seeing a positional matcher
-                       if ( matcher[ expando ] ) {
-                               // Find the next relative operator (if any) for proper handling
-                               j = ++i;
-                               for ( ; j < len; j++ ) {
-                                       if ( Expr.relative[ tokens[j].type ] ) {
-                                               break;
-                                       }
-                               }
-                               return setMatcher(
-                                       i > 1 && elementMatcher( matchers ),
-                                       i > 1 && toSelector(
-                                               // If the preceding token was a descendant combinator, insert an implicit any-element `*`
-                                               tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
-                                       ).replace( rtrim, "$1" ),
-                                       matcher,
-                                       i < j && matcherFromTokens( tokens.slice( i, j ) ),
-                                       j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
-                                       j < len && toSelector( tokens )
-                               );
-                       }
-                       matchers.push( matcher );
-               }
-       }
-
-       return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
-       // A counter to specify which element is currently being matched
-       var matcherCachedRuns = 0,
-               bySet = setMatchers.length > 0,
-               byElement = elementMatchers.length > 0,
-               superMatcher = function( seed, context, xml, results, expandContext ) {
-                       var elem, j, matcher,
-                               setMatched = [],
-                               matchedCount = 0,
-                               i = "0",
-                               unmatched = seed && [],
-                               outermost = expandContext != null,
-                               contextBackup = outermostContext,
-                               // We must always have either seed elements or context
-                               elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
-                               // Use integer dirruns iff this is the outermost matcher
-                               dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
-
-                       if ( outermost ) {
-                               outermostContext = context !== document && context;
-                               cachedruns = matcherCachedRuns;
-                       }
-
-                       // Add elements passing elementMatchers directly to results
-                       // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
-                       for ( ; (elem = elems[i]) != null; i++ ) {
-                               if ( byElement && elem ) {
-                                       j = 0;
-                                       while ( (matcher = elementMatchers[j++]) ) {
-                                               if ( matcher( elem, context, xml ) ) {
-                                                       results.push( elem );
-                                                       break;
-                                               }
-                                       }
-                                       if ( outermost ) {
-                                               dirruns = dirrunsUnique;
-                                               cachedruns = ++matcherCachedRuns;
-                                       }
-                               }
-
-                               // Track unmatched elements for set filters
-                               if ( bySet ) {
-                                       // They will have gone through all possible matchers
-                                       if ( (elem = !matcher && elem) ) {
-                                               matchedCount--;
-                                       }
-
-                                       // Lengthen the array for every element, matched or not
-                                       if ( seed ) {
-                                               unmatched.push( elem );
-                                       }
-                               }
-                       }
-
-                       // Apply set filters to unmatched elements
-                       matchedCount += i;
-                       if ( bySet && i !== matchedCount ) {
-                               j = 0;
-                               while ( (matcher = setMatchers[j++]) ) {
-                                       matcher( unmatched, setMatched, context, xml );
-                               }
-
-                               if ( seed ) {
-                                       // Reintegrate element matches to eliminate the need for sorting
-                                       if ( matchedCount > 0 ) {
-                                               while ( i-- ) {
-                                                       if ( !(unmatched[i] || setMatched[i]) ) {
-                                                               setMatched[i] = pop.call( results );
-                                                       }
-                                               }
-                                       }
-
-                                       // Discard index placeholder values to get only actual matches
-                                       setMatched = condense( setMatched );
-                               }
-
-                               // Add matches to results
-                               push.apply( results, setMatched );
-
-                               // Seedless set matches succeeding multiple successful matchers stipulate sorting
-                               if ( outermost && !seed && setMatched.length > 0 &&
-                                       ( matchedCount + setMatchers.length ) > 1 ) {
-
-                                       Sizzle.uniqueSort( results );
-                               }
-                       }
-
-                       // Override manipulation of globals by nested matchers
-                       if ( outermost ) {
-                               dirruns = dirrunsUnique;
-                               outermostContext = contextBackup;
-                       }
-
-                       return unmatched;
-               };
-
-       return bySet ?
-               markFunction( superMatcher ) :
-               superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
-       var i,
-               setMatchers = [],
-               elementMatchers = [],
-               cached = compilerCache[ selector + " " ];
-
-       if ( !cached ) {
-               // Generate a function of recursive functions that can be used to check each element
-               if ( !group ) {
-                       group = tokenize( selector );
-               }
-               i = group.length;
-               while ( i-- ) {
-                       cached = matcherFromTokens( group[i] );
-                       if ( cached[ expando ] ) {
-                               setMatchers.push( cached );
-                       } else {
-                               elementMatchers.push( cached );
-                       }
-               }
-
-               // Cache the compiled function
-               cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
-       }
-       return cached;
-};
-
-function multipleContexts( selector, contexts, results ) {
-       var i = 0,
-               len = contexts.length;
-       for ( ; i < len; i++ ) {
-               Sizzle( selector, contexts[i], results );
-       }
-       return results;
-}
-
-function select( selector, context, results, seed ) {
-       var i, tokens, token, type, find,
-               match = tokenize( selector );
-
-       if ( !seed ) {
-               // Try to minimize operations if there is only one group
-               if ( match.length === 1 ) {
-
-                       // Take a shortcut and set the context if the root selector is an ID
-                       tokens = match[0] = match[0].slice( 0 );
-                       if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
-                                       support.getById && context.nodeType === 9 && documentIsHTML &&
-                                       Expr.relative[ tokens[1].type ] ) {
-
-                               context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
-                               if ( !context ) {
-                                       return results;
-                               }
-                               selector = selector.slice( tokens.shift().value.length );
-                       }
-
-                       // Fetch a seed set for right-to-left matching
-                       i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
-                       while ( i-- ) {
-                               token = tokens[i];
-
-                               // Abort if we hit a combinator
-                               if ( Expr.relative[ (type = token.type) ] ) {
-                                       break;
-                               }
-                               if ( (find = Expr.find[ type ]) ) {
-                                       // Search, expanding context for leading sibling combinators
-                                       if ( (seed = find(
-                                               token.matches[0].replace( runescape, funescape ),
-                                               rsibling.test( tokens[0].type ) && context.parentNode || context
-                                       )) ) {
-
-                                               // If seed is empty or no tokens remain, we can return early
-                                               tokens.splice( i, 1 );
-                                               selector = seed.length && toSelector( tokens );
-                                               if ( !selector ) {
-                                                       push.apply( results, seed );
-                                                       return results;
-                                               }
-
-                                               break;
-                                       }
-                               }
-                       }
-               }
-       }
-
-       // Compile and execute a filtering function
-       // Provide `match` to avoid retokenization if we modified the selector above
-       compile( selector, match )(
-               seed,
-               context,
-               !documentIsHTML,
-               results,
-               rsibling.test( selector )
-       );
-       return results;
-}
-
-// Deprecated
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Chrome<<14
-// Always assume duplicates if they aren't passed to the comparison function
-[0, 0].sort( sortOrder );
-support.detectDuplicates = hasDuplicate;
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.pseudos;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})( window );
-// String to Object options format cache
-var optionsCache = {};
-
-// Convert String-formatted options into Object-formatted ones and store in cache
-function createOptions( options ) {
-       var object = optionsCache[ options ] = {};
-       jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
-               object[ flag ] = true;
-       });
-       return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- *     options: an optional list of space-separated options that will change how
- *                     the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- *     once:                   will ensure the callback list can only be fired once (like a Deferred)
- *
- *     memory:                 will keep track of previous values and will call any callback added
- *                                     after the list has been fired right away with the latest "memorized"
- *                                     values (like a Deferred)
- *
- *     unique:                 will ensure a callback can only be added once (no duplicate in the list)
- *
- *     stopOnFalse:    interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
-       // Convert options from String-formatted to Object-formatted if needed
-       // (we check in cache first)
-       options = typeof options === "string" ?
-               ( optionsCache[ options ] || createOptions( options ) ) :
-               jQuery.extend( {}, options );
-
-       var // Flag to know if list is currently firing
-               firing,
-               // Last fire value (for non-forgettable lists)
-               memory,
-               // Flag to know if list was already fired
-               fired,
-               // End of the loop when firing
-               firingLength,
-               // Index of currently firing callback (modified by remove if needed)
-               firingIndex,
-               // First callback to fire (used internally by add and fireWith)
-               firingStart,
-               // Actual callback list
-               list = [],
-               // Stack of fire calls for repeatable lists
-               stack = !options.once && [],
-               // Fire callbacks
-               fire = function( data ) {
-                       memory = options.memory && data;
-                       fired = true;
-                       firingIndex = firingStart || 0;
-                       firingStart = 0;
-                       firingLength = list.length;
-                       firing = true;
-                       for ( ; list && firingIndex < firingLength; firingIndex++ ) {
-                               if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
-                                       memory = false; // To prevent further calls using add
-                                       break;
-                               }
-                       }
-                       firing = false;
-                       if ( list ) {
-                               if ( stack ) {
-                                       if ( stack.length ) {
-                                               fire( stack.shift() );
-                                       }
-                               } else if ( memory ) {
-                                       list = [];
-                               } else {
-                                       self.disable();
-                               }
-                       }
-               },
-               // Actual Callbacks object
-               self = {
-                       // Add a callback or a collection of callbacks to the list
-                       add: function() {
-                               if ( list ) {
-                                       // First, we save the current length
-                                       var start = list.length;
-                                       (function add( args ) {
-                                               jQuery.each( args, function( _, arg ) {
-                                                       var type = jQuery.type( arg );
-                                                       if ( type === "function" ) {
-                                                               if ( !options.unique || !self.has( arg ) ) {
-                                                                       list.push( arg );
-                                                               }
-                                                       } else if ( arg && arg.length && type !== "string" ) {
-                                                               // Inspect recursively
-                                                               add( arg );
-                                                       }
-                                               });
-                                       })( arguments );
-                                       // Do we need to add the callbacks to the
-                                       // current firing batch?
-                                       if ( firing ) {
-                                               firingLength = list.length;
-                                       // With memory, if we're not firing then
-                                       // we should call right away
-                                       } else if ( memory ) {
-                                               firingStart = start;
-                                               fire( memory );
-                                       }
-                               }
-                               return this;
-                       },
-                       // Remove a callback from the list
-                       remove: function() {
-                               if ( list ) {
-                                       jQuery.each( arguments, function( _, arg ) {
-                                               var index;
-                                               while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
-                                                       list.splice( index, 1 );
-                                                       // Handle firing indexes
-                                                       if ( firing ) {
-                                                               if ( index <= firingLength ) {
-                                                                       firingLength--;
-                                                               }
-                                                               if ( index <= firingIndex ) {
-                                                                       firingIndex--;
-                                                               }
-                                                       }
-                                               }
-                                       });
-                               }
-                               return this;
-                       },
-                       // Check if a given callback is in the list.
-                       // If no argument is given, return whether or not list has callbacks attached.
-                       has: function( fn ) {
-                               return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
-                       },
-                       // Remove all callbacks from the list
-                       empty: function() {
-                               list = [];
-                               firingLength = 0;
-                               return this;
-                       },
-                       // Have the list do nothing anymore
-                       disable: function() {
-                               list = stack = memory = undefined;
-                               return this;
-                       },
-                       // Is it disabled?
-                       disabled: function() {
-                               return !list;
-                       },
-                       // Lock the list in its current state
-                       lock: function() {
-                               stack = undefined;
-                               if ( !memory ) {
-                                       self.disable();
-                               }
-                               return this;
-                       },
-                       // Is it locked?
-                       locked: function() {
-                               return !stack;
-                       },
-                       // Call all callbacks with the given context and arguments
-                       fireWith: function( context, args ) {
-                               args = args || [];
-                               args = [ context, args.slice ? args.slice() : args ];
-                               if ( list && ( !fired || stack ) ) {
-                                       if ( firing ) {
-                                               stack.push( args );
-                                       } else {
-                                               fire( args );
-                                       }
-                               }
-                               return this;
-                       },
-                       // Call all the callbacks with the given arguments
-                       fire: function() {
-                               self.fireWith( this, arguments );
-                               return this;
-                       },
-                       // To know if the callbacks have already been called at least once
-                       fired: function() {
-                               return !!fired;
-                       }
-               };
-
-       return self;
-};
-jQuery.extend({
-
-       Deferred: function( func ) {
-               var tuples = [
-                               // action, add listener, listener list, final state
-                               [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
-                               [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
-                               [ "notify", "progress", jQuery.Callbacks("memory") ]
-                       ],
-                       state = "pending",
-                       promise = {
-                               state: function() {
-                                       return state;
-                               },
-                               always: function() {
-                                       deferred.done( arguments ).fail( arguments );
-                                       return this;
-                               },
-                               then: function( /* fnDone, fnFail, fnProgress */ ) {
-                                       var fns = arguments;
-                                       return jQuery.Deferred(function( newDefer ) {
-                                               jQuery.each( tuples, function( i, tuple ) {
-                                                       var action = tuple[ 0 ],
-                                                               fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
-                                                       // deferred[ done | fail | progress ] for forwarding actions to newDefer
-                                                       deferred[ tuple[1] ](function() {
-                                                               var returned = fn && fn.apply( this, arguments );
-                                                               if ( returned && jQuery.isFunction( returned.promise ) ) {
-                                                                       returned.promise()
-                                                                               .done( newDefer.resolve )
-                                                                               .fail( newDefer.reject )
-                                                                               .progress( newDefer.notify );
-                                                               } else {
-                                                                       newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
-                                                               }
-                                                       });
-                                               });
-                                               fns = null;
-                                       }).promise();
-                               },
-                               // Get a promise for this deferred
-                               // If obj is provided, the promise aspect is added to the object
-                               promise: function( obj ) {
-                                       return obj != null ? jQuery.extend( obj, promise ) : promise;
-                               }
-                       },
-                       deferred = {};
-
-               // Keep pipe for back-compat
-               promise.pipe = promise.then;
-
-               // Add list-specific methods
-               jQuery.each( tuples, function( i, tuple ) {
-                       var list = tuple[ 2 ],
-                               stateString = tuple[ 3 ];
-
-                       // promise[ done | fail | progress ] = list.add
-                       promise[ tuple[1] ] = list.add;
-
-                       // Handle state
-                       if ( stateString ) {
-                               list.add(function() {
-                                       // state = [ resolved | rejected ]
-                                       state = stateString;
-
-                               // [ reject_list | resolve_list ].disable; progress_list.lock
-                               }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
-                       }
-
-                       // deferred[ resolve | reject | notify ]
-                       deferred[ tuple[0] ] = function() {
-                               deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
-                               return this;
-                       };
-                       deferred[ tuple[0] + "With" ] = list.fireWith;
-               });
-
-               // Make the deferred a promise
-               promise.promise( deferred );
-
-               // Call given func if any
-               if ( func ) {
-                       func.call( deferred, deferred );
-               }
-
-               // All done!
-               return deferred;
-       },
-
-       // Deferred helper
-       when: function( subordinate /* , ..., subordinateN */ ) {
-               var i = 0,
-                       resolveValues = core_slice.call( arguments ),
-                       length = resolveValues.length,
-
-                       // the count of uncompleted subordinates
-                       remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
-
-                       // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
-                       deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
-
-                       // Update function for both resolve and progress values
-                       updateFunc = function( i, contexts, values ) {
-                               return function( value ) {
-                                       contexts[ i ] = this;
-                                       values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
-                                       if( values === progressValues ) {
-                                               deferred.notifyWith( contexts, values );
-                                       } else if ( !( --remaining ) ) {
-                                               deferred.resolveWith( contexts, values );
-                                       }
-                               };
-                       },
-
-                       progressValues, progressContexts, resolveContexts;
-
-               // add listeners to Deferred subordinates; treat others as resolved
-               if ( length > 1 ) {
-                       progressValues = new Array( length );
-                       progressContexts = new Array( length );
-                       resolveContexts = new Array( length );
-                       for ( ; i < length; i++ ) {
-                               if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
-                                       resolveValues[ i ].promise()
-                                               .done( updateFunc( i, resolveContexts, resolveValues ) )
-                                               .fail( deferred.reject )
-                                               .progress( updateFunc( i, progressContexts, progressValues ) );
-                               } else {
-                                       --remaining;
-                               }
-                       }
-               }
-
-               // if we're not waiting on anything, resolve the master
-               if ( !remaining ) {
-                       deferred.resolveWith( resolveContexts, resolveValues );
-               }
-
-               return deferred.promise();
-       }
-});
-jQuery.support = (function( support ) {
-
-       var all, a, input, select, fragment, opt, eventName, isSupported, i,
-               div = document.createElement("div");
-
-       // Setup
-       div.setAttribute( "className", "t" );
-       div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-
-       // Finish early in limited (non-browser) environments
-       all = div.getElementsByTagName("*") || [];
-       a = div.getElementsByTagName("a")[ 0 ];
-       if ( !a || !a.style || !all.length ) {
-               return support;
-       }
-
-       // First batch of tests
-       select = document.createElement("select");
-       opt = select.appendChild( document.createElement("option") );
-       input = div.getElementsByTagName("input")[ 0 ];
-
-       a.style.cssText = "top:1px;float:left;opacity:.5";
-
-       // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
-       support.getSetAttribute = div.className !== "t";
-
-       // IE strips leading whitespace when .innerHTML is used
-       support.leadingWhitespace = div.firstChild.nodeType === 3;
-
-       // Make sure that tbody elements aren't automatically inserted
-       // IE will insert them into empty tables
-       support.tbody = !div.getElementsByTagName("tbody").length;
-
-       // Make sure that link elements get serialized correctly by innerHTML
-       // This requires a wrapper element in IE
-       support.htmlSerialize = !!div.getElementsByTagName("link").length;
-
-       // Get the style information from getAttribute
-       // (IE uses .cssText instead)
-       support.style = /top/.test( a.getAttribute("style") );
-
-       // Make sure that URLs aren't manipulated
-       // (IE normalizes it by default)
-       support.hrefNormalized = a.getAttribute("href") === "/a";
-
-       // Make sure that element opacity exists
-       // (IE uses filter instead)
-       // Use a regex to work around a WebKit issue. See #5145
-       support.opacity = /^0.5/.test( a.style.opacity );
-
-       // Verify style float existence
-       // (IE uses styleFloat instead of cssFloat)
-       support.cssFloat = !!a.style.cssFloat;
-
-       // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
-       support.checkOn = !!input.value;
-
-       // Make sure that a selected-by-default option has a working selected property.
-       // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
-       support.optSelected = opt.selected;
-
-       // Tests for enctype support on a form (#6743)
-       support.enctype = !!document.createElement("form").enctype;
-
-       // Makes sure cloning an html5 element does not cause problems
-       // Where outerHTML is undefined, this still works
-       support.html5Clone = document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>";
-
-       // Will be defined later
-       support.inlineBlockNeedsLayout = false;
-       support.shrinkWrapBlocks = false;
-       support.pixelPosition = false;
-       support.deleteExpando = true;
-       support.noCloneEvent = true;
-       support.reliableMarginRight = true;
-       support.boxSizingReliable = true;
-
-       // Make sure checked status is properly cloned
-       input.checked = true;
-       support.noCloneChecked = input.cloneNode( true ).checked;
-
-       // Make sure that the options inside disabled selects aren't marked as disabled
-       // (WebKit marks them as disabled)
-       select.disabled = true;
-       support.optDisabled = !opt.disabled;
-
-       // Support: IE<9
-       try {
-               delete div.test;
-       } catch( e ) {
-               support.deleteExpando = false;
-       }
-
-       // Check if we can trust getAttribute("value")
-       input = document.createElement("input");
-       input.setAttribute( "value", "" );
-       support.input = input.getAttribute( "value" ) === "";
-
-       // Check if an input maintains its value after becoming a radio
-       input.value = "t";
-       input.setAttribute( "type", "radio" );
-       support.radioValue = input.value === "t";
-
-       // #11217 - WebKit loses check when the name is after the checked attribute
-       input.setAttribute( "checked", "t" );
-       input.setAttribute( "name", "t" );
-
-       fragment = document.createDocumentFragment();
-       fragment.appendChild( input );
-
-       // Check if a disconnected checkbox will retain its checked
-       // value of true after appended to the DOM (IE6/7)
-       support.appendChecked = input.checked;
-
-       // WebKit doesn't clone checked state correctly in fragments
-       support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-       // Support: IE<9
-       // Opera does not clone events (and typeof div.attachEvent === undefined).
-       // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
-       if ( div.attachEvent ) {
-               div.attachEvent( "onclick", function() {
-                       support.noCloneEvent = false;
-               });
-
-               div.cloneNode( true ).click();
-       }
-
-       // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
-       // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
-       for ( i in { submit: true, change: true, focusin: true }) {
-               div.setAttribute( eventName = "on" + i, "t" );
-
-               support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
-       }
-
-       div.style.backgroundClip = "content-box";
-       div.cloneNode( true ).style.backgroundClip = "";
-       support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
-       // Support: IE<9
-       // Iteration over object's inherited properties before its own.
-       for ( i in jQuery( support ) ) {
-               break;
-       }
-       support.ownLast = i !== "0";
-
-       // Run tests that need a body at doc ready
-       jQuery(function() {
-               var container, marginDiv, tds,
-                       divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
-                       body = document.getElementsByTagName("body")[0];
-
-               if ( !body ) {
-                       // Return for frameset docs that don't have a body
-                       return;
-               }
-
-               container = document.createElement("div");
-               container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
-
-               body.appendChild( container ).appendChild( div );
-
-               // Support: IE8
-               // Check if table cells still have offsetWidth/Height when they are set
-               // to display:none and there are still other visible table cells in a
-               // table row; if so, offsetWidth/Height are not reliable for use when
-               // determining if an element has been hidden directly using
-               // display:none (it is still safe to use offsets if a parent element is
-               // hidden; don safety goggles and see bug #4512 for more information).
-               div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
-               tds = div.getElementsByTagName("td");
-               tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
-               isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
-               tds[ 0 ].style.display = "";
-               tds[ 1 ].style.display = "none";
-
-               // Support: IE8
-               // Check if empty table cells still have offsetWidth/Height
-               support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
-
-               // Check box-sizing and margin behavior.
-               div.innerHTML = "";
-               div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
-
-               // Workaround failing boxSizing test due to offsetWidth returning wrong value
-               // with some non-1 values of body zoom, ticket #13543
-               jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {
-                       support.boxSizing = div.offsetWidth === 4;
-               });
-
-               // Use window.getComputedStyle because jsdom on node.js will break without it.
-               if ( window.getComputedStyle ) {
-                       support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
-                       support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
-
-                       // Check if div with explicit width and no margin-right incorrectly
-                       // gets computed margin-right based on width of container. (#3333)
-                       // Fails in WebKit before Feb 2011 nightlies
-                       // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-                       marginDiv = div.appendChild( document.createElement("div") );
-                       marginDiv.style.cssText = div.style.cssText = divReset;
-                       marginDiv.style.marginRight = marginDiv.style.width = "0";
-                       div.style.width = "1px";
-
-                       support.reliableMarginRight =
-                               !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
-               }
-
-               if ( typeof div.style.zoom !== core_strundefined ) {
-                       // Support: IE<8
-                       // Check if natively block-level elements act like inline-block
-                       // elements when setting their display to 'inline' and giving
-                       // them layout
-                       div.innerHTML = "";
-                       div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
-                       support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
-
-                       // Support: IE6
-                       // Check if elements with layout shrink-wrap their children
-                       div.style.display = "block";
-                       div.innerHTML = "<div></div>";
-                       div.firstChild.style.width = "5px";
-                       support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
-
-                       if ( support.inlineBlockNeedsLayout ) {
-                               // Prevent IE 6 from affecting layout for positioned elements #11048
-                               // Prevent IE from shrinking the body in IE 7 mode #12869
-                               // Support: IE<8
-                               body.style.zoom = 1;
-                       }
-               }
-
-               body.removeChild( container );
-
-               // Null elements to avoid leaks in IE
-               container = div = tds = marginDiv = null;
-       });
-
-       // Null elements to avoid leaks in IE
-       all = select = fragment = opt = a = input = null;
-
-       return support;
-})({});
-
-var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
-       rmultiDash = /([A-Z])/g;
-
-function internalData( elem, name, data, pvt /* Internal Use Only */ ){
-       if ( !jQuery.acceptData( elem ) ) {
-               return;
-       }
-
-       var ret, thisCache,
-               internalKey = jQuery.expando,
-
-               // We have to handle DOM nodes and JS objects differently because IE6-7
-               // can't GC object references properly across the DOM-JS boundary
-               isNode = elem.nodeType,
-
-               // Only DOM nodes need the global jQuery cache; JS object data is
-               // attached directly to the object so GC can occur automatically
-               cache = isNode ? jQuery.cache : elem,
-
-               // Only defining an ID for JS objects if its cache already exists allows
-               // the code to shortcut on the same path as a DOM node with no cache
-               id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
-
-       // Avoid doing any more work than we need to when trying to get data on an
-       // object that has no data at all
-       if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
-               return;
-       }
-
-       if ( !id ) {
-               // Only DOM nodes need a new unique ID for each element since their data
-               // ends up in the global cache
-               if ( isNode ) {
-                       id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++;
-               } else {
-                       id = internalKey;
-               }
-       }
-
-       if ( !cache[ id ] ) {
-               // Avoid exposing jQuery metadata on plain JS objects when the object
-               // is serialized using JSON.stringify
-               cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
-       }
-
-       // An object can be passed to jQuery.data instead of a key/value pair; this gets
-       // shallow copied over onto the existing cache
-       if ( typeof name === "object" || typeof name === "function" ) {
-               if ( pvt ) {
-                       cache[ id ] = jQuery.extend( cache[ id ], name );
-               } else {
-                       cache[ id ].data = jQuery.extend( cache[ id ].data, name );
-               }
-       }
-
-       thisCache = cache[ id ];
-
-       // jQuery data() is stored in a separate object inside the object's internal data
-       // cache in order to avoid key collisions between internal data and user-defined
-       // data.
-       if ( !pvt ) {
-               if ( !thisCache.data ) {
-                       thisCache.data = {};
-               }
-
-               thisCache = thisCache.data;
-       }
-
-       if ( data !== undefined ) {
-               thisCache[ jQuery.camelCase( name ) ] = data;
-       }
-
-       // Check for both converted-to-camel and non-converted data property names
-       // If a data property was specified
-       if ( typeof name === "string" ) {
-
-               // First Try to find as-is property data
-               ret = thisCache[ name ];
-
-               // Test for null|undefined property data
-               if ( ret == null ) {
-
-                       // Try to find the camelCased property
-                       ret = thisCache[ jQuery.camelCase( name ) ];
-               }
-       } else {
-               ret = thisCache;
-       }
-
-       return ret;
-}
-
-function internalRemoveData( elem, name, pvt ) {
-       if ( !jQuery.acceptData( elem ) ) {
-               return;
-       }
-
-       var thisCache, i,
-               isNode = elem.nodeType,
-
-               // See jQuery.data for more information
-               cache = isNode ? jQuery.cache : elem,
-               id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
-       // If there is already no cache entry for this object, there is no
-       // purpose in continuing
-       if ( !cache[ id ] ) {
-               return;
-       }
-
-       if ( name ) {
-
-               thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
-               if ( thisCache ) {
-
-                       // Support array or space separated string names for data keys
-                       if ( !jQuery.isArray( name ) ) {
-
-                               // try the string as a key before any manipulation
-                               if ( name in thisCache ) {
-                                       name = [ name ];
-                               } else {
-
-                                       // split the camel cased version by spaces unless a key with the spaces exists
-                                       name = jQuery.camelCase( name );
-                                       if ( name in thisCache ) {
-                                               name = [ name ];
-                                       } else {
-                                               name = name.split(" ");
-                                       }
-                               }
-                       } else {
-                               // If "name" is an array of keys...
-                               // When data is initially created, via ("key", "val") signature,
-                               // keys will be converted to camelCase.
-                               // Since there is no way to tell _how_ a key was added, remove
-                               // both plain key and camelCase key. #12786
-                               // This will only penalize the array argument path.
-                               name = name.concat( jQuery.map( name, jQuery.camelCase ) );
-                       }
-
-                       i = name.length;
-                       while ( i-- ) {
-                               delete thisCache[ name[i] ];
-                       }
-
-                       // If there is no data left in the cache, we want to continue
-                       // and let the cache object itself get destroyed
-                       if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
-                               return;
-                       }
-               }
-       }
-
-       // See jQuery.data for more information
-       if ( !pvt ) {
-               delete cache[ id ].data;
-
-               // Don't destroy the parent cache unless the internal data object
-               // had been the only thing left in it
-               if ( !isEmptyDataObject( cache[ id ] ) ) {
-                       return;
-               }
-       }
-
-       // Destroy the cache
-       if ( isNode ) {
-               jQuery.cleanData( [ elem ], true );
-
-       // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
-       /* jshint eqeqeq: false */
-       } else if ( jQuery.support.deleteExpando || cache != cache.window ) {
-               /* jshint eqeqeq: true */
-               delete cache[ id ];
-
-       // When all else fails, null
-       } else {
-               cache[ id ] = null;
-       }
-}
-
-jQuery.extend({
-       cache: {},
-
-       // The following elements throw uncatchable exceptions if you
-       // attempt to add expando properties to them.
-       noData: {
-               "applet": true,
-               "embed": true,
-               // Ban all objects except for Flash (which handle expandos)
-               "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
-       },
-
-       hasData: function( elem ) {
-               elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-               return !!elem && !isEmptyDataObject( elem );
-       },
-
-       data: function( elem, name, data ) {
-               return internalData( elem, name, data );
-       },
-
-       removeData: function( elem, name ) {
-               return internalRemoveData( elem, name );
-       },
-
-       // For internal use only.
-       _data: function( elem, name, data ) {
-               return internalData( elem, name, data, true );
-       },
-
-       _removeData: function( elem, name ) {
-               return internalRemoveData( elem, name, true );
-       },
-
-       // A method for determining if a DOM node can handle the data expando
-       acceptData: function( elem ) {
-               // Do not set data on non-element because it will not be cleared (#8335).
-               if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
-                       return false;
-               }
-
-               var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
-
-               // nodes accept data unless otherwise specified; rejection can be conditional
-               return !noData || noData !== true && elem.getAttribute("classid") === noData;
-       }
-});
-
-jQuery.fn.extend({
-       data: function( key, value ) {
-               var attrs, name,
-                       data = null,
-                       i = 0,
-                       elem = this[0];
-
-               // Special expections of .data basically thwart jQuery.access,
-               // so implement the relevant behavior ourselves
-
-               // Gets all values
-               if ( key === undefined ) {
-                       if ( this.length ) {
-                               data = jQuery.data( elem );
-
-                               if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
-                                       attrs = elem.attributes;
-                                       for ( ; i < attrs.length; i++ ) {
-                                               name = attrs[i].name;
-
-                                               if ( name.indexOf("data-") === 0 ) {
-                                                       name = jQuery.camelCase( name.slice(5) );
-
-                                                       dataAttr( elem, name, data[ name ] );
-                                               }
-                                       }
-                                       jQuery._data( elem, "parsedAttrs", true );
-                               }
-                       }
-
-                       return data;
-               }
-
-               // Sets multiple values
-               if ( typeof key === "object" ) {
-                       return this.each(function() {
-                               jQuery.data( this, key );
-                       });
-               }
-
-               return arguments.length > 1 ?
-
-                       // Sets one value
-                       this.each(function() {
-                               jQuery.data( this, key, value );
-                       }) :
-
-                       // Gets one value
-                       // Try to fetch any internally stored data first
-                       elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
-       },
-
-       removeData: function( key ) {
-               return this.each(function() {
-                       jQuery.removeData( this, key );
-               });
-       }
-});
-
-function dataAttr( elem, key, data ) {
-       // If nothing was found internally, try to fetch any
-       // data from the HTML5 data-* attribute
-       if ( data === undefined && elem.nodeType === 1 ) {
-
-               var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
-               data = elem.getAttribute( name );
-
-               if ( typeof data === "string" ) {
-                       try {
-                               data = data === "true" ? true :
-                                       data === "false" ? false :
-                                       data === "null" ? null :
-                                       // Only convert to a number if it doesn't change the string
-                                       +data + "" === data ? +data :
-                                       rbrace.test( data ) ? jQuery.parseJSON( data ) :
-                                               data;
-                       } catch( e ) {}
-
-                       // Make sure we set the data so it isn't changed later
-                       jQuery.data( elem, key, data );
-
-               } else {
-                       data = undefined;
-               }
-       }
-
-       return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
-       var name;
-       for ( name in obj ) {
-
-               // if the public data object is empty, the private is still empty
-               if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
-                       continue;
-               }
-               if ( name !== "toJSON" ) {
-                       return false;
-               }
-       }
-
-       return true;
-}
-jQuery.extend({
-       queue: function( elem, type, data ) {
-               var queue;
-
-               if ( elem ) {
-                       type = ( type || "fx" ) + "queue";
-                       queue = jQuery._data( elem, type );
-
-                       // Speed up dequeue by getting out quickly if this is just a lookup
-                       if ( data ) {
-                               if ( !queue || jQuery.isArray(data) ) {
-                                       queue = jQuery._data( elem, type, jQuery.makeArray(data) );
-                               } else {
-                                       queue.push( data );
-                               }
-                       }
-                       return queue || [];
-               }
-       },
-
-       dequeue: function( elem, type ) {
-               type = type || "fx";
-
-               var queue = jQuery.queue( elem, type ),
-                       startLength = queue.length,
-                       fn = queue.shift(),
-                       hooks = jQuery._queueHooks( elem, type ),
-                       next = function() {
-                               jQuery.dequeue( elem, type );
-                       };
-
-               // If the fx queue is dequeued, always remove the progress sentinel
-               if ( fn === "inprogress" ) {
-                       fn = queue.shift();
-                       startLength--;
-               }
-
-               if ( fn ) {
-
-                       // Add a progress sentinel to prevent the fx queue from being
-                       // automatically dequeued
-                       if ( type === "fx" ) {
-                               queue.unshift( "inprogress" );
-                       }
-
-                       // clear up the last queue stop function
-                       delete hooks.stop;
-                       fn.call( elem, next, hooks );
-               }
-
-               if ( !startLength && hooks ) {
-                       hooks.empty.fire();
-               }
-       },
-
-       // not intended for public consumption - generates a queueHooks object, or returns the current one
-       _queueHooks: function( elem, type ) {
-               var key = type + "queueHooks";
-               return jQuery._data( elem, key ) || jQuery._data( elem, key, {
-                       empty: jQuery.Callbacks("once memory").add(function() {
-                               jQuery._removeData( elem, type + "queue" );
-                               jQuery._removeData( elem, key );
-                       })
-               });
-       }
-});
-
-jQuery.fn.extend({
-       queue: function( type, data ) {
-               var setter = 2;
-
-               if ( typeof type !== "string" ) {
-                       data = type;
-                       type = "fx";
-                       setter--;
-               }
-
-               if ( arguments.length < setter ) {
-                       return jQuery.queue( this[0], type );
-               }
-
-               return data === undefined ?
-                       this :
-                       this.each(function() {
-                               var queue = jQuery.queue( this, type, data );
-
-                               // ensure a hooks for this queue
-                               jQuery._queueHooks( this, type );
-
-                               if ( type === "fx" && queue[0] !== "inprogress" ) {
-                                       jQuery.dequeue( this, type );
-                               }
-                       });
-       },
-       dequeue: function( type ) {
-               return this.each(function() {
-                       jQuery.dequeue( this, type );
-               });
-       },
-       // Based off of the plugin by Clint Helfers, with permission.
-       // http://blindsignals.com/index.php/2009/07/jquery-delay/
-       delay: function( time, type ) {
-               time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
-               type = type || "fx";
-
-               return this.queue( type, function( next, hooks ) {
-                       var timeout = setTimeout( next, time );
-                       hooks.stop = function() {
-                               clearTimeout( timeout );
-                       };
-               });
-       },
-       clearQueue: function( type ) {
-               return this.queue( type || "fx", [] );
-       },
-       // Get a promise resolved when queues of a certain type
-       // are emptied (fx is the type by default)
-       promise: function( type, obj ) {
-               var tmp,
-                       count = 1,
-                       defer = jQuery.Deferred(),
-                       elements = this,
-                       i = this.length,
-                       resolve = function() {
-                               if ( !( --count ) ) {
-                                       defer.resolveWith( elements, [ elements ] );
-                               }
-                       };
-
-               if ( typeof type !== "string" ) {
-                       obj = type;
-                       type = undefined;
-               }
-               type = type || "fx";
-
-               while( i-- ) {
-                       tmp = jQuery._data( elements[ i ], type + "queueHooks" );
-                       if ( tmp && tmp.empty ) {
-                               count++;
-                               tmp.empty.add( resolve );
-                       }
-               }
-               resolve();
-               return defer.promise( obj );
-       }
-});
-var nodeHook, boolHook,
-       rclass = /[\t\r\n\f]/g,
-       rreturn = /\r/g,
-       rfocusable = /^(?:input|select|textarea|button|object)$/i,
-       rclickable = /^(?:a|area)$/i,
-       ruseDefault = /^(?:checked|selected)$/i,
-       getSetAttribute = jQuery.support.getSetAttribute,
-       getSetInput = jQuery.support.input;
-
-jQuery.fn.extend({
-       attr: function( name, value ) {
-               return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
-       },
-
-       removeAttr: function( name ) {
-               return this.each(function() {
-                       jQuery.removeAttr( this, name );
-               });
-       },
-
-       prop: function( name, value ) {
-               return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
-       },
-
-       removeProp: function( name ) {
-               name = jQuery.propFix[ name ] || name;
-               return this.each(function() {
-                       // try/catch handles cases where IE balks (such as removing a property on window)
-                       try {
-                               this[ name ] = undefined;
-                               delete this[ name ];
-                       } catch( e ) {}
-               });
-       },
-
-       addClass: function( value ) {
-               var classes, elem, cur, clazz, j,
-                       i = 0,
-                       len = this.length,
-                       proceed = typeof value === "string" && value;
-
-               if ( jQuery.isFunction( value ) ) {
-                       return this.each(function( j ) {
-                               jQuery( this ).addClass( value.call( this, j, this.className ) );
-                       });
-               }
-
-               if ( proceed ) {
-                       // The disjunction here is for better compressibility (see removeClass)
-                       classes = ( value || "" ).match( core_rnotwhite ) || [];
-
-                       for ( ; i < len; i++ ) {
-                               elem = this[ i ];
-                               cur = elem.nodeType === 1 && ( elem.className ?
-                                       ( " " + elem.className + " " ).replace( rclass, " " ) :
-                                       " "
-                               );
-
-                               if ( cur ) {
-                                       j = 0;
-                                       while ( (clazz = classes[j++]) ) {
-                                               if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
-                                                       cur += clazz + " ";
-                                               }
-                                       }
-                                       elem.className = jQuery.trim( cur );
-
-                               }
-                       }
-               }
-
-               return this;
-       },
-
-       removeClass: function( value ) {
-               var classes, elem, cur, clazz, j,
-                       i = 0,
-                       len = this.length,
-                       proceed = arguments.length === 0 || typeof value === "string" && value;
-
-               if ( jQuery.isFunction( value ) ) {
-                       return this.each(function( j ) {
-                               jQuery( this ).removeClass( value.call( this, j, this.className ) );
-                       });
-               }
-               if ( proceed ) {
-                       classes = ( value || "" ).match( core_rnotwhite ) || [];
-
-                       for ( ; i < len; i++ ) {
-                               elem = this[ i ];
-                               // This expression is here for better compressibility (see addClass)
-                               cur = elem.nodeType === 1 && ( elem.className ?
-                                       ( " " + elem.className + " " ).replace( rclass, " " ) :
-                                       ""
-                               );
-
-                               if ( cur ) {
-                                       j = 0;
-                                       while ( (clazz = classes[j++]) ) {
-                                               // Remove *all* instances
-                                               while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
-                                                       cur = cur.replace( " " + clazz + " ", " " );
-                                               }
-                                       }
-                                       elem.className = value ? jQuery.trim( cur ) : "";
-                               }
-                       }
-               }
-
-               return this;
-       },
-
-       toggleClass: function( value, stateVal ) {
-               var type = typeof value,
-                       isBool = typeof stateVal === "boolean";
-
-               if ( jQuery.isFunction( value ) ) {
-                       return this.each(function( i ) {
-                               jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
-                       });
-               }
-
-               return this.each(function() {
-                       if ( type === "string" ) {
-                               // toggle individual class names
-                               var className,
-                                       i = 0,
-                                       self = jQuery( this ),
-                                       state = stateVal,
-                                       classNames = value.match( core_rnotwhite ) || [];
-
-                               while ( (className = classNames[ i++ ]) ) {
-                                       // check each className given, space separated list
-                                       state = isBool ? state : !self.hasClass( className );
-                                       self[ state ? "addClass" : "removeClass" ]( className );
-                               }
-
-                       // Toggle whole class name
-                       } else if ( type === core_strundefined || type === "boolean" ) {
-                               if ( this.className ) {
-                                       // store className if set
-                                       jQuery._data( this, "__className__", this.className );
-                               }
-
-                               // If the element has a class name or if we're passed "false",
-                               // then remove the whole classname (if there was one, the above saved it).
-                               // Otherwise bring back whatever was previously saved (if anything),
-                               // falling back to the empty string if nothing was stored.
-                               this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
-                       }
-               });
-       },
-
-       hasClass: function( selector ) {
-               var className = " " + selector + " ",
-                       i = 0,
-                       l = this.length;
-               for ( ; i < l; i++ ) {
-                       if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
-                               return true;
-                       }
-               }
-
-               return false;
-       },
-
-       val: function( value ) {
-               var ret, hooks, isFunction,
-                       elem = this[0];
-
-               if ( !arguments.length ) {
-                       if ( elem ) {
-                               hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
-                               if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
-                                       return ret;
-                               }
-
-                               ret = elem.value;
-
-                               return typeof ret === "string" ?
-                                       // handle most common string cases
-                                       ret.replace(rreturn, "") :
-                                       // handle cases where value is null/undef or number
-                                       ret == null ? "" : ret;
-                       }
-
-                       return;
-               }
-
-               isFunction = jQuery.isFunction( value );
-
-               return this.each(function( i ) {
-                       var val;
-
-                       if ( this.nodeType !== 1 ) {
-                               return;
-                       }
-
-                       if ( isFunction ) {
-                               val = value.call( this, i, jQuery( this ).val() );
-                       } else {
-                               val = value;
-                       }
-
-                       // Treat null/undefined as ""; convert numbers to string
-                       if ( val == null ) {
-                               val = "";
-                       } else if ( typeof val === "number" ) {
-                               val += "";
-                       } else if ( jQuery.isArray( val ) ) {
-                               val = jQuery.map(val, function ( value ) {
-                                       return value == null ? "" : value + "";
-                               });
-                       }
-
-                       hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
-                       // If set returns undefined, fall back to normal setting
-                       if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
-                               this.value = val;
-                       }
-               });
-       }
-});
-
-jQuery.extend({
-       valHooks: {
-               option: {
-                       get: function( elem ) {
-                               // Use proper attribute retrieval(#6932, #12072)
-                               var val = jQuery.find.attr( elem, "value" );
-                               return val != null ?
-                                       val :
-                                       elem.text;
-                       }
-               },
-               select: {
-                       get: function( elem ) {
-                               var value, option,
-                                       options = elem.options,
-                                       index = elem.selectedIndex,
-                                       one = elem.type === "select-one" || index < 0,
-                                       values = one ? null : [],
-                                       max = one ? index + 1 : options.length,
-                                       i = index < 0 ?
-                                               max :
-                                               one ? index : 0;
-
-                               // Loop through all the selected options
-                               for ( ; i < max; i++ ) {
-                                       option = options[ i ];
-
-                                       // oldIE doesn't update selected after form reset (#2551)
-                                       if ( ( option.selected || i === index ) &&
-                                                       // Don't return options that are disabled or in a disabled optgroup
-                                                       ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
-                                                       ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
-
-                                               // Get the specific value for the option
-                                               value = jQuery( option ).val();
-
-                                               // We don't need an array for one selects
-                                               if ( one ) {
-                                                       return value;
-                                               }
-
-                                               // Multi-Selects return an array
-                                               values.push( value );
-                                       }
-                               }
-
-                               return values;
-                       },
-
-                       set: function( elem, value ) {
-                               var optionSet, option,
-                                       options = elem.options,
-                                       values = jQuery.makeArray( value ),
-                                       i = options.length;
-
-                               while ( i-- ) {
-                                       option = options[ i ];
-                                       if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {
-                                               optionSet = true;
-                                       }
-                               }
-
-                               // force browsers to behave consistently when non-matching value is set
-                               if ( !optionSet ) {
-                                       elem.selectedIndex = -1;
-                               }
-                               return values;
-                       }
-               }
-       },
-
-       attr: function( elem, name, value ) {
-               var hooks, ret,
-                       nType = elem.nodeType;
-
-               // don't get/set attributes on text, comment and attribute nodes
-               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-                       return;
-               }
-
-               // Fallback to prop when attributes are not supported
-               if ( typeof elem.getAttribute === core_strundefined ) {
-                       return jQuery.prop( elem, name, value );
-               }
-
-               // All attributes are lowercase
-               // Grab necessary hook if one is defined
-               if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
-                       name = name.toLowerCase();
-                       hooks = jQuery.attrHooks[ name ] ||
-                               ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
-               }
-
-               if ( value !== undefined ) {
-
-                       if ( value === null ) {
-                               jQuery.removeAttr( elem, name );
-
-                       } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
-                               return ret;
-
-                       } else {
-                               elem.setAttribute( name, value + "" );
-                               return value;
-                       }
-
-               } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
-                       return ret;
-
-               } else {
-                       ret = jQuery.find.attr( elem, name );
-
-                       // Non-existent attributes return null, we normalize to undefined
-                       return ret == null ?
-                               undefined :
-                               ret;
-               }
-       },
-
-       removeAttr: function( elem, value ) {
-               var name, propName,
-                       i = 0,
-                       attrNames = value && value.match( core_rnotwhite );
-
-               if ( attrNames && elem.nodeType === 1 ) {
-                       while ( (name = attrNames[i++]) ) {
-                               propName = jQuery.propFix[ name ] || name;
-
-                               // Boolean attributes get special treatment (#10870)
-                               if ( jQuery.expr.match.bool.test( name ) ) {
-                                       // Set corresponding property to false
-                                       if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
-                                               elem[ propName ] = false;
-                                       // Support: IE<9
-                                       // Also clear defaultChecked/defaultSelected (if appropriate)
-                                       } else {
-                                               elem[ jQuery.camelCase( "default-" + name ) ] =
-                                                       elem[ propName ] = false;
-                                       }
-
-                               // See #9699 for explanation of this approach (setting first, then removal)
-                               } else {
-                                       jQuery.attr( elem, name, "" );
-                               }
-
-                               elem.removeAttribute( getSetAttribute ? name : propName );
-                       }
-               }
-       },
-
-       attrHooks: {
-               type: {
-                       set: function( elem, value ) {
-                               if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
-                                       // Setting the type on a radio button after the value resets the value in IE6-9
-                                       // Reset value to default in case type is set after value during creation
-                                       var val = elem.value;
-                                       elem.setAttribute( "type", value );
-                                       if ( val ) {
-                                               elem.value = val;
-                                       }
-                                       return value;
-                               }
-                       }
-               }
-       },
-
-       propFix: {
-               "for": "htmlFor",
-               "class": "className"
-       },
-
-       prop: function( elem, name, value ) {
-               var ret, hooks, notxml,
-                       nType = elem.nodeType;
-
-               // don't get/set properties on text, comment and attribute nodes
-               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-                       return;
-               }
-
-               notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-               if ( notxml ) {
-                       // Fix name and attach hooks
-                       name = jQuery.propFix[ name ] || name;
-                       hooks = jQuery.propHooks[ name ];
-               }
-
-               if ( value !== undefined ) {
-                       return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
-                               ret :
-                               ( elem[ name ] = value );
-
-               } else {
-                       return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
-                               ret :
-                               elem[ name ];
-               }
-       },
-
-       propHooks: {
-               tabIndex: {
-                       get: function( elem ) {
-                               // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
-                               // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
-                               // Use proper attribute retrieval(#12072)
-                               var tabindex = jQuery.find.attr( elem, "tabindex" );
-
-                               return tabindex ?
-                                       parseInt( tabindex, 10 ) :
-                                       rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
-                                               0 :
-                                               -1;
-                       }
-               }
-       }
-});
-
-// Hooks for boolean attributes
-boolHook = {
-       set: function( elem, value, name ) {
-               if ( value === false ) {
-                       // Remove boolean attributes when set to false
-                       jQuery.removeAttr( elem, name );
-               } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
-                       // IE<8 needs the *property* name
-                       elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
-
-               // Use defaultChecked and defaultSelected for oldIE
-               } else {
-                       elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
-               }
-
-               return name;
-       }
-};
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
-       var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;
-
-       jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
-               function( elem, name, isXML ) {
-                       var fn = jQuery.expr.attrHandle[ name ],
-                               ret = isXML ?
-                                       undefined :
-                                       /* jshint eqeqeq: false */
-                                       (jQuery.expr.attrHandle[ name ] = undefined) !=
-                                               getter( elem, name, isXML ) ?
-
-                                               name.toLowerCase() :
-                                               null;
-                       jQuery.expr.attrHandle[ name ] = fn;
-                       return ret;
-               } :
-               function( elem, name, isXML ) {
-                       return isXML ?
-                               undefined :
-                               elem[ jQuery.camelCase( "default-" + name ) ] ?
-                                       name.toLowerCase() :
-                                       null;
-               };
-});
-
-// fix oldIE attroperties
-if ( !getSetInput || !getSetAttribute ) {
-       jQuery.attrHooks.value = {
-               set: function( elem, value, name ) {
-                       if ( jQuery.nodeName( elem, "input" ) ) {
-                               // Does not return so that setAttribute is also used
-                               elem.defaultValue = value;
-                       } else {
-                               // Use nodeHook if defined (#1954); otherwise setAttribute is fine
-                               return nodeHook && nodeHook.set( elem, value, name );
-                       }
-               }
-       };
-}
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
-       // Use this for any attribute in IE6/7
-       // This fixes almost every IE6/7 issue
-       nodeHook = {
-               set: function( elem, value, name ) {
-                       // Set the existing or create a new attribute node
-                       var ret = elem.getAttributeNode( name );
-                       if ( !ret ) {
-                               elem.setAttributeNode(
-                                       (ret = elem.ownerDocument.createAttribute( name ))
-                               );
-                       }
-
-                       ret.value = value += "";
-
-                       // Break association with cloned elements by also using setAttribute (#9646)
-                       return name === "value" || value === elem.getAttribute( name ) ?
-                               value :
-                               undefined;
-               }
-       };
-       jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =
-               // Some attributes are constructed with empty-string values when not defined
-               function( elem, name, isXML ) {
-                       var ret;
-                       return isXML ?
-                               undefined :
-                               (ret = elem.getAttributeNode( name )) && ret.value !== "" ?
-                                       ret.value :
-                                       null;
-               };
-       jQuery.valHooks.button = {
-               get: function( elem, name ) {
-                       var ret = elem.getAttributeNode( name );
-                       return ret && ret.specified ?
-                               ret.value :
-                               undefined;
-               },
-               set: nodeHook.set
-       };
-
-       // Set contenteditable to false on removals(#10429)
-       // Setting to empty string throws an error as an invalid value
-       jQuery.attrHooks.contenteditable = {
-               set: function( elem, value, name ) {
-                       nodeHook.set( elem, value === "" ? false : value, name );
-               }
-       };
-
-       // Set width and height to auto instead of 0 on empty string( Bug #8150 )
-       // This is for removals
-       jQuery.each([ "width", "height" ], function( i, name ) {
-               jQuery.attrHooks[ name ] = {
-                       set: function( elem, value ) {
-                               if ( value === "" ) {
-                                       elem.setAttribute( name, "auto" );
-                                       return value;
-                               }
-                       }
-               };
-       });
-}
-
-
-// Some attributes require a special call on IE
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !jQuery.support.hrefNormalized ) {
-       // href/src property should get the full normalized URL (#10299/#12915)
-       jQuery.each([ "href", "src" ], function( i, name ) {
-               jQuery.propHooks[ name ] = {
-                       get: function( elem ) {
-                               return elem.getAttribute( name, 4 );
-                       }
-               };
-       });
-}
-
-if ( !jQuery.support.style ) {
-       jQuery.attrHooks.style = {
-               get: function( elem ) {
-                       // Return undefined in the case of empty string
-                       // Note: IE uppercases css property names, but if we were to .toLowerCase()
-                       // .cssText, that would destroy case senstitivity in URL's, like in "background"
-                       return elem.style.cssText || undefined;
-               },
-               set: function( elem, value ) {
-                       return ( elem.style.cssText = value + "" );
-               }
-       };
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
-       jQuery.propHooks.selected = {
-               get: function( elem ) {
-                       var parent = elem.parentNode;
-
-                       if ( parent ) {
-                               parent.selectedIndex;
-
-                               // Make sure that it also works with optgroups, see #5701
-                               if ( parent.parentNode ) {
-                                       parent.parentNode.selectedIndex;
-                               }
-                       }
-                       return null;
-               }
-       };
-}
-
-jQuery.each([
-       "tabIndex",
-       "readOnly",
-       "maxLength",
-       "cellSpacing",
-       "cellPadding",
-       "rowSpan",
-       "colSpan",
-       "useMap",
-       "frameBorder",
-       "contentEditable"
-], function() {
-       jQuery.propFix[ this.toLowerCase() ] = this;
-});
-
-// IE6/7 call enctype encoding
-if ( !jQuery.support.enctype ) {
-       jQuery.propFix.enctype = "encoding";
-}
-
-// Radios and checkboxes getter/setter
-jQuery.each([ "radio", "checkbox" ], function() {
-       jQuery.valHooks[ this ] = {
-               set: function( elem, value ) {
-                       if ( jQuery.isArray( value ) ) {
-                               return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
-                       }
-               }
-       };
-       if ( !jQuery.support.checkOn ) {
-               jQuery.valHooks[ this ].get = function( elem ) {
-                       // Support: Webkit
-                       // "" is returned instead of "on" if a value isn't specified
-                       return elem.getAttribute("value") === null ? "on" : elem.value;
-               };
-       }
-});
-var rformElems = /^(?:input|select|textarea)$/i,
-       rkeyEvent = /^key/,
-       rmouseEvent = /^(?:mouse|contextmenu)|click/,
-       rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
-       rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
-
-function returnTrue() {
-       return true;
-}
-
-function returnFalse() {
-       return false;
-}
-
-function safeActiveElement() {
-       try {
-               return document.activeElement;
-       } catch ( err ) { }
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
-       global: {},
-
-       add: function( elem, types, handler, data, selector ) {
-               var tmp, events, t, handleObjIn,
-                       special, eventHandle, handleObj,
-                       handlers, type, namespaces, origType,
-                       elemData = jQuery._data( elem );
-
-               // Don't attach events to noData or text/comment nodes (but allow plain objects)
-               if ( !elemData ) {
-                       return;
-               }
-
-               // Caller can pass in an object of custom data in lieu of the handler
-               if ( handler.handler ) {
-                       handleObjIn = handler;
-                       handler = handleObjIn.handler;
-                       selector = handleObjIn.selector;
-               }
-
-               // Make sure that the handler has a unique ID, used to find/remove it later
-               if ( !handler.guid ) {
-                       handler.guid = jQuery.guid++;
-               }
-
-               // Init the element's event structure and main handler, if this is the first
-               if ( !(events = elemData.events) ) {
-                       events = elemData.events = {};
-               }
-               if ( !(eventHandle = elemData.handle) ) {
-                       eventHandle = elemData.handle = function( e ) {
-                               // Discard the second event of a jQuery.event.trigger() and
-                               // when an event is called after a page has unloaded
-                               return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
-                                       jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
-                                       undefined;
-                       };
-                       // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
-                       eventHandle.elem = elem;
-               }
-
-               // Handle multiple events separated by a space
-               types = ( types || "" ).match( core_rnotwhite ) || [""];
-               t = types.length;
-               while ( t-- ) {
-                       tmp = rtypenamespace.exec( types[t] ) || [];
-                       type = origType = tmp[1];
-                       namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
-                       // There *must* be a type, no attaching namespace-only handlers
-                       if ( !type ) {
-                               continue;
-                       }
-
-                       // If event changes its type, use the special event handlers for the changed type
-                       special = jQuery.event.special[ type ] || {};
-
-                       // If selector defined, determine special event api type, otherwise given type
-                       type = ( selector ? special.delegateType : special.bindType ) || type;
-
-                       // Update special based on newly reset type
-                       special = jQuery.event.special[ type ] || {};
-
-                       // handleObj is passed to all event handlers
-                       handleObj = jQuery.extend({
-                               type: type,
-                               origType: origType,
-                               data: data,
-                               handler: handler,
-                               guid: handler.guid,
-                               selector: selector,
-                               needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
-                               namespace: namespaces.join(".")
-                       }, handleObjIn );
-
-                       // Init the event handler queue if we're the first
-                       if ( !(handlers = events[ type ]) ) {
-                               handlers = events[ type ] = [];
-                               handlers.delegateCount = 0;
-
-                               // Only use addEventListener/attachEvent if the special events handler returns false
-                               if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-                                       // Bind the global event handler to the element
-                                       if ( elem.addEventListener ) {
-                                               elem.addEventListener( type, eventHandle, false );
-
-                                       } else if ( elem.attachEvent ) {
-                                               elem.attachEvent( "on" + type, eventHandle );
-                                       }
-                               }
-                       }
-
-                       if ( special.add ) {
-                               special.add.call( elem, handleObj );
-
-                               if ( !handleObj.handler.guid ) {
-                                       handleObj.handler.guid = handler.guid;
-                               }
-                       }
-
-                       // Add to the element's handler list, delegates in front
-                       if ( selector ) {
-                               handlers.splice( handlers.delegateCount++, 0, handleObj );
-                       } else {
-                               handlers.push( handleObj );
-                       }
-
-                       // Keep track of which events have ever been used, for event optimization
-                       jQuery.event.global[ type ] = true;
-               }
-
-               // Nullify elem to prevent memory leaks in IE
-               elem = null;
-       },
-
-       // Detach an event or set of events from an element
-       remove: function( elem, types, handler, selector, mappedTypes ) {
-               var j, handleObj, tmp,
-                       origCount, t, events,
-                       special, handlers, type,
-                       namespaces, origType,
-                       elemData = jQuery.hasData( elem ) && jQuery._data( elem );
-
-               if ( !elemData || !(events = elemData.events) ) {
-                       return;
-               }
-
-               // Once for each type.namespace in types; type may be omitted
-               types = ( types || "" ).match( core_rnotwhite ) || [""];
-               t = types.length;
-               while ( t-- ) {
-                       tmp = rtypenamespace.exec( types[t] ) || [];
-                       type = origType = tmp[1];
-                       namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
-                       // Unbind all events (on this namespace, if provided) for the element
-                       if ( !type ) {
-                               for ( type in events ) {
-                                       jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
-                               }
-                               continue;
-                       }
-
-                       special = jQuery.event.special[ type ] || {};
-                       type = ( selector ? special.delegateType : special.bindType ) || type;
-                       handlers = events[ type ] || [];
-                       tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
-
-                       // Remove matching events
-                       origCount = j = handlers.length;
-                       while ( j-- ) {
-                               handleObj = handlers[ j ];
-
-                               if ( ( mappedTypes || origType === handleObj.origType ) &&
-                                       ( !handler || handler.guid === handleObj.guid ) &&
-                                       ( !tmp || tmp.test( handleObj.namespace ) ) &&
-                                       ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
-                                       handlers.splice( j, 1 );
-
-                                       if ( handleObj.selector ) {
-                                               handlers.delegateCount--;
-                                       }
-                                       if ( special.remove ) {
-                                               special.remove.call( elem, handleObj );
-                                       }
-                               }
-                       }
-
-                       // Remove generic event handler if we removed something and no more handlers exist
-                       // (avoids potential for endless recursion during removal of special event handlers)
-                       if ( origCount && !handlers.length ) {
-                               if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
-                                       jQuery.removeEvent( elem, type, elemData.handle );
-                               }
-
-                               delete events[ type ];
-                       }
-               }
-
-               // Remove the expando if it's no longer used
-               if ( jQuery.isEmptyObject( events ) ) {
-                       delete elemData.handle;
-
-                       // removeData also checks for emptiness and clears the expando if empty
-                       // so use it instead of delete
-                       jQuery._removeData( elem, "events" );
-               }
-       },
-
-       trigger: function( event, data, elem, onlyHandlers ) {
-               var handle, ontype, cur,
-                       bubbleType, special, tmp, i,
-                       eventPath = [ elem || document ],
-                       type = core_hasOwn.call( event, "type" ) ? event.type : event,
-                       namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
-
-               cur = tmp = elem = elem || document;
-
-               // Don't do events on text and comment nodes
-               if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
-                       return;
-               }
-
-               // focus/blur morphs to focusin/out; ensure we're not firing them right now
-               if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
-                       return;
-               }
-
-               if ( type.indexOf(".") >= 0 ) {
-                       // Namespaced trigger; create a regexp to match event type in handle()
-                       namespaces = type.split(".");
-                       type = namespaces.shift();
-                       namespaces.sort();
-               }
-               ontype = type.indexOf(":") < 0 && "on" + type;
-
-               // Caller can pass in a jQuery.Event object, Object, or just an event type string
-               event = event[ jQuery.expando ] ?
-                       event :
-                       new jQuery.Event( type, typeof event === "object" && event );
-
-               // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
-               event.isTrigger = onlyHandlers ? 2 : 3;
-               event.namespace = namespaces.join(".");
-               event.namespace_re = event.namespace ?
-                       new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
-                       null;
-
-               // Clean up the event in case it is being reused
-               event.result = undefined;
-               if ( !event.target ) {
-                       event.target = elem;
-               }
-
-               // Clone any incoming data and prepend the event, creating the handler arg list
-               data = data == null ?
-                       [ event ] :
-                       jQuery.makeArray( data, [ event ] );
-
-               // Allow special events to draw outside the lines
-               special = jQuery.event.special[ type ] || {};
-               if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
-                       return;
-               }
-
-               // Determine event propagation path in advance, per W3C events spec (#9951)
-               // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
-               if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
-                       bubbleType = special.delegateType || type;
-                       if ( !rfocusMorph.test( bubbleType + type ) ) {
-                               cur = cur.parentNode;
-                       }
-                       for ( ; cur; cur = cur.parentNode ) {
-                               eventPath.push( cur );
-                               tmp = cur;
-                       }
-
-                       // Only add window if we got to document (e.g., not plain obj or detached DOM)
-                       if ( tmp === (elem.ownerDocument || document) ) {
-                               eventPath.push( tmp.defaultView || tmp.parentWindow || window );
-                       }
-               }
-
-               // Fire handlers on the event path
-               i = 0;
-               while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
-
-                       event.type = i > 1 ?
-                               bubbleType :
-                               special.bindType || type;
-
-                       // jQuery handler
-                       handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
-                       if ( handle ) {
-                               handle.apply( cur, data );
-                       }
-
-                       // Native handler
-                       handle = ontype && cur[ ontype ];
-                       if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
-                               event.preventDefault();
-                       }
-               }
-               event.type = type;
-
-               // If nobody prevented the default action, do it now
-               if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
-                       if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
-                               jQuery.acceptData( elem ) ) {
-
-                               // Call a native DOM method on the target with the same name name as the event.
-                               // Can't use an .isFunction() check here because IE6/7 fails that test.
-                               // Don't do default actions on window, that's where global variables be (#6170)
-                               if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
-
-                                       // Don't re-trigger an onFOO event when we call its FOO() method
-                                       tmp = elem[ ontype ];
-
-                                       if ( tmp ) {
-                                               elem[ ontype ] = null;
-                                       }
-
-                                       // Prevent re-triggering of the same event, since we already bubbled it above
-                                       jQuery.event.triggered = type;
-                                       try {
-                                               elem[ type ]();
-                                       } catch ( e ) {
-                                               // IE<9 dies on focus/blur to hidden element (#1486,#12518)
-                                               // only reproducible on winXP IE8 native, not IE9 in IE8 mode
-                                       }
-                                       jQuery.event.triggered = undefined;
-
-                                       if ( tmp ) {
-                                               elem[ ontype ] = tmp;
-                                       }
-                               }
-                       }
-               }
-
-               return event.result;
-       },
-
-       dispatch: function( event ) {
-
-               // Make a writable jQuery.Event from the native event object
-               event = jQuery.event.fix( event );
-
-               var i, ret, handleObj, matched, j,
-                       handlerQueue = [],
-                       args = core_slice.call( arguments ),
-                       handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
-                       special = jQuery.event.special[ event.type ] || {};
-
-               // Use the fix-ed jQuery.Event rather than the (read-only) native event
-               args[0] = event;
-               event.delegateTarget = this;
-
-               // Call the preDispatch hook for the mapped type, and let it bail if desired
-               if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
-                       return;
-               }
-
-               // Determine handlers
-               handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
-               // Run delegates first; they may want to stop propagation beneath us
-               i = 0;
-               while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
-                       event.currentTarget = matched.elem;
-
-                       j = 0;
-                       while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
-
-                               // Triggered event must either 1) have no namespace, or
-                               // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
-                               if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
-
-                                       event.handleObj = handleObj;
-                                       event.data = handleObj.data;
-
-                                       ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
-                                                       .apply( matched.elem, args );
-
-                                       if ( ret !== undefined ) {
-                                               if ( (event.result = ret) === false ) {
-                                                       event.preventDefault();
-                                                       event.stopPropagation();
-                                               }
-                                       }
-                               }
-                       }
-               }
-
-               // Call the postDispatch hook for the mapped type
-               if ( special.postDispatch ) {
-                       special.postDispatch.call( this, event );
-               }
-
-               return event.result;
-       },
-
-       handlers: function( event, handlers ) {
-               var sel, handleObj, matches, i,
-                       handlerQueue = [],
-                       delegateCount = handlers.delegateCount,
-                       cur = event.target;
-
-               // Find delegate handlers
-               // Black-hole SVG <use> instance trees (#13180)
-               // Avoid non-left-click bubbling in Firefox (#3861)
-               if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
-
-                       /* jshint eqeqeq: false */
-                       for ( ; cur != this; cur = cur.parentNode || this ) {
-                               /* jshint eqeqeq: true */
-
-                               // Don't check non-elements (#13208)
-                               // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
-                               if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
-                                       matches = [];
-                                       for ( i = 0; i < delegateCount; i++ ) {
-                                               handleObj = handlers[ i ];
-
-                                               // Don't conflict with Object.prototype properties (#13203)
-                                               sel = handleObj.selector + " ";
-
-                                               if ( matches[ sel ] === undefined ) {
-                                                       matches[ sel ] = handleObj.needsContext ?
-                                                               jQuery( sel, this ).index( cur ) >= 0 :
-                                                               jQuery.find( sel, this, null, [ cur ] ).length;
-                                               }
-                                               if ( matches[ sel ] ) {
-                                                       matches.push( handleObj );
-                                               }
-                                       }
-                                       if ( matches.length ) {
-                                               handlerQueue.push({ elem: cur, handlers: matches });
-                                       }
-                               }
-                       }
-               }
-
-               // Add the remaining (directly-bound) handlers
-               if ( delegateCount < handlers.length ) {
-                       handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
-               }
-
-               return handlerQueue;
-       },
-
-       fix: function( event ) {
-               if ( event[ jQuery.expando ] ) {
-                       return event;
-               }
-
-               // Create a writable copy of the event object and normalize some properties
-               var i, prop, copy,
-                       type = event.type,
-                       originalEvent = event,
-                       fixHook = this.fixHooks[ type ];
-
-               if ( !fixHook ) {
-                       this.fixHooks[ type ] = fixHook =
-                               rmouseEvent.test( type ) ? this.mouseHooks :
-                               rkeyEvent.test( type ) ? this.keyHooks :
-                               {};
-               }
-               copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
-               event = new jQuery.Event( originalEvent );
-
-               i = copy.length;
-               while ( i-- ) {
-                       prop = copy[ i ];
-                       event[ prop ] = originalEvent[ prop ];
-               }
-
-               // Support: IE<9
-               // Fix target property (#1925)
-               if ( !event.target ) {
-                       event.target = originalEvent.srcElement || document;
-               }
-
-               // Support: Chrome 23+, Safari?
-               // Target should not be a text node (#504, #13143)
-               if ( event.target.nodeType === 3 ) {
-                       event.target = event.target.parentNode;
-               }
-
-               // Support: IE<9
-               // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
-               event.metaKey = !!event.metaKey;
-
-               return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
-       },
-
-       // Includes some event props shared by KeyEvent and MouseEvent
-       props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
-       fixHooks: {},
-
-       keyHooks: {
-               props: "char charCode key keyCode".split(" "),
-               filter: function( event, original ) {
-
-                       // Add which for key events
-                       if ( event.which == null ) {
-                               event.which = original.charCode != null ? original.charCode : original.keyCode;
-                       }
-
-                       return event;
-               }
-       },
-
-       mouseHooks: {
-               props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
-               filter: function( event, original ) {
-                       var body, eventDoc, doc,
-                               button = original.button,
-                               fromElement = original.fromElement;
-
-                       // Calculate pageX/Y if missing and clientX/Y available
-                       if ( event.pageX == null && original.clientX != null ) {
-                               eventDoc = event.target.ownerDocument || document;
-                               doc = eventDoc.documentElement;
-                               body = eventDoc.body;
-
-                               event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
-                               event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
-                       }
-
-                       // Add relatedTarget, if necessary
-                       if ( !event.relatedTarget && fromElement ) {
-                               event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
-                       }
-
-                       // Add which for click: 1 === left; 2 === middle; 3 === right
-                       // Note: button is not normalized, so don't use it
-                       if ( !event.which && button !== undefined ) {
-                               event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
-                       }
-
-                       return event;
-               }
-       },
-
-       special: {
-               load: {
-                       // Prevent triggered image.load events from bubbling to window.load
-                       noBubble: true
-               },
-               focus: {
-                       // Fire native event if possible so blur/focus sequence is correct
-                       trigger: function() {
-                               if ( this !== safeActiveElement() && this.focus ) {
-                                       try {
-                                               this.focus();
-                                               return false;
-                                       } catch ( e ) {
-                                               // Support: IE<9
-                                               // If we error on focus to hidden element (#1486, #12518),
-                                               // let .trigger() run the handlers
-                                       }
-                               }
-                       },
-                       delegateType: "focusin"
-               },
-               blur: {
-                       trigger: function() {
-                               if ( this === safeActiveElement() && this.blur ) {
-                                       this.blur();
-                                       return false;
-                               }
-                       },
-                       delegateType: "focusout"
-               },
-               click: {
-                       // For checkbox, fire native event so checked state will be right
-                       trigger: function() {
-                               if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
-                                       this.click();
-                                       return false;
-                               }
-                       },
-
-                       // For cross-browser consistency, don't fire native .click() on links
-                       _default: function( event ) {
-                               return jQuery.nodeName( event.target, "a" );
-                       }
-               },
-
-               beforeunload: {
-                       postDispatch: function( event ) {
-
-                               // Even when returnValue equals to undefined Firefox will still show alert
-                               if ( event.result !== undefined ) {
-                                       event.originalEvent.returnValue = event.result;
-                               }
-                       }
-               }
-       },
-
-       simulate: function( type, elem, event, bubble ) {
-               // Piggyback on a donor event to simulate a different one.
-               // Fake originalEvent to avoid donor's stopPropagation, but if the
-               // simulated event prevents default then we do the same on the donor.
-               var e = jQuery.extend(
-                       new jQuery.Event(),
-                       event,
-                       {
-                               type: type,
-                               isSimulated: true,
-                               originalEvent: {}
-                       }
-               );
-               if ( bubble ) {
-                       jQuery.event.trigger( e, null, elem );
-               } else {
-                       jQuery.event.dispatch.call( elem, e );
-               }
-               if ( e.isDefaultPrevented() ) {
-                       event.preventDefault();
-               }
-       }
-};
-
-jQuery.removeEvent = document.removeEventListener ?
-       function( elem, type, handle ) {
-               if ( elem.removeEventListener ) {
-                       elem.removeEventListener( type, handle, false );
-               }
-       } :
-       function( elem, type, handle ) {
-               var name = "on" + type;
-
-               if ( elem.detachEvent ) {
-
-                       // #8545, #7054, preventing memory leaks for custom events in IE6-8
-                       // detachEvent needed property on element, by name of that event, to properly expose it to GC
-                       if ( typeof elem[ name ] === core_strundefined ) {
-                               elem[ name ] = null;
-                       }
-
-                       elem.detachEvent( name, handle );
-               }
-       };
-
-jQuery.Event = function( src, props ) {
-       // Allow instantiation without the 'new' keyword
-       if ( !(this instanceof jQuery.Event) ) {
-               return new jQuery.Event( src, props );
-       }
-
-       // Event object
-       if ( src && src.type ) {
-               this.originalEvent = src;
-               this.type = src.type;
-
-               // Events bubbling up the document may have been marked as prevented
-               // by a handler lower down the tree; reflect the correct value.
-               this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
-                       src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
-
-       // Event type
-       } else {
-               this.type = src;
-       }
-
-       // Put explicitly provided properties onto the event object
-       if ( props ) {
-               jQuery.extend( this, props );
-       }
-
-       // Create a timestamp if incoming event doesn't have one
-       this.timeStamp = src && src.timeStamp || jQuery.now();
-
-       // Mark it as fixed
-       this[ jQuery.expando ] = true;
-};
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
-       isDefaultPrevented: returnFalse,
-       isPropagationStopped: returnFalse,
-       isImmediatePropagationStopped: returnFalse,
-
-       preventDefault: function() {
-               var e = this.originalEvent;
-
-               this.isDefaultPrevented = returnTrue;
-               if ( !e ) {
-                       return;
-               }
-
-               // If preventDefault exists, run it on the original event
-               if ( e.preventDefault ) {
-                       e.preventDefault();
-
-               // Support: IE
-               // Otherwise set the returnValue property of the original event to false
-               } else {
-                       e.returnValue = false;
-               }
-       },
-       stopPropagation: function() {
-               var e = this.originalEvent;
-
-               this.isPropagationStopped = returnTrue;
-               if ( !e ) {
-                       return;
-               }
-               // If stopPropagation exists, run it on the original event
-               if ( e.stopPropagation ) {
-                       e.stopPropagation();
-               }
-
-               // Support: IE
-               // Set the cancelBubble property of the original event to true
-               e.cancelBubble = true;
-       },
-       stopImmediatePropagation: function() {
-               this.isImmediatePropagationStopped = returnTrue;
-               this.stopPropagation();
-       }
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
-       mouseenter: "mouseover",
-       mouseleave: "mouseout"
-}, function( orig, fix ) {
-       jQuery.event.special[ orig ] = {
-               delegateType: fix,
-               bindType: fix,
-
-               handle: function( event ) {
-                       var ret,
-                               target = this,
-                               related = event.relatedTarget,
-                               handleObj = event.handleObj;
-
-                       // For mousenter/leave call the handler if related is outside the target.
-                       // NB: No relatedTarget if the mouse left/entered the browser window
-                       if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
-                               event.type = handleObj.origType;
-                               ret = handleObj.handler.apply( this, arguments );
-                               event.type = fix;
-                       }
-                       return ret;
-               }
-       };
-});
-
-// IE submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
-       jQuery.event.special.submit = {
-               setup: function() {
-                       // Only need this for delegated form submit events
-                       if ( jQuery.nodeName( this, "form" ) ) {
-                               return false;
-                       }
-
-                       // Lazy-add a submit handler when a descendant form may potentially be submitted
-                       jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
-                               // Node name check avoids a VML-related crash in IE (#9807)
-                               var elem = e.target,
-                                       form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
-                               if ( form && !jQuery._data( form, "submitBubbles" ) ) {
-                                       jQuery.event.add( form, "submit._submit", function( event ) {
-                                               event._submit_bubble = true;
-                                       });
-                                       jQuery._data( form, "submitBubbles", true );
-                               }
-                       });
-                       // return undefined since we don't need an event listener
-               },
-
-               postDispatch: function( event ) {
-                       // If form was submitted by the user, bubble the event up the tree
-                       if ( event._submit_bubble ) {
-                               delete event._submit_bubble;
-                               if ( this.parentNode && !event.isTrigger ) {
-                                       jQuery.event.simulate( "submit", this.parentNode, event, true );
-                               }
-                       }
-               },
-
-               teardown: function() {
-                       // Only need this for delegated form submit events
-                       if ( jQuery.nodeName( this, "form" ) ) {
-                               return false;
-                       }
-
-                       // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
-                       jQuery.event.remove( this, "._submit" );
-               }
-       };
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !jQuery.support.changeBubbles ) {
-
-       jQuery.event.special.change = {
-
-               setup: function() {
-
-                       if ( rformElems.test( this.nodeName ) ) {
-                               // IE doesn't fire change on a check/radio until blur; trigger it on click
-                               // after a propertychange. Eat the blur-change in special.change.handle.
-                               // This still fires onchange a second time for check/radio after blur.
-                               if ( this.type === "checkbox" || this.type === "radio" ) {
-                                       jQuery.event.add( this, "propertychange._change", function( event ) {
-                                               if ( event.originalEvent.propertyName === "checked" ) {
-                                                       this._just_changed = true;
-                                               }
-                                       });
-                                       jQuery.event.add( this, "click._change", function( event ) {
-                                               if ( this._just_changed && !event.isTrigger ) {
-                                                       this._just_changed = false;
-                                               }
-                                               // Allow triggered, simulated change events (#11500)
-                                               jQuery.event.simulate( "change", this, event, true );
-                                       });
-                               }
-                               return false;
-                       }
-                       // Delegated event; lazy-add a change handler on descendant inputs
-                       jQuery.event.add( this, "beforeactivate._change", function( e ) {
-                               var elem = e.target;
-
-                               if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
-                                       jQuery.event.add( elem, "change._change", function( event ) {
-                                               if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
-                                                       jQuery.event.simulate( "change", this.parentNode, event, true );
-                                               }
-                                       });
-                                       jQuery._data( elem, "changeBubbles", true );
-                               }
-                       });
-               },
-
-               handle: function( event ) {
-                       var elem = event.target;
-
-                       // Swallow native change events from checkbox/radio, we already triggered them above
-                       if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
-                               return event.handleObj.handler.apply( this, arguments );
-                       }
-               },
-
-               teardown: function() {
-                       jQuery.event.remove( this, "._change" );
-
-                       return !rformElems.test( this.nodeName );
-               }
-       };
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
-       jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
-               // Attach a single capturing handler while someone wants focusin/focusout
-               var attaches = 0,
-                       handler = function( event ) {
-                               jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
-                       };
-
-               jQuery.event.special[ fix ] = {
-                       setup: function() {
-                               if ( attaches++ === 0 ) {
-                                       document.addEventListener( orig, handler, true );
-                               }
-                       },
-                       teardown: function() {
-                               if ( --attaches === 0 ) {
-                                       document.removeEventListener( orig, handler, true );
-                               }
-                       }
-               };
-       });
-}
-
-jQuery.fn.extend({
-
-       on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
-               var type, origFn;
-
-               // Types can be a map of types/handlers
-               if ( typeof types === "object" ) {
-                       // ( types-Object, selector, data )
-                       if ( typeof selector !== "string" ) {
-                               // ( types-Object, data )
-                               data = data || selector;
-                               selector = undefined;
-                       }
-                       for ( type in types ) {
-                               this.on( type, selector, data, types[ type ], one );
-                       }
-                       return this;
-               }
-
-               if ( data == null && fn == null ) {
-                       // ( types, fn )
-                       fn = selector;
-                       data = selector = undefined;
-               } else if ( fn == null ) {
-                       if ( typeof selector === "string" ) {
-                               // ( types, selector, fn )
-                               fn = data;
-                               data = undefined;
-                       } else {
-                               // ( types, data, fn )
-                               fn = data;
-                               data = selector;
-                               selector = undefined;
-                       }
-               }
-               if ( fn === false ) {
-                       fn = returnFalse;
-               } else if ( !fn ) {
-                       return this;
-               }
-
-               if ( one === 1 ) {
-                       origFn = fn;
-                       fn = function( event ) {
-                               // Can use an empty set, since event contains the info
-                               jQuery().off( event );
-                               return origFn.apply( this, arguments );
-                       };
-                       // Use same guid so caller can remove using origFn
-                       fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
-               }
-               return this.each( function() {
-                       jQuery.event.add( this, types, fn, data, selector );
-               });
-       },
-       one: function( types, selector, data, fn ) {
-               return this.on( types, selector, data, fn, 1 );
-       },
-       off: function( types, selector, fn ) {
-               var handleObj, type;
-               if ( types && types.preventDefault && types.handleObj ) {
-                       // ( event )  dispatched jQuery.Event
-                       handleObj = types.handleObj;
-                       jQuery( types.delegateTarget ).off(
-                               handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
-                               handleObj.selector,
-                               handleObj.handler
-                       );
-                       return this;
-               }
-               if ( typeof types === "object" ) {
-                       // ( types-object [, selector] )
-                       for ( type in types ) {
-                               this.off( type, selector, types[ type ] );
-                       }
-                       return this;
-               }
-               if ( selector === false || typeof selector === "function" ) {
-                       // ( types [, fn] )
-                       fn = selector;
-                       selector = undefined;
-               }
-               if ( fn === false ) {
-                       fn = returnFalse;
-               }
-               return this.each(function() {
-                       jQuery.event.remove( this, types, fn, selector );
-               });
-       },
-
-       trigger: function( type, data ) {
-               return this.each(function() {
-                       jQuery.event.trigger( type, data, this );
-               });
-       },
-       triggerHandler: function( type, data ) {
-               var elem = this[0];
-               if ( elem ) {
-                       return jQuery.event.trigger( type, data, elem, true );
-               }
-       }
-});
-var isSimple = /^.[^:#\[\.,]*$/,
-       rparentsprev = /^(?:parents|prev(?:Until|All))/,
-       rneedsContext = jQuery.expr.match.needsContext,
-       // methods guaranteed to produce a unique set when starting from a unique set
-       guaranteedUnique = {
-               children: true,
-               contents: true,
-               next: true,
-               prev: true
-       };
-
-jQuery.fn.extend({
-       find: function( selector ) {
-               var i,
-                       ret = [],
-                       self = this,
-                       len = self.length;
-
-               if ( typeof selector !== "string" ) {
-                       return this.pushStack( jQuery( selector ).filter(function() {
-                               for ( i = 0; i < len; i++ ) {
-                                       if ( jQuery.contains( self[ i ], this ) ) {
-                                               return true;
-                                       }
-                               }
-                       }) );
-               }
-
-               for ( i = 0; i < len; i++ ) {
-                       jQuery.find( selector, self[ i ], ret );
-               }
-
-               // Needed because $( selector, context ) becomes $( context ).find( selector )
-               ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
-               ret.selector = this.selector ? this.selector + " " + selector : selector;
-               return ret;
-       },
-
-       has: function( target ) {
-               var i,
-                       targets = jQuery( target, this ),
-                       len = targets.length;
-
-               return this.filter(function() {
-                       for ( i = 0; i < len; i++ ) {
-                               if ( jQuery.contains( this, targets[i] ) ) {
-                                       return true;
-                               }
-                       }
-               });
-       },
-
-       not: function( selector ) {
-               return this.pushStack( winnow(this, selector || [], true) );
-       },
-
-       filter: function( selector ) {
-               return this.pushStack( winnow(this, selector || [], false) );
-       },
-
-       is: function( selector ) {
-               return !!winnow(
-                       this,
-
-                       // If this is a positional/relative selector, check membership in the returned set
-                       // so $("p:first").is("p:last") won't return true for a doc with two "p".
-                       typeof selector === "string" && rneedsContext.test( selector ) ?
-                               jQuery( selector ) :
-                               selector || [],
-                       false
-               ).length;
-       },
-
-       closest: function( selectors, context ) {
-               var cur,
-                       i = 0,
-                       l = this.length,
-                       ret = [],
-                       pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
-                               jQuery( selectors, context || this.context ) :
-                               0;
-
-               for ( ; i < l; i++ ) {
-                       for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
-                               // Always skip document fragments
-                               if ( cur.nodeType < 11 && (pos ?
-                                       pos.index(cur) > -1 :
-
-                                       // Don't pass non-elements to Sizzle
-                                       cur.nodeType === 1 &&
-                                               jQuery.find.matchesSelector(cur, selectors)) ) {
-
-                                       cur = ret.push( cur );
-                                       break;
-                               }
-                       }
-               }
-
-               return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
-       },
-
-       // Determine the position of an element within
-       // the matched set of elements
-       index: function( elem ) {
-
-               // No argument, return index in parent
-               if ( !elem ) {
-                       return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
-               }
-
-               // index in selector
-               if ( typeof elem === "string" ) {
-                       return jQuery.inArray( this[0], jQuery( elem ) );
-               }
-
-               // Locate the position of the desired element
-               return jQuery.inArray(
-                       // If it receives a jQuery object, the first element is used
-                       elem.jquery ? elem[0] : elem, this );
-       },
-
-       add: function( selector, context ) {
-               var set = typeof selector === "string" ?
-                               jQuery( selector, context ) :
-                               jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
-                       all = jQuery.merge( this.get(), set );
-
-               return this.pushStack( jQuery.unique(all) );
-       },
-
-       addBack: function( selector ) {
-               return this.add( selector == null ?
-                       this.prevObject : this.prevObject.filter(selector)
-               );
-       }
-});
-
-function sibling( cur, dir ) {
-       do {
-               cur = cur[ dir ];
-       } while ( cur && cur.nodeType !== 1 );
-
-       return cur;
-}
-
-jQuery.each({
-       parent: function( elem ) {
-               var parent = elem.parentNode;
-               return parent && parent.nodeType !== 11 ? parent : null;
-       },
-       parents: function( elem ) {
-               return jQuery.dir( elem, "parentNode" );
-       },
-       parentsUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "parentNode", until );
-       },
-       next: function( elem ) {
-               return sibling( elem, "nextSibling" );
-       },
-       prev: function( elem ) {
-               return sibling( elem, "previousSibling" );
-       },
-       nextAll: function( elem ) {
-               return jQuery.dir( elem, "nextSibling" );
-       },
-       prevAll: function( elem ) {
-               return jQuery.dir( elem, "previousSibling" );
-       },
-       nextUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "nextSibling", until );
-       },
-       prevUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "previousSibling", until );
-       },
-       siblings: function( elem ) {
-               return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
-       },
-       children: function( elem ) {
-               return jQuery.sibling( elem.firstChild );
-       },
-       contents: function( elem ) {
-               return jQuery.nodeName( elem, "iframe" ) ?
-                       elem.contentDocument || elem.contentWindow.document :
-                       jQuery.merge( [], elem.childNodes );
-       }
-}, function( name, fn ) {
-       jQuery.fn[ name ] = function( until, selector ) {
-               var ret = jQuery.map( this, fn, until );
-
-               if ( name.slice( -5 ) !== "Until" ) {
-                       selector = until;
-               }
-
-               if ( selector && typeof selector === "string" ) {
-                       ret = jQuery.filter( selector, ret );
-               }
-
-               if ( this.length > 1 ) {
-                       // Remove duplicates
-                       if ( !guaranteedUnique[ name ] ) {
-                               ret = jQuery.unique( ret );
-                       }
-
-                       // Reverse order for parents* and prev-derivatives
-                       if ( rparentsprev.test( name ) ) {
-                               ret = ret.reverse();
-                       }
-               }
-
-               return this.pushStack( ret );
-       };
-});
-
-jQuery.extend({
-       filter: function( expr, elems, not ) {
-               var elem = elems[ 0 ];
-
-               if ( not ) {
-                       expr = ":not(" + expr + ")";
-               }
-
-               return elems.length === 1 && elem.nodeType === 1 ?
-                       jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
-                       jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
-                               return elem.nodeType === 1;
-                       }));
-       },
-
-       dir: function( elem, dir, until ) {
-               var matched = [],
-                       cur = elem[ dir ];
-
-               while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
-                       if ( cur.nodeType === 1 ) {
-                               matched.push( cur );
-                       }
-                       cur = cur[dir];
-               }
-               return matched;
-       },
-
-       sibling: function( n, elem ) {
-               var r = [];
-
-               for ( ; n; n = n.nextSibling ) {
-                       if ( n.nodeType === 1 && n !== elem ) {
-                               r.push( n );
-                       }
-               }
-
-               return r;
-       }
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
-       if ( jQuery.isFunction( qualifier ) ) {
-               return jQuery.grep( elements, function( elem, i ) {
-                       /* jshint -W018 */
-                       return !!qualifier.call( elem, i, elem ) !== not;
-               });
-
-       }
-
-       if ( qualifier.nodeType ) {
-               return jQuery.grep( elements, function( elem ) {
-                       return ( elem === qualifier ) !== not;
-               });
-
-       }
-
-       if ( typeof qualifier === "string" ) {
-               if ( isSimple.test( qualifier ) ) {
-                       return jQuery.filter( qualifier, elements, not );
-               }
-
-               qualifier = jQuery.filter( qualifier, elements );
-       }
-
-       return jQuery.grep( elements, function( elem ) {
-               return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
-       });
-}
-function createSafeFragment( document ) {
-       var list = nodeNames.split( "|" ),
-               safeFrag = document.createDocumentFragment();
-
-       if ( safeFrag.createElement ) {
-               while ( list.length ) {
-                       safeFrag.createElement(
-                               list.pop()
-                       );
-               }
-       }
-       return safeFrag;
-}
-
-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
-               "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
-       rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
-       rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
-       rleadingWhitespace = /^\s+/,
-       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
-       rtagName = /<([\w:]+)/,
-       rtbody = /<tbody/i,
-       rhtml = /<|&#?\w+;/,
-       rnoInnerhtml = /<(?:script|style|link)/i,
-       manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
-       // checked="checked" or checked
-       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
-       rscriptType = /^$|\/(?:java|ecma)script/i,
-       rscriptTypeMasked = /^true\/(.*)/,
-       rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
-
-       // We have to close these tags to support XHTML (#13200)
-       wrapMap = {
-               option: [ 1, "<select multiple='multiple'>", "</select>" ],
-               legend: [ 1, "<fieldset>", "</fieldset>" ],
-               area: [ 1, "<map>", "</map>" ],
-               param: [ 1, "<object>", "</object>" ],
-               thead: [ 1, "<table>", "</table>" ],
-               tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-               col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
-               td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
-               // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
-               // unless wrapped in a div with non-breaking characters in front of it.
-               _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
-       },
-       safeFragment = createSafeFragment( document ),
-       fragmentDiv = safeFragment.appendChild( document.createElement("div") );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-jQuery.fn.extend({
-       text: function( value ) {
-               return jQuery.access( this, function( value ) {
-                       return value === undefined ?
-                               jQuery.text( this ) :
-                               this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
-               }, null, value, arguments.length );
-       },
-
-       append: function() {
-               return this.domManip( arguments, function( elem ) {
-                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
-                               var target = manipulationTarget( this, elem );
-                               target.appendChild( elem );
-                       }
-               });
-       },
-
-       prepend: function() {
-               return this.domManip( arguments, function( elem ) {
-                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
-                               var target = manipulationTarget( this, elem );
-                               target.insertBefore( elem, target.firstChild );
-                       }
-               });
-       },
-
-       before: function() {
-               return this.domManip( arguments, function( elem ) {
-                       if ( this.parentNode ) {
-                               this.parentNode.insertBefore( elem, this );
-                       }
-               });
-       },
-
-       after: function() {
-               return this.domManip( arguments, function( elem ) {
-                       if ( this.parentNode ) {
-                               this.parentNode.insertBefore( elem, this.nextSibling );
-                       }
-               });
-       },
-
-       // keepData is for internal use only--do not document
-       remove: function( selector, keepData ) {
-               var elem,
-                       elems = selector ? jQuery.filter( selector, this ) : this,
-                       i = 0;
-
-               for ( ; (elem = elems[i]) != null; i++ ) {
-
-                       if ( !keepData && elem.nodeType === 1 ) {
-                               jQuery.cleanData( getAll( elem ) );
-                       }
-
-                       if ( elem.parentNode ) {
-                               if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
-                                       setGlobalEval( getAll( elem, "script" ) );
-                               }
-                               elem.parentNode.removeChild( elem );
-                       }
-               }
-
-               return this;
-       },
-
-       empty: function() {
-               var elem,
-                       i = 0;
-
-               for ( ; (elem = this[i]) != null; i++ ) {
-                       // Remove element nodes and prevent memory leaks
-                       if ( elem.nodeType === 1 ) {
-                               jQuery.cleanData( getAll( elem, false ) );
-                       }
-
-                       // Remove any remaining nodes
-                       while ( elem.firstChild ) {
-                               elem.removeChild( elem.firstChild );
-                       }
-
-                       // If this is a select, ensure that it displays empty (#12336)
-                       // Support: IE<9
-                       if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
-                               elem.options.length = 0;
-                       }
-               }
-
-               return this;
-       },
-
-       clone: function( dataAndEvents, deepDataAndEvents ) {
-               dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
-               deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
-               return this.map( function () {
-                       return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
-               });
-       },
-
-       html: function( value ) {
-               return jQuery.access( this, function( value ) {
-                       var elem = this[0] || {},
-                               i = 0,
-                               l = this.length;
-
-                       if ( value === undefined ) {
-                               return elem.nodeType === 1 ?
-                                       elem.innerHTML.replace( rinlinejQuery, "" ) :
-                                       undefined;
-                       }
-
-                       // See if we can take a shortcut and just use innerHTML
-                       if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
-                               ( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
-                               ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
-                               !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
-
-                               value = value.replace( rxhtmlTag, "<$1></$2>" );
-
-                               try {
-                                       for (; i < l; i++ ) {
-                                               // Remove element nodes and prevent memory leaks
-                                               elem = this[i] || {};
-                                               if ( elem.nodeType === 1 ) {
-                                                       jQuery.cleanData( getAll( elem, false ) );
-                                                       elem.innerHTML = value;
-                                               }
-                                       }
-
-                                       elem = 0;
-
-                               // If using innerHTML throws an exception, use the fallback method
-                               } catch(e) {}
-                       }
-
-                       if ( elem ) {
-                               this.empty().append( value );
-                       }
-               }, null, value, arguments.length );
-       },
-
-       replaceWith: function() {
-               var
-                       // Snapshot the DOM in case .domManip sweeps something relevant into its fragment
-                       args = jQuery.map( this, function( elem ) {
-                               return [ elem.nextSibling, elem.parentNode ];
-                       }),
-                       i = 0;
-
-               // Make the changes, replacing each context element with the new content
-               this.domManip( arguments, function( elem ) {
-                       var next = args[ i++ ],
-                               parent = args[ i++ ];
-
-                       if ( parent ) {
-                               // Don't use the snapshot next if it has moved (#13810)
-                               if ( next && next.parentNode !== parent ) {
-                                       next = this.nextSibling;
-                               }
-                               jQuery( this ).remove();
-                               parent.insertBefore( elem, next );
-                       }
-               // Allow new content to include elements from the context set
-               }, true );
-
-               // Force removal if there was no new content (e.g., from empty arguments)
-               return i ? this : this.remove();
-       },
-
-       detach: function( selector ) {
-               return this.remove( selector, true );
-       },
-
-       domManip: function( args, callback, allowIntersection ) {
-
-               // Flatten any nested arrays
-               args = core_concat.apply( [], args );
-
-               var first, node, hasScripts,
-                       scripts, doc, fragment,
-                       i = 0,
-                       l = this.length,
-                       set = this,
-                       iNoClone = l - 1,
-                       value = args[0],
-                       isFunction = jQuery.isFunction( value );
-
-               // We can't cloneNode fragments that contain checked, in WebKit
-               if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
-                       return this.each(function( index ) {
-                               var self = set.eq( index );
-                               if ( isFunction ) {
-                                       args[0] = value.call( this, index, self.html() );
-                               }
-                               self.domManip( args, callback, allowIntersection );
-                       });
-               }
-
-               if ( l ) {
-                       fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this );
-                       first = fragment.firstChild;
-
-                       if ( fragment.childNodes.length === 1 ) {
-                               fragment = first;
-                       }
-
-                       if ( first ) {
-                               scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
-                               hasScripts = scripts.length;
-
-                               // Use the original fragment for the last item instead of the first because it can end up
-                               // being emptied incorrectly in certain situations (#8070).
-                               for ( ; i < l; i++ ) {
-                                       node = fragment;
-
-                                       if ( i !== iNoClone ) {
-                                               node = jQuery.clone( node, true, true );
-
-                                               // Keep references to cloned scripts for later restoration
-                                               if ( hasScripts ) {
-                                                       jQuery.merge( scripts, getAll( node, "script" ) );
-                                               }
-                                       }
-
-                                       callback.call( this[i], node, i );
-                               }
-
-                               if ( hasScripts ) {
-                                       doc = scripts[ scripts.length - 1 ].ownerDocument;
-
-                                       // Reenable scripts
-                                       jQuery.map( scripts, restoreScript );
-
-                                       // Evaluate executable scripts on first document insertion
-                                       for ( i = 0; i < hasScripts; i++ ) {
-                                               node = scripts[ i ];
-                                               if ( rscriptType.test( node.type || "" ) &&
-                                                       !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
-
-                                                       if ( node.src ) {
-                                                               // Hope ajax is available...
-                                                               jQuery._evalUrl( node.src );
-                                                       } else {
-                                                               jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
-                                                       }
-                                               }
-                                       }
-                               }
-
-                               // Fix #11809: Avoid leaking memory
-                               fragment = first = null;
-                       }
-               }
-
-               return this;
-       }
-});
-
-// Support: IE<8
-// Manipulating tables requires a tbody
-function manipulationTarget( elem, content ) {
-       return jQuery.nodeName( elem, "table" ) &&
-               jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ?
-
-               elem.getElementsByTagName("tbody")[0] ||
-                       elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
-               elem;
-}
-
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
-       elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;
-       return elem;
-}
-function restoreScript( elem ) {
-       var match = rscriptTypeMasked.exec( elem.type );
-       if ( match ) {
-               elem.type = match[1];
-       } else {
-               elem.removeAttribute("type");
-       }
-       return elem;
-}
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
-       var elem,
-               i = 0;
-       for ( ; (elem = elems[i]) != null; i++ ) {
-               jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
-       }
-}
-
-function cloneCopyEvent( src, dest ) {
-
-       if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
-               return;
-       }
-
-       var type, i, l,
-               oldData = jQuery._data( src ),
-               curData = jQuery._data( dest, oldData ),
-               events = oldData.events;
-
-       if ( events ) {
-               delete curData.handle;
-               curData.events = {};
-
-               for ( type in events ) {
-                       for ( i = 0, l = events[ type ].length; i < l; i++ ) {
-                               jQuery.event.add( dest, type, events[ type ][ i ] );
-                       }
-               }
-       }
-
-       // make the cloned public data object a copy from the original
-       if ( curData.data ) {
-               curData.data = jQuery.extend( {}, curData.data );
-       }
-}
-
-function fixCloneNodeIssues( src, dest ) {
-       var nodeName, e, data;
-
-       // We do not need to do anything for non-Elements
-       if ( dest.nodeType !== 1 ) {
-               return;
-       }
-
-       nodeName = dest.nodeName.toLowerCase();
-
-       // IE6-8 copies events bound via attachEvent when using cloneNode.
-       if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
-               data = jQuery._data( dest );
-
-               for ( e in data.events ) {
-                       jQuery.removeEvent( dest, e, data.handle );
-               }
-
-               // Event data gets referenced instead of copied if the expando gets copied too
-               dest.removeAttribute( jQuery.expando );
-       }
-
-       // IE blanks contents when cloning scripts, and tries to evaluate newly-set text
-       if ( nodeName === "script" && dest.text !== src.text ) {
-               disableScript( dest ).text = src.text;
-               restoreScript( dest );
-
-       // IE6-10 improperly clones children of object elements using classid.
-       // IE10 throws NoModificationAllowedError if parent is null, #12132.
-       } else if ( nodeName === "object" ) {
-               if ( dest.parentNode ) {
-                       dest.outerHTML = src.outerHTML;
-               }
-
-               // This path appears unavoidable for IE9. When cloning an object
-               // element in IE9, the outerHTML strategy above is not sufficient.
-               // If the src has innerHTML and the destination does not,
-               // copy the src.innerHTML into the dest.innerHTML. #10324
-               if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
-                       dest.innerHTML = src.innerHTML;
-               }
-
-       } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
-               // IE6-8 fails to persist the checked state of a cloned checkbox
-               // or radio button. Worse, IE6-7 fail to give the cloned element
-               // a checked appearance if the defaultChecked value isn't also set
-
-               dest.defaultChecked = dest.checked = src.checked;
-
-               // IE6-7 get confused and end up setting the value of a cloned
-               // checkbox/radio button to an empty string instead of "on"
-               if ( dest.value !== src.value ) {
-                       dest.value = src.value;
-               }
-
-       // IE6-8 fails to return the selected option to the default selected
-       // state when cloning options
-       } else if ( nodeName === "option" ) {
-               dest.defaultSelected = dest.selected = src.defaultSelected;
-
-       // IE6-8 fails to set the defaultValue to the correct value when
-       // cloning other types of input fields
-       } else if ( nodeName === "input" || nodeName === "textarea" ) {
-               dest.defaultValue = src.defaultValue;
-       }
-}
-
-jQuery.each({
-       appendTo: "append",
-       prependTo: "prepend",
-       insertBefore: "before",
-       insertAfter: "after",
-       replaceAll: "replaceWith"
-}, function( name, original ) {
-       jQuery.fn[ name ] = function( selector ) {
-               var elems,
-                       i = 0,
-                       ret = [],
-                       insert = jQuery( selector ),
-                       last = insert.length - 1;
-
-               for ( ; i <= last; i++ ) {
-                       elems = i === last ? this : this.clone(true);
-                       jQuery( insert[i] )[ original ]( elems );
-
-                       // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
-                       core_push.apply( ret, elems.get() );
-               }
-
-               return this.pushStack( ret );
-       };
-});
-
-function getAll( context, tag ) {
-       var elems, elem,
-               i = 0,
-               found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :
-                       typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :
-                       undefined;
-
-       if ( !found ) {
-               for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
-                       if ( !tag || jQuery.nodeName( elem, tag ) ) {
-                               found.push( elem );
-                       } else {
-                               jQuery.merge( found, getAll( elem, tag ) );
-                       }
-               }
-       }
-
-       return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
-               jQuery.merge( [ context ], found ) :
-               found;
-}
-
-// Used in buildFragment, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
-       if ( manipulation_rcheckableType.test( elem.type ) ) {
-               elem.defaultChecked = elem.checked;
-       }
-}
-
-jQuery.extend({
-       clone: function( elem, dataAndEvents, deepDataAndEvents ) {
-               var destElements, node, clone, i, srcElements,
-                       inPage = jQuery.contains( elem.ownerDocument, elem );
-
-               if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
-                       clone = elem.cloneNode( true );
-
-               // IE<=8 does not properly clone detached, unknown element nodes
-               } else {
-                       fragmentDiv.innerHTML = elem.outerHTML;
-                       fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
-               }
-
-               if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
-                               (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-
-                       // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
-                       destElements = getAll( clone );
-                       srcElements = getAll( elem );
-
-                       // Fix all IE cloning issues
-                       for ( i = 0; (node = srcElements[i]) != null; ++i ) {
-                               // Ensure that the destination node is not null; Fixes #9587
-                               if ( destElements[i] ) {
-                                       fixCloneNodeIssues( node, destElements[i] );
-                               }
-                       }
-               }
-
-               // Copy the events from the original to the clone
-               if ( dataAndEvents ) {
-                       if ( deepDataAndEvents ) {
-                               srcElements = srcElements || getAll( elem );
-                               destElements = destElements || getAll( clone );
-
-                               for ( i = 0; (node = srcElements[i]) != null; i++ ) {
-                                       cloneCopyEvent( node, destElements[i] );
-                               }
-                       } else {
-                               cloneCopyEvent( elem, clone );
-                       }
-               }
-
-               // Preserve script evaluation history
-               destElements = getAll( clone, "script" );
-               if ( destElements.length > 0 ) {
-                       setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
-               }
-
-               destElements = srcElements = node = null;
-
-               // Return the cloned set
-               return clone;
-       },
-
-       buildFragment: function( elems, context, scripts, selection ) {
-               var j, elem, contains,
-                       tmp, tag, tbody, wrap,
-                       l = elems.length,
-
-                       // Ensure a safe fragment
-                       safe = createSafeFragment( context ),
-
-                       nodes = [],
-                       i = 0;
-
-               for ( ; i < l; i++ ) {
-                       elem = elems[ i ];
-
-                       if ( elem || elem === 0 ) {
-
-                               // Add nodes directly
-                               if ( jQuery.type( elem ) === "object" ) {
-                                       jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
-                               // Convert non-html into a text node
-                               } else if ( !rhtml.test( elem ) ) {
-                                       nodes.push( context.createTextNode( elem ) );
-
-                               // Convert html into DOM nodes
-                               } else {
-                                       tmp = tmp || safe.appendChild( context.createElement("div") );
-
-                                       // Deserialize a standard representation
-                                       tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
-                                       wrap = wrapMap[ tag ] || wrapMap._default;
-
-                                       tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
-
-                                       // Descend through wrappers to the right content
-                                       j = wrap[0];
-                                       while ( j-- ) {
-                                               tmp = tmp.lastChild;
-                                       }
-
-                                       // Manually add leading whitespace removed by IE
-                                       if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
-                                               nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
-                                       }
-
-                                       // Remove IE's autoinserted <tbody> from table fragments
-                                       if ( !jQuery.support.tbody ) {
-
-                                               // String was a <table>, *may* have spurious <tbody>
-                                               elem = tag === "table" && !rtbody.test( elem ) ?
-                                                       tmp.firstChild :
-
-                                                       // String was a bare <thead> or <tfoot>
-                                                       wrap[1] === "<table>" && !rtbody.test( elem ) ?
-                                                               tmp :
-                                                               0;
-
-                                               j = elem && elem.childNodes.length;
-                                               while ( j-- ) {
-                                                       if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
-                                                               elem.removeChild( tbody );
-                                                       }
-                                               }
-                                       }
-
-                                       jQuery.merge( nodes, tmp.childNodes );
-
-                                       // Fix #12392 for WebKit and IE > 9
-                                       tmp.textContent = "";
-
-                                       // Fix #12392 for oldIE
-                                       while ( tmp.firstChild ) {
-                                               tmp.removeChild( tmp.firstChild );
-                                       }
-
-                                       // Remember the top-level container for proper cleanup
-                                       tmp = safe.lastChild;
-                               }
-                       }
-               }
-
-               // Fix #11356: Clear elements from fragment
-               if ( tmp ) {
-                       safe.removeChild( tmp );
-               }
-
-               // Reset defaultChecked for any radios and checkboxes
-               // about to be appended to the DOM in IE 6/7 (#8060)
-               if ( !jQuery.support.appendChecked ) {
-                       jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
-               }
-
-               i = 0;
-               while ( (elem = nodes[ i++ ]) ) {
-
-                       // #4087 - If origin and destination elements are the same, and this is
-                       // that element, do not do anything
-                       if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
-                               continue;
-                       }
-
-                       contains = jQuery.contains( elem.ownerDocument, elem );
-
-                       // Append to fragment
-                       tmp = getAll( safe.appendChild( elem ), "script" );
-
-                       // Preserve script evaluation history
-                       if ( contains ) {
-                               setGlobalEval( tmp );
-                       }
-
-                       // Capture executables
-                       if ( scripts ) {
-                               j = 0;
-                               while ( (elem = tmp[ j++ ]) ) {
-                                       if ( rscriptType.test( elem.type || "" ) ) {
-                                               scripts.push( elem );
-                                       }
-                               }
-                       }
-               }
-
-               tmp = null;
-
-               return safe;
-       },
-
-       cleanData: function( elems, /* internal */ acceptData ) {
-               var elem, type, id, data,
-                       i = 0,
-                       internalKey = jQuery.expando,
-                       cache = jQuery.cache,
-                       deleteExpando = jQuery.support.deleteExpando,
-                       special = jQuery.event.special;
-
-               for ( ; (elem = elems[i]) != null; i++ ) {
-
-                       if ( acceptData || jQuery.acceptData( elem ) ) {
-
-                               id = elem[ internalKey ];
-                               data = id && cache[ id ];
-
-                               if ( data ) {
-                                       if ( data.events ) {
-                                               for ( type in data.events ) {
-                                                       if ( special[ type ] ) {
-                                                               jQuery.event.remove( elem, type );
-
-                                                       // This is a shortcut to avoid jQuery.event.remove's overhead
-                                                       } else {
-                                                               jQuery.removeEvent( elem, type, data.handle );
-                                                       }
-                                               }
-                                       }
-
-                                       // Remove cache only if it was not already removed by jQuery.event.remove
-                                       if ( cache[ id ] ) {
-
-                                               delete cache[ id ];
-
-                                               // IE does not allow us to delete expando properties from nodes,
-                                               // nor does it have a removeAttribute function on Document nodes;
-                                               // we must handle all of these cases
-                                               if ( deleteExpando ) {
-                                                       delete elem[ internalKey ];
-
-                                               } else if ( typeof elem.removeAttribute !== core_strundefined ) {
-                                                       elem.removeAttribute( internalKey );
-
-                                               } else {
-                                                       elem[ internalKey ] = null;
-                                               }
-
-                                               core_deletedIds.push( id );
-                                       }
-                               }
-                       }
-               }
-       },
-
-       _evalUrl: function( url ) {
-               return jQuery.ajax({
-                       url: url,
-                       type: "GET",
-                       dataType: "script",
-                       async: false,
-                       global: false,
-                       "throws": true
-               });
-       }
-});
-jQuery.fn.extend({
-       wrapAll: function( html ) {
-               if ( jQuery.isFunction( html ) ) {
-                       return this.each(function(i) {
-                               jQuery(this).wrapAll( html.call(this, i) );
-                       });
-               }
-
-               if ( this[0] ) {
-                       // The elements to wrap the target around
-                       var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
-                       if ( this[0].parentNode ) {
-                               wrap.insertBefore( this[0] );
-                       }
-
-                       wrap.map(function() {
-                               var elem = this;
-
-                               while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
-                                       elem = elem.firstChild;
-                               }
-
-                               return elem;
-                       }).append( this );
-               }
-
-               return this;
-       },
-
-       wrapInner: function( html ) {
-               if ( jQuery.isFunction( html ) ) {
-                       return this.each(function(i) {
-                               jQuery(this).wrapInner( html.call(this, i) );
-                       });
-               }
-
-               return this.each(function() {
-                       var self = jQuery( this ),
-                               contents = self.contents();
-
-                       if ( contents.length ) {
-                               contents.wrapAll( html );
-
-                       } else {
-                               self.append( html );
-                       }
-               });
-       },
-
-       wrap: function( html ) {
-               var isFunction = jQuery.isFunction( html );
-
-               return this.each(function(i) {
-                       jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
-               });
-       },
-
-       unwrap: function() {
-               return this.parent().each(function() {
-                       if ( !jQuery.nodeName( this, "body" ) ) {
-                               jQuery( this ).replaceWith( this.childNodes );
-                       }
-               }).end();
-       }
-});
-var iframe, getStyles, curCSS,
-       ralpha = /alpha\([^)]*\)/i,
-       ropacity = /opacity\s*=\s*([^)]*)/,
-       rposition = /^(top|right|bottom|left)$/,
-       // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
-       // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
-       rdisplayswap = /^(none|table(?!-c[ea]).+)/,
-       rmargin = /^margin/,
-       rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
-       rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
-       rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
-       elemdisplay = { BODY: "block" },
-
-       cssShow = { position: "absolute", visibility: "hidden", display: "block" },
-       cssNormalTransform = {
-               letterSpacing: 0,
-               fontWeight: 400
-       },
-
-       cssExpand = [ "Top", "Right", "Bottom", "Left" ],
-       cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
-
-// return a css property mapped to a potentially vendor prefixed property
-function vendorPropName( style, name ) {
-
-       // shortcut for names that are not vendor prefixed
-       if ( name in style ) {
-               return name;
-       }
-
-       // check for vendor prefixed names
-       var capName = name.charAt(0).toUpperCase() + name.slice(1),
-               origName = name,
-               i = cssPrefixes.length;
-
-       while ( i-- ) {
-               name = cssPrefixes[ i ] + capName;
-               if ( name in style ) {
-                       return name;
-               }
-       }
-
-       return origName;
-}
-
-function isHidden( elem, el ) {
-       // isHidden might be called from jQuery#filter function;
-       // in that case, element will be second argument
-       elem = el || elem;
-       return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
-}
-
-function showHide( elements, show ) {
-       var display, elem, hidden,
-               values = [],
-               index = 0,
-               length = elements.length;
-
-       for ( ; index < length; index++ ) {
-               elem = elements[ index ];
-               if ( !elem.style ) {
-                       continue;
-               }
-
-               values[ index ] = jQuery._data( elem, "olddisplay" );
-               display = elem.style.display;
-               if ( show ) {
-                       // Reset the inline display of this element to learn if it is
-                       // being hidden by cascaded rules or not
-                       if ( !values[ index ] && display === "none" ) {
-                               elem.style.display = "";
-                       }
-
-                       // Set elements which have been overridden with display: none
-                       // in a stylesheet to whatever the default browser style is
-                       // for such an element
-                       if ( elem.style.display === "" && isHidden( elem ) ) {
-                               values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
-                       }
-               } else {
-
-                       if ( !values[ index ] ) {
-                               hidden = isHidden( elem );
-
-                               if ( display && display !== "none" || !hidden ) {
-                                       jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
-                               }
-                       }
-               }
-       }
-
-       // Set the display of most of the elements in a second loop
-       // to avoid the constant reflow
-       for ( index = 0; index < length; index++ ) {
-               elem = elements[ index ];
-               if ( !elem.style ) {
-                       continue;
-               }
-               if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
-                       elem.style.display = show ? values[ index ] || "" : "none";
-               }
-       }
-
-       return elements;
-}
-
-jQuery.fn.extend({
-       css: function( name, value ) {
-               return jQuery.access( this, function( elem, name, value ) {
-                       var len, styles,
-                               map = {},
-                               i = 0;
-
-                       if ( jQuery.isArray( name ) ) {
-                               styles = getStyles( elem );
-                               len = name.length;
-
-                               for ( ; i < len; i++ ) {
-                                       map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
-                               }
-
-                               return map;
-                       }
-
-                       return value !== undefined ?
-                               jQuery.style( elem, name, value ) :
-                               jQuery.css( elem, name );
-               }, name, value, arguments.length > 1 );
-       },
-       show: function() {
-               return showHide( this, true );
-       },
-       hide: function() {
-               return showHide( this );
-       },
-       toggle: function( state ) {
-               var bool = typeof state === "boolean";
-
-               return this.each(function() {
-                       if ( bool ? state : isHidden( this ) ) {
-                               jQuery( this ).show();
-                       } else {
-                               jQuery( this ).hide();
-                       }
-               });
-       }
-});
-
-jQuery.extend({
-       // Add in style property hooks for overriding the default
-       // behavior of getting and setting a style property
-       cssHooks: {
-               opacity: {
-                       get: function( elem, computed ) {
-                               if ( computed ) {
-                                       // We should always get a number back from opacity
-                                       var ret = curCSS( elem, "opacity" );
-                                       return ret === "" ? "1" : ret;
-                               }
-                       }
-               }
-       },
-
-       // Don't automatically add "px" to these possibly-unitless properties
-       cssNumber: {
-               "columnCount": true,
-               "fillOpacity": true,
-               "fontWeight": true,
-               "lineHeight": true,
-               "opacity": true,
-               "orphans": true,
-               "widows": true,
-               "zIndex": true,
-               "zoom": true
-       },
-
-       // Add in properties whose names you wish to fix before
-       // setting or getting the value
-       cssProps: {
-               // normalize float css property
-               "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
-       },
-
-       // Get and set the style property on a DOM Node
-       style: function( elem, name, value, extra ) {
-               // Don't set styles on text and comment nodes
-               if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
-                       return;
-               }
-
-               // Make sure that we're working with the right name
-               var ret, type, hooks,
-                       origName = jQuery.camelCase( name ),
-                       style = elem.style;
-
-               name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
-
-               // gets hook for the prefixed version
-               // followed by the unprefixed version
-               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
-               // Check if we're setting a value
-               if ( value !== undefined ) {
-                       type = typeof value;
-
-                       // convert relative number strings (+= or -=) to relative numbers. #7345
-                       if ( type === "string" && (ret = rrelNum.exec( value )) ) {
-                               value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
-                               // Fixes bug #9237
-                               type = "number";
-                       }
-
-                       // Make sure that NaN and null values aren't set. See: #7116
-                       if ( value == null || type === "number" && isNaN( value ) ) {
-                               return;
-                       }
-
-                       // If a number was passed in, add 'px' to the (except for certain CSS properties)
-                       if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
-                               value += "px";
-                       }
-
-                       // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
-                       // but it would mean to define eight (for every problematic property) identical functions
-                       if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
-                               style[ name ] = "inherit";
-                       }
-
-                       // If a hook was provided, use that value, otherwise just set the specified value
-                       if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
-
-                               // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
-                               // Fixes bug #5509
-                               try {
-                                       style[ name ] = value;
-                               } catch(e) {}
-                       }
-
-               } else {
-                       // If a hook was provided get the non-computed value from there
-                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
-                               return ret;
-                       }
-
-                       // Otherwise just get the value from the style object
-                       return style[ name ];
-               }
-       },
-
-       css: function( elem, name, extra, styles ) {
-               var num, val, hooks,
-                       origName = jQuery.camelCase( name );
-
-               // Make sure that we're working with the right name
-               name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
-
-               // gets hook for the prefixed version
-               // followed by the unprefixed version
-               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
-               // If a hook was provided get the computed value from there
-               if ( hooks && "get" in hooks ) {
-                       val = hooks.get( elem, true, extra );
-               }
-
-               // Otherwise, if a way to get the computed value exists, use that
-               if ( val === undefined ) {
-                       val = curCSS( elem, name, styles );
-               }
-
-               //convert "normal" to computed value
-               if ( val === "normal" && name in cssNormalTransform ) {
-                       val = cssNormalTransform[ name ];
-               }
-
-               // Return, converting to number if forced or a qualifier was provided and val looks numeric
-               if ( extra === "" || extra ) {
-                       num = parseFloat( val );
-                       return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
-               }
-               return val;
-       }
-});
-
-// NOTE: we've included the "window" in window.getComputedStyle
-// because jsdom on node.js will break without it.
-if ( window.getComputedStyle ) {
-       getStyles = function( elem ) {
-               return window.getComputedStyle( elem, null );
-       };
-
-       curCSS = function( elem, name, _computed ) {
-               var width, minWidth, maxWidth,
-                       computed = _computed || getStyles( elem ),
-
-                       // getPropertyValue is only needed for .css('filter') in IE9, see #12537
-                       ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
-                       style = elem.style;
-
-               if ( computed ) {
-
-                       if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
-                               ret = jQuery.style( elem, name );
-                       }
-
-                       // A tribute to the "awesome hack by Dean Edwards"
-                       // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
-                       // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
-                       // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
-                       if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
-
-                               // Remember the original values
-                               width = style.width;
-                               minWidth = style.minWidth;
-                               maxWidth = style.maxWidth;
-
-                               // Put in the new values to get a computed value out
-                               style.minWidth = style.maxWidth = style.width = ret;
-                               ret = computed.width;
-
-                               // Revert the changed values
-                               style.width = width;
-                               style.minWidth = minWidth;
-                               style.maxWidth = maxWidth;
-                       }
-               }
-
-               return ret;
-       };
-} else if ( document.documentElement.currentStyle ) {
-       getStyles = function( elem ) {
-               return elem.currentStyle;
-       };
-
-       curCSS = function( elem, name, _computed ) {
-               var left, rs, rsLeft,
-                       computed = _computed || getStyles( elem ),
-                       ret = computed ? computed[ name ] : undefined,
-                       style = elem.style;
-
-               // Avoid setting ret to empty string here
-               // so we don't default to auto
-               if ( ret == null && style && style[ name ] ) {
-                       ret = style[ name ];
-               }
-
-               // From the awesome hack by Dean Edwards
-               // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
-               // If we're not dealing with a regular pixel number
-               // but a number that has a weird ending, we need to convert it to pixels
-               // but not position css attributes, as those are proportional to the parent element instead
-               // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
-               if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
-
-                       // Remember the original values
-                       left = style.left;
-                       rs = elem.runtimeStyle;
-                       rsLeft = rs && rs.left;
-
-                       // Put in the new values to get a computed value out
-                       if ( rsLeft ) {
-                               rs.left = elem.currentStyle.left;
-                       }
-                       style.left = name === "fontSize" ? "1em" : ret;
-                       ret = style.pixelLeft + "px";
-
-                       // Revert the changed values
-                       style.left = left;
-                       if ( rsLeft ) {
-                               rs.left = rsLeft;
-                       }
-               }
-
-               return ret === "" ? "auto" : ret;
-       };
-}
-
-function setPositiveNumber( elem, value, subtract ) {
-       var matches = rnumsplit.exec( value );
-       return matches ?
-               // Guard against undefined "subtract", e.g., when used as in cssHooks
-               Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
-               value;
-}
-
-function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
-       var i = extra === ( isBorderBox ? "border" : "content" ) ?
-               // If we already have the right measurement, avoid augmentation
-               4 :
-               // Otherwise initialize for horizontal or vertical properties
-               name === "width" ? 1 : 0,
-
-               val = 0;
-
-       for ( ; i < 4; i += 2 ) {
-               // both box models exclude margin, so add it if we want it
-               if ( extra === "margin" ) {
-                       val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
-               }
-
-               if ( isBorderBox ) {
-                       // border-box includes padding, so remove it if we want content
-                       if ( extra === "content" ) {
-                               val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-                       }
-
-                       // at this point, extra isn't border nor margin, so remove border
-                       if ( extra !== "margin" ) {
-                               val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
-                       }
-               } else {
-                       // at this point, extra isn't content, so add padding
-                       val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
-                       // at this point, extra isn't content nor padding, so add border
-                       if ( extra !== "padding" ) {
-                               val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
-                       }
-               }
-       }
-
-       return val;
-}
-
-function getWidthOrHeight( elem, name, extra ) {
-
-       // Start with offset property, which is equivalent to the border-box value
-       var valueIsBorderBox = true,
-               val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
-               styles = getStyles( elem ),
-               isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
-       // some non-html elements return undefined for offsetWidth, so check for null/undefined
-       // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
-       // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
-       if ( val <= 0 || val == null ) {
-               // Fall back to computed then uncomputed css if necessary
-               val = curCSS( elem, name, styles );
-               if ( val < 0 || val == null ) {
-                       val = elem.style[ name ];
-               }
-
-               // Computed unit is not pixels. Stop here and return.
-               if ( rnumnonpx.test(val) ) {
-                       return val;
-               }
-
-               // we need the check for style in case a browser which returns unreliable values
-               // for getComputedStyle silently falls back to the reliable elem.style
-               valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
-
-               // Normalize "", auto, and prepare for extra
-               val = parseFloat( val ) || 0;
-       }
-
-       // use the active box-sizing model to add/subtract irrelevant styles
-       return ( val +
-               augmentWidthOrHeight(
-                       elem,
-                       name,
-                       extra || ( isBorderBox ? "border" : "content" ),
-                       valueIsBorderBox,
-                       styles
-               )
-       ) + "px";
-}
-
-// Try to determine the default display value of an element
-function css_defaultDisplay( nodeName ) {
-       var doc = document,
-               display = elemdisplay[ nodeName ];
-
-       if ( !display ) {
-               display = actualDisplay( nodeName, doc );
-
-               // If the simple way fails, read from inside an iframe
-               if ( display === "none" || !display ) {
-                       // Use the already-created iframe if possible
-                       iframe = ( iframe ||
-                               jQuery("<iframe frameborder='0' width='0' height='0'/>")
-                               .css( "cssText", "display:block !important" )
-                       ).appendTo( doc.documentElement );
-
-                       // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
-                       doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
-                       doc.write("<!doctype html><html><body>");
-                       doc.close();
-
-                       display = actualDisplay( nodeName, doc );
-                       iframe.detach();
-               }
-
-               // Store the correct default display
-               elemdisplay[ nodeName ] = display;
-       }
-
-       return display;
-}
-
-// Called ONLY from within css_defaultDisplay
-function actualDisplay( name, doc ) {
-       var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
-               display = jQuery.css( elem[0], "display" );
-       elem.remove();
-       return display;
-}
-
-jQuery.each([ "height", "width" ], function( i, name ) {
-       jQuery.cssHooks[ name ] = {
-               get: function( elem, computed, extra ) {
-                       if ( computed ) {
-                               // certain elements can have dimension info if we invisibly show them
-                               // however, it must have a current display style that would benefit from this
-                               return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
-                                       jQuery.swap( elem, cssShow, function() {
-                                               return getWidthOrHeight( elem, name, extra );
-                                       }) :
-                                       getWidthOrHeight( elem, name, extra );
-                       }
-               },
-
-               set: function( elem, value, extra ) {
-                       var styles = extra && getStyles( elem );
-                       return setPositiveNumber( elem, value, extra ?
-                               augmentWidthOrHeight(
-                                       elem,
-                                       name,
-                                       extra,
-                                       jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
-                                       styles
-                               ) : 0
-                       );
-               }
-       };
-});
-
-if ( !jQuery.support.opacity ) {
-       jQuery.cssHooks.opacity = {
-               get: function( elem, computed ) {
-                       // IE uses filters for opacity
-                       return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
-                               ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
-                               computed ? "1" : "";
-               },
-
-               set: function( elem, value ) {
-                       var style = elem.style,
-                               currentStyle = elem.currentStyle,
-                               opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
-                               filter = currentStyle && currentStyle.filter || style.filter || "";
-
-                       // IE has trouble with opacity if it does not have layout
-                       // Force it by setting the zoom level
-                       style.zoom = 1;
-
-                       // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
-                       // if value === "", then remove inline opacity #12685
-                       if ( ( value >= 1 || value === "" ) &&
-                                       jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
-                                       style.removeAttribute ) {
-
-                               // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
-                               // if "filter:" is present at all, clearType is disabled, we want to avoid this
-                               // style.removeAttribute is IE Only, but so apparently is this code path...
-                               style.removeAttribute( "filter" );
-
-                               // if there is no filter style applied in a css rule or unset inline opacity, we are done
-                               if ( value === "" || currentStyle && !currentStyle.filter ) {
-                                       return;
-                               }
-                       }
-
-                       // otherwise, set new filter values
-                       style.filter = ralpha.test( filter ) ?
-                               filter.replace( ralpha, opacity ) :
-                               filter + " " + opacity;
-               }
-       };
-}
-
-// These hooks cannot be added until DOM ready because the support test
-// for it is not run until after DOM ready
-jQuery(function() {
-       if ( !jQuery.support.reliableMarginRight ) {
-               jQuery.cssHooks.marginRight = {
-                       get: function( elem, computed ) {
-                               if ( computed ) {
-                                       // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-                                       // Work around by temporarily setting element display to inline-block
-                                       return jQuery.swap( elem, { "display": "inline-block" },
-                                               curCSS, [ elem, "marginRight" ] );
-                               }
-                       }
-               };
-       }
-
-       // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
-       // getComputedStyle returns percent when specified for top/left/bottom/right
-       // rather than make the css module depend on the offset module, we just check for it here
-       if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
-               jQuery.each( [ "top", "left" ], function( i, prop ) {
-                       jQuery.cssHooks[ prop ] = {
-                               get: function( elem, computed ) {
-                                       if ( computed ) {
-                                               computed = curCSS( elem, prop );
-                                               // if curCSS returns percentage, fallback to offset
-                                               return rnumnonpx.test( computed ) ?
-                                                       jQuery( elem ).position()[ prop ] + "px" :
-                                                       computed;
-                                       }
-                               }
-                       };
-               });
-       }
-
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-       jQuery.expr.filters.hidden = function( elem ) {
-               // Support: Opera <= 12.12
-               // Opera reports offsetWidths and offsetHeights less than zero on some elements
-               return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
-                       (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
-       };
-
-       jQuery.expr.filters.visible = function( elem ) {
-               return !jQuery.expr.filters.hidden( elem );
-       };
-}
-
-// These hooks are used by animate to expand properties
-jQuery.each({
-       margin: "",
-       padding: "",
-       border: "Width"
-}, function( prefix, suffix ) {
-       jQuery.cssHooks[ prefix + suffix ] = {
-               expand: function( value ) {
-                       var i = 0,
-                               expanded = {},
-
-                               // assumes a single number if not a string
-                               parts = typeof value === "string" ? value.split(" ") : [ value ];
-
-                       for ( ; i < 4; i++ ) {
-                               expanded[ prefix + cssExpand[ i ] + suffix ] =
-                                       parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
-                       }
-
-                       return expanded;
-               }
-       };
-
-       if ( !rmargin.test( prefix ) ) {
-               jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
-       }
-});
-var r20 = /%20/g,
-       rbracket = /\[\]$/,
-       rCRLF = /\r?\n/g,
-       rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
-       rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-jQuery.fn.extend({
-       serialize: function() {
-               return jQuery.param( this.serializeArray() );
-       },
-       serializeArray: function() {
-               return this.map(function(){
-                       // Can add propHook for "elements" to filter or add form elements
-                       var elements = jQuery.prop( this, "elements" );
-                       return elements ? jQuery.makeArray( elements ) : this;
-               })
-               .filter(function(){
-                       var type = this.type;
-                       // Use .is(":disabled") so that fieldset[disabled] works
-                       return this.name && !jQuery( this ).is( ":disabled" ) &&
-                               rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
-                               ( this.checked || !manipulation_rcheckableType.test( type ) );
-               })
-               .map(function( i, elem ){
-                       var val = jQuery( this ).val();
-
-                       return val == null ?
-                               null :
-                               jQuery.isArray( val ) ?
-                                       jQuery.map( val, function( val ){
-                                               return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-                                       }) :
-                                       { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-               }).get();
-       }
-});
-
-//Serialize an array of form elements or a set of
-//key/values into a query string
-jQuery.param = function( a, traditional ) {
-       var prefix,
-               s = [],
-               add = function( key, value ) {
-                       // If value is a function, invoke it and return its value
-                       value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
-                       s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
-               };
-
-       // Set traditional to true for jQuery <= 1.3.2 behavior.
-       if ( traditional === undefined ) {
-               traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
-       }
-
-       // If an array was passed in, assume that it is an array of form elements.
-       if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-               // Serialize the form elements
-               jQuery.each( a, function() {
-                       add( this.name, this.value );
-               });
-
-       } else {
-               // If traditional, encode the "old" way (the way 1.3.2 or older
-               // did it), otherwise encode params recursively.
-               for ( prefix in a ) {
-                       buildParams( prefix, a[ prefix ], traditional, add );
-               }
-       }
-
-       // Return the resulting serialization
-       return s.join( "&" ).replace( r20, "+" );
-};
-
-function buildParams( prefix, obj, traditional, add ) {
-       var name;
-
-       if ( jQuery.isArray( obj ) ) {
-               // Serialize array item.
-               jQuery.each( obj, function( i, v ) {
-                       if ( traditional || rbracket.test( prefix ) ) {
-                               // Treat each array item as a scalar.
-                               add( prefix, v );
-
-                       } else {
-                               // Item is non-scalar (array or object), encode its numeric index.
-                               buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
-                       }
-               });
-
-       } else if ( !traditional && jQuery.type( obj ) === "object" ) {
-               // Serialize object item.
-               for ( name in obj ) {
-                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
-               }
-
-       } else {
-               // Serialize scalar item.
-               add( prefix, obj );
-       }
-}
-jQuery.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 contextmenu").split(" "), function( i, name ) {
-
-       // Handle event binding
-       jQuery.fn[ name ] = function( data, fn ) {
-               return arguments.length > 0 ?
-                       this.on( name, null, data, fn ) :
-                       this.trigger( name );
-       };
-});
-
-jQuery.fn.extend({
-       hover: function( fnOver, fnOut ) {
-               return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-       },
-
-       bind: function( types, data, fn ) {
-               return this.on( types, null, data, fn );
-       },
-       unbind: function( types, fn ) {
-               return this.off( types, null, fn );
-       },
-
-       delegate: function( selector, types, data, fn ) {
-               return this.on( types, selector, data, fn );
-       },
-       undelegate: function( selector, types, fn ) {
-               // ( namespace ) or ( selector, types [, fn] )
-               return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
-       }
-});
-var
-       // Document location
-       ajaxLocParts,
-       ajaxLocation,
-       ajax_nonce = jQuery.now(),
-
-       ajax_rquery = /\?/,
-       rhash = /#.*$/,
-       rts = /([?&])_=[^&]*/,
-       rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
-       // #7653, #8125, #8152: local protocol detection
-       rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
-       rnoContent = /^(?:GET|HEAD)$/,
-       rprotocol = /^\/\//,
-       rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
-
-       // Keep a copy of the old load method
-       _load = jQuery.fn.load,
-
-       /* Prefilters
-        * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
-        * 2) These are called:
-        *    - BEFORE asking for a transport
-        *    - AFTER param serialization (s.data is a string if s.processData is true)
-        * 3) key is the dataType
-        * 4) the catchall symbol "*" can be used
-        * 5) execution will start with transport dataType and THEN continue down to "*" if needed
-        */
-       prefilters = {},
-
-       /* Transports bindings
-        * 1) key is the dataType
-        * 2) the catchall symbol "*" can be used
-        * 3) selection will start with transport dataType and THEN go to "*" if needed
-        */
-       transports = {},
-
-       // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
-       allTypes = "*/".concat("*");
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
-       ajaxLocation = location.href;
-} catch( e ) {
-       // Use the href attribute of an A element
-       // since IE will modify it given document.location
-       ajaxLocation = document.createElement( "a" );
-       ajaxLocation.href = "";
-       ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
-       // dataTypeExpression is optional and defaults to "*"
-       return function( dataTypeExpression, func ) {
-
-               if ( typeof dataTypeExpression !== "string" ) {
-                       func = dataTypeExpression;
-                       dataTypeExpression = "*";
-               }
-
-               var dataType,
-                       i = 0,
-                       dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
-
-               if ( jQuery.isFunction( func ) ) {
-                       // For each dataType in the dataTypeExpression
-                       while ( (dataType = dataTypes[i++]) ) {
-                               // Prepend if requested
-                               if ( dataType[0] === "+" ) {
-                                       dataType = dataType.slice( 1 ) || "*";
-                                       (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
-
-                               // Otherwise append
-                               } else {
-                                       (structure[ dataType ] = structure[ dataType ] || []).push( func );
-                               }
-                       }
-               }
-       };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
-
-       var inspected = {},
-               seekingTransport = ( structure === transports );
-
-       function inspect( dataType ) {
-               var selected;
-               inspected[ dataType ] = true;
-               jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
-                       var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
-                       if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
-                               options.dataTypes.unshift( dataTypeOrTransport );
-                               inspect( dataTypeOrTransport );
-                               return false;
-                       } else if ( seekingTransport ) {
-                               return !( selected = dataTypeOrTransport );
-                       }
-               });
-               return selected;
-       }
-
-       return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
-       var deep, key,
-               flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
-       for ( key in src ) {
-               if ( src[ key ] !== undefined ) {
-                       ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
-               }
-       }
-       if ( deep ) {
-               jQuery.extend( true, target, deep );
-       }
-
-       return target;
-}
-
-jQuery.fn.load = function( url, params, callback ) {
-       if ( typeof url !== "string" && _load ) {
-               return _load.apply( this, arguments );
-       }
-
-       var selector, response, type,
-               self = this,
-               off = url.indexOf(" ");
-
-       if ( off >= 0 ) {
-               selector = url.slice( off, url.length );
-               url = url.slice( 0, off );
-       }
-
-       // If it's a function
-       if ( jQuery.isFunction( params ) ) {
-
-               // We assume that it's the callback
-               callback = params;
-               params = undefined;
-
-       // Otherwise, build a param string
-       } else if ( params && typeof params === "object" ) {
-               type = "POST";
-       }
-
-       // If we have elements to modify, make the request
-       if ( self.length > 0 ) {
-               jQuery.ajax({
-                       url: url,
-
-                       // if "type" variable is undefined, then "GET" method will be used
-                       type: type,
-                       dataType: "html",
-                       data: params
-               }).done(function( responseText ) {
-
-                       // Save response for use in complete callback
-                       response = arguments;
-
-                       self.html( selector ?
-
-                               // If a selector was specified, locate the right elements in a dummy div
-                               // Exclude scripts to avoid IE 'Permission Denied' errors
-                               jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
-
-                               // Otherwise use the full result
-                               responseText );
-
-               }).complete( callback && function( jqXHR, status ) {
-                       self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
-               });
-       }
-
-       return this;
-};
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
-       jQuery.fn[ type ] = function( fn ){
-               return this.on( type, fn );
-       };
-});
-
-jQuery.extend({
-
-       // Counter for holding the number of active queries
-       active: 0,
-
-       // Last-Modified header cache for next request
-       lastModified: {},
-       etag: {},
-
-       ajaxSettings: {
-               url: ajaxLocation,
-               type: "GET",
-               isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
-               global: true,
-               processData: true,
-               async: true,
-               contentType: "application/x-www-form-urlencoded; charset=UTF-8",
-               /*
-               timeout: 0,
-               data: null,
-               dataType: null,
-               username: null,
-               password: null,
-               cache: null,
-               throws: false,
-               traditional: false,
-               headers: {},
-               */
-
-               accepts: {
-                       "*": allTypes,
-                       text: "text/plain",
-                       html: "text/html",
-                       xml: "application/xml, text/xml",
-                       json: "application/json, text/javascript"
-               },
-
-               contents: {
-                       xml: /xml/,
-                       html: /html/,
-                       json: /json/
-               },
-
-               responseFields: {
-                       xml: "responseXML",
-                       text: "responseText",
-                       json: "responseJSON"
-               },
-
-               // Data converters
-               // Keys separate source (or catchall "*") and destination types with a single space
-               converters: {
-
-                       // Convert anything to text
-                       "* text": String,
-
-                       // Text to html (true = no transformation)
-                       "text html": true,
-
-                       // Evaluate text as a json expression
-                       "text json": jQuery.parseJSON,
-
-                       // Parse text as xml
-                       "text xml": jQuery.parseXML
-               },
-
-               // For options that shouldn't be deep extended:
-               // you can add your own custom options here if
-               // and when you create one that shouldn't be
-               // deep extended (see ajaxExtend)
-               flatOptions: {
-                       url: true,
-                       context: true
-               }
-       },
-
-       // Creates a full fledged settings object into target
-       // with both ajaxSettings and settings fields.
-       // If target is omitted, writes into ajaxSettings.
-       ajaxSetup: function( target, settings ) {
-               return settings ?
-
-                       // Building a settings object
-                       ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
-                       // Extending ajaxSettings
-                       ajaxExtend( jQuery.ajaxSettings, target );
-       },
-
-       ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
-       ajaxTransport: addToPrefiltersOrTransports( transports ),
-
-       // Main method
-       ajax: function( url, options ) {
-
-               // If url is an object, simulate pre-1.5 signature
-               if ( typeof url === "object" ) {
-                       options = url;
-                       url = undefined;
-               }
-
-               // Force options to be an object
-               options = options || {};
-
-               var // Cross-domain detection vars
-                       parts,
-                       // Loop variable
-                       i,
-                       // URL without anti-cache param
-                       cacheURL,
-                       // Response headers as string
-                       responseHeadersString,
-                       // timeout handle
-                       timeoutTimer,
-
-                       // To know if global events are to be dispatched
-                       fireGlobals,
-
-                       transport,
-                       // Response headers
-                       responseHeaders,
-                       // Create the final options object
-                       s = jQuery.ajaxSetup( {}, options ),
-                       // Callbacks context
-                       callbackContext = s.context || s,
-                       // Context for global events is callbackContext if it is a DOM node or jQuery collection
-                       globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
-                               jQuery( callbackContext ) :
-                               jQuery.event,
-                       // Deferreds
-                       deferred = jQuery.Deferred(),
-                       completeDeferred = jQuery.Callbacks("once memory"),
-                       // Status-dependent callbacks
-                       statusCode = s.statusCode || {},
-                       // Headers (they are sent all at once)
-                       requestHeaders = {},
-                       requestHeadersNames = {},
-                       // The jqXHR state
-                       state = 0,
-                       // Default abort message
-                       strAbort = "canceled",
-                       // Fake xhr
-                       jqXHR = {
-                               readyState: 0,
-
-                               // Builds headers hashtable if needed
-                               getResponseHeader: function( key ) {
-                                       var match;
-                                       if ( state === 2 ) {
-                                               if ( !responseHeaders ) {
-                                                       responseHeaders = {};
-                                                       while ( (match = rheaders.exec( responseHeadersString )) ) {
-                                                               responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
-                                                       }
-                                               }
-                                               match = responseHeaders[ key.toLowerCase() ];
-                                       }
-                                       return match == null ? null : match;
-                               },
-
-                               // Raw string
-                               getAllResponseHeaders: function() {
-                                       return state === 2 ? responseHeadersString : null;
-                               },
-
-                               // Caches the header
-                               setRequestHeader: function( name, value ) {
-                                       var lname = name.toLowerCase();
-                                       if ( !state ) {
-                                               name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
-                                               requestHeaders[ name ] = value;
-                                       }
-                                       return this;
-                               },
-
-                               // Overrides response content-type header
-                               overrideMimeType: function( type ) {
-                                       if ( !state ) {
-                                               s.mimeType = type;
-                                       }
-                                       return this;
-                               },
-
-                               // Status-dependent callbacks
-                               statusCode: function( map ) {
-                                       var code;
-                                       if ( map ) {
-                                               if ( state < 2 ) {
-                                                       for ( code in map ) {
-                                                               // Lazy-add the new callback in a way that preserves old ones
-                                                               statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
-                                                       }
-                                               } else {
-                                                       // Execute the appropriate callbacks
-                                                       jqXHR.always( map[ jqXHR.status ] );
-                                               }
-                                       }
-                                       return this;
-                               },
-
-                               // Cancel the request
-                               abort: function( statusText ) {
-                                       var finalText = statusText || strAbort;
-                                       if ( transport ) {
-                                               transport.abort( finalText );
-                                       }
-                                       done( 0, finalText );
-                                       return this;
-                               }
-                       };
-
-               // Attach deferreds
-               deferred.promise( jqXHR ).complete = completeDeferred.add;
-               jqXHR.success = jqXHR.done;
-               jqXHR.error = jqXHR.fail;
-
-               // Remove hash character (#7531: and string promotion)
-               // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
-               // Handle falsy url in the settings object (#10093: consistency with old signature)
-               // We also use the url parameter if available
-               s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
-               // Alias method option to type as per ticket #12004
-               s.type = options.method || options.type || s.method || s.type;
-
-               // Extract dataTypes list
-               s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
-
-               // A cross-domain request is in order when we have a protocol:host:port mismatch
-               if ( s.crossDomain == null ) {
-                       parts = rurl.exec( s.url.toLowerCase() );
-                       s.crossDomain = !!( parts &&
-                               ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
-                                       ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
-                                               ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
-                       );
-               }
-
-               // Convert data if not already a string
-               if ( s.data && s.processData && typeof s.data !== "string" ) {
-                       s.data = jQuery.param( s.data, s.traditional );
-               }
-
-               // Apply prefilters
-               inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
-               // If request was aborted inside a prefilter, stop there
-               if ( state === 2 ) {
-                       return jqXHR;
-               }
-
-               // We can fire global events as of now if asked to
-               fireGlobals = s.global;
-
-               // Watch for a new set of requests
-               if ( fireGlobals && jQuery.active++ === 0 ) {
-                       jQuery.event.trigger("ajaxStart");
-               }
-
-               // Uppercase the type
-               s.type = s.type.toUpperCase();
-
-               // Determine if request has content
-               s.hasContent = !rnoContent.test( s.type );
-
-               // Save the URL in case we're toying with the If-Modified-Since
-               // and/or If-None-Match header later on
-               cacheURL = s.url;
-
-               // More options handling for requests with no content
-               if ( !s.hasContent ) {
-
-                       // If data is available, append data to url
-                       if ( s.data ) {
-                               cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
-                               // #9682: remove data so that it's not used in an eventual retry
-                               delete s.data;
-                       }
-
-                       // Add anti-cache in url if needed
-                       if ( s.cache === false ) {
-                               s.url = rts.test( cacheURL ) ?
-
-                                       // If there is already a '_' parameter, set its value
-                                       cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
-
-                                       // Otherwise add one to the end
-                                       cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
-                       }
-               }
-
-               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-               if ( s.ifModified ) {
-                       if ( jQuery.lastModified[ cacheURL ] ) {
-                               jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
-                       }
-                       if ( jQuery.etag[ cacheURL ] ) {
-                               jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
-                       }
-               }
-
-               // Set the correct header, if data is being sent
-               if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
-                       jqXHR.setRequestHeader( "Content-Type", s.contentType );
-               }
-
-               // Set the Accepts header for the server, depending on the dataType
-               jqXHR.setRequestHeader(
-                       "Accept",
-                       s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
-                               s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
-                               s.accepts[ "*" ]
-               );
-
-               // Check for headers option
-               for ( i in s.headers ) {
-                       jqXHR.setRequestHeader( i, s.headers[ i ] );
-               }
-
-               // Allow custom headers/mimetypes and early abort
-               if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
-                       // Abort if not done already and return
-                       return jqXHR.abort();
-               }
-
-               // aborting is no longer a cancellation
-               strAbort = "abort";
-
-               // Install callbacks on deferreds
-               for ( i in { success: 1, error: 1, complete: 1 } ) {
-                       jqXHR[ i ]( s[ i ] );
-               }
-
-               // Get transport
-               transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
-               // If no transport, we auto-abort
-               if ( !transport ) {
-                       done( -1, "No Transport" );
-               } else {
-                       jqXHR.readyState = 1;
-
-                       // Send global event
-                       if ( fireGlobals ) {
-                               globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
-                       }
-                       // Timeout
-                       if ( s.async && s.timeout > 0 ) {
-                               timeoutTimer = setTimeout(function() {
-                                       jqXHR.abort("timeout");
-                               }, s.timeout );
-                       }
-
-                       try {
-                               state = 1;
-                               transport.send( requestHeaders, done );
-                       } catch ( e ) {
-                               // Propagate exception as error if not done
-                               if ( state < 2 ) {
-                                       done( -1, e );
-                               // Simply rethrow otherwise
-                               } else {
-                                       throw e;
-                               }
-                       }
-               }
-
-               // Callback for when everything is done
-               function done( status, nativeStatusText, responses, headers ) {
-                       var isSuccess, success, error, response, modified,
-                               statusText = nativeStatusText;
-
-                       // Called once
-                       if ( state === 2 ) {
-                               return;
-                       }
-
-                       // State is "done" now
-                       state = 2;
-
-                       // Clear timeout if it exists
-                       if ( timeoutTimer ) {
-                               clearTimeout( timeoutTimer );
-                       }
-
-                       // Dereference transport for early garbage collection
-                       // (no matter how long the jqXHR object will be used)
-                       transport = undefined;
-
-                       // Cache response headers
-                       responseHeadersString = headers || "";
-
-                       // Set readyState
-                       jqXHR.readyState = status > 0 ? 4 : 0;
-
-                       // Determine if successful
-                       isSuccess = status >= 200 && status < 300 || status === 304;
-
-                       // Get response data
-                       if ( responses ) {
-                               response = ajaxHandleResponses( s, jqXHR, responses );
-                       }
-
-                       // Convert no matter what (that way responseXXX fields are always set)
-                       response = ajaxConvert( s, response, jqXHR, isSuccess );
-
-                       // If successful, handle type chaining
-                       if ( isSuccess ) {
-
-                               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-                               if ( s.ifModified ) {
-                                       modified = jqXHR.getResponseHeader("Last-Modified");
-                                       if ( modified ) {
-                                               jQuery.lastModified[ cacheURL ] = modified;
-                                       }
-                                       modified = jqXHR.getResponseHeader("etag");
-                                       if ( modified ) {
-                                               jQuery.etag[ cacheURL ] = modified;
-                                       }
-                               }
-
-                               // if no content
-                               if ( status === 204 || s.type === "HEAD" ) {
-                                       statusText = "nocontent";
-
-                               // if not modified
-                               } else if ( status === 304 ) {
-                                       statusText = "notmodified";
-
-                               // If we have data, let's convert it
-                               } else {
-                                       statusText = response.state;
-                                       success = response.data;
-                                       error = response.error;
-                                       isSuccess = !error;
-                               }
-                       } else {
-                               // We extract error from statusText
-                               // then normalize statusText and status for non-aborts
-                               error = statusText;
-                               if ( status || !statusText ) {
-                                       statusText = "error";
-                                       if ( status < 0 ) {
-                                               status = 0;
-                                       }
-                               }
-                       }
-
-                       // Set data for the fake xhr object
-                       jqXHR.status = status;
-                       jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
-                       // Success/Error
-                       if ( isSuccess ) {
-                               deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
-                       } else {
-                               deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
-                       }
-
-                       // Status-dependent callbacks
-                       jqXHR.statusCode( statusCode );
-                       statusCode = undefined;
-
-                       if ( fireGlobals ) {
-                               globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
-                                       [ jqXHR, s, isSuccess ? success : error ] );
-                       }
-
-                       // Complete
-                       completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
-                       if ( fireGlobals ) {
-                               globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-                               // Handle the global AJAX counter
-                               if ( !( --jQuery.active ) ) {
-                                       jQuery.event.trigger("ajaxStop");
-                               }
-                       }
-               }
-
-               return jqXHR;
-       },
-
-       getJSON: function( url, data, callback ) {
-               return jQuery.get( url, data, callback, "json" );
-       },
-
-       getScript: function( url, callback ) {
-               return jQuery.get( url, undefined, callback, "script" );
-       }
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
-       jQuery[ method ] = function( url, data, callback, type ) {
-               // shift arguments if data argument was omitted
-               if ( jQuery.isFunction( data ) ) {
-                       type = type || callback;
-                       callback = data;
-                       data = undefined;
-               }
-
-               return jQuery.ajax({
-                       url: url,
-                       type: method,
-                       dataType: type,
-                       data: data,
-                       success: callback
-               });
-       };
-});
-
-/* Handles responses to an ajax request:
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-       var firstDataType, ct, finalDataType, type,
-               contents = s.contents,
-               dataTypes = s.dataTypes;
-
-       // Remove auto dataType and get content-type in the process
-       while( dataTypes[ 0 ] === "*" ) {
-               dataTypes.shift();
-               if ( ct === undefined ) {
-                       ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
-               }
-       }
-
-       // Check if we're dealing with a known content-type
-       if ( ct ) {
-               for ( type in contents ) {
-                       if ( contents[ type ] && contents[ type ].test( ct ) ) {
-                               dataTypes.unshift( type );
-                               break;
-                       }
-               }
-       }
-
-       // Check to see if we have a response for the expected dataType
-       if ( dataTypes[ 0 ] in responses ) {
-               finalDataType = dataTypes[ 0 ];
-       } else {
-               // Try convertible dataTypes
-               for ( type in responses ) {
-                       if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
-                               finalDataType = type;
-                               break;
-                       }
-                       if ( !firstDataType ) {
-                               firstDataType = type;
-                       }
-               }
-               // Or just use first one
-               finalDataType = finalDataType || firstDataType;
-       }
-
-       // If we found a dataType
-       // We add the dataType to the list if needed
-       // and return the corresponding response
-       if ( finalDataType ) {
-               if ( finalDataType !== dataTypes[ 0 ] ) {
-                       dataTypes.unshift( finalDataType );
-               }
-               return responses[ finalDataType ];
-       }
-}
-
-/* Chain conversions given the request and the original response
- * Also sets the responseXXX fields on the jqXHR instance
- */
-function ajaxConvert( s, response, jqXHR, isSuccess ) {
-       var conv2, current, conv, tmp, prev,
-               converters = {},
-               // Work with a copy of dataTypes in case we need to modify it for conversion
-               dataTypes = s.dataTypes.slice();
-
-       // Create converters map with lowercased keys
-       if ( dataTypes[ 1 ] ) {
-               for ( conv in s.converters ) {
-                       converters[ conv.toLowerCase() ] = s.converters[ conv ];
-               }
-       }
-
-       current = dataTypes.shift();
-
-       // Convert to each sequential dataType
-       while ( current ) {
-
-               if ( s.responseFields[ current ] ) {
-                       jqXHR[ s.responseFields[ current ] ] = response;
-               }
-
-               // Apply the dataFilter if provided
-               if ( !prev && isSuccess && s.dataFilter ) {
-                       response = s.dataFilter( response, s.dataType );
-               }
-
-               prev = current;
-               current = dataTypes.shift();
-
-               if ( current ) {
-
-                       // There's only work to do if current dataType is non-auto
-                       if ( current === "*" ) {
-
-                               current = prev;
-
-                       // Convert response if prev dataType is non-auto and differs from current
-                       } else if ( prev !== "*" && prev !== current ) {
-
-                               // Seek a direct converter
-                               conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
-                               // If none found, seek a pair
-                               if ( !conv ) {
-                                       for ( conv2 in converters ) {
-
-                                               // If conv2 outputs current
-                                               tmp = conv2.split( " " );
-                                               if ( tmp[ 1 ] === current ) {
-
-                                                       // If prev can be converted to accepted input
-                                                       conv = converters[ prev + " " + tmp[ 0 ] ] ||
-                                                               converters[ "* " + tmp[ 0 ] ];
-                                                       if ( conv ) {
-                                                               // Condense equivalence converters
-                                                               if ( conv === true ) {
-                                                                       conv = converters[ conv2 ];
-
-                                                               // Otherwise, insert the intermediate dataType
-                                                               } else if ( converters[ conv2 ] !== true ) {
-                                                                       current = tmp[ 0 ];
-                                                                       dataTypes.unshift( tmp[ 1 ] );
-                                                               }
-                                                               break;
-                                                       }
-                                               }
-                                       }
-                               }
-
-                               // Apply converter (if not an equivalence)
-                               if ( conv !== true ) {
-
-                                       // Unless errors are allowed to bubble, catch and return them
-                                       if ( conv && s[ "throws" ] ) {
-                                               response = conv( response );
-                                       } else {
-                                               try {
-                                                       response = conv( response );
-                                               } catch ( e ) {
-                                                       return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-
-       return { state: "success", data: response };
-}
-// Install script dataType
-jQuery.ajaxSetup({
-       accepts: {
-               script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
-       },
-       contents: {
-               script: /(?:java|ecma)script/
-       },
-       converters: {
-               "text script": function( text ) {
-                       jQuery.globalEval( text );
-                       return text;
-               }
-       }
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
-       if ( s.cache === undefined ) {
-               s.cache = false;
-       }
-       if ( s.crossDomain ) {
-               s.type = "GET";
-               s.global = false;
-       }
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
-       // This transport only deals with cross domain requests
-       if ( s.crossDomain ) {
-
-               var script,
-                       head = document.head || jQuery("head")[0] || document.documentElement;
-
-               return {
-
-                       send: function( _, callback ) {
-
-                               script = document.createElement("script");
-
-                               script.async = true;
-
-                               if ( s.scriptCharset ) {
-                                       script.charset = s.scriptCharset;
-                               }
-
-                               script.src = s.url;
-
-                               // Attach handlers for all browsers
-                               script.onload = script.onreadystatechange = function( _, isAbort ) {
-
-                                       if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
-                                               // Handle memory leak in IE
-                                               script.onload = script.onreadystatechange = null;
-
-                                               // Remove the script
-                                               if ( script.parentNode ) {
-                                                       script.parentNode.removeChild( script );
-                                               }
-
-                                               // Dereference the script
-                                               script = null;
-
-                                               // Callback if not abort
-                                               if ( !isAbort ) {
-                                                       callback( 200, "success" );
-                                               }
-                                       }
-                               };
-
-                               // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
-                               // Use native DOM manipulation to avoid our domManip AJAX trickery
-                               head.insertBefore( script, head.firstChild );
-                       },
-
-                       abort: function() {
-                               if ( script ) {
-                                       script.onload( undefined, true );
-                               }
-                       }
-               };
-       }
-});
-var oldCallbacks = [],
-       rjsonp = /(=)\?(?=&|$)|\?\?/;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
-       jsonp: "callback",
-       jsonpCallback: function() {
-               var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
-               this[ callback ] = true;
-               return callback;
-       }
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
-       var callbackName, overwritten, responseContainer,
-               jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
-                       "url" :
-                       typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
-               );
-
-       // Handle iff the expected data type is "jsonp" or we have a parameter to set
-       if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
-
-               // Get callback name, remembering preexisting value associated with it
-               callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
-                       s.jsonpCallback() :
-                       s.jsonpCallback;
-
-               // Insert callback into url or form data
-               if ( jsonProp ) {
-                       s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
-               } else if ( s.jsonp !== false ) {
-                       s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
-               }
-
-               // Use data converter to retrieve json after script execution
-               s.converters["script json"] = function() {
-                       if ( !responseContainer ) {
-                               jQuery.error( callbackName + " was not called" );
-                       }
-                       return responseContainer[ 0 ];
-               };
-
-               // force json dataType
-               s.dataTypes[ 0 ] = "json";
-
-               // Install callback
-               overwritten = window[ callbackName ];
-               window[ callbackName ] = function() {
-                       responseContainer = arguments;
-               };
-
-               // Clean-up function (fires after converters)
-               jqXHR.always(function() {
-                       // Restore preexisting value
-                       window[ callbackName ] = overwritten;
-
-                       // Save back as free
-                       if ( s[ callbackName ] ) {
-                               // make sure that re-using the options doesn't screw things around
-                               s.jsonpCallback = originalSettings.jsonpCallback;
-
-                               // save the callback name for future use
-                               oldCallbacks.push( callbackName );
-                       }
-
-                       // Call if it was a function and we have a response
-                       if ( responseContainer && jQuery.isFunction( overwritten ) ) {
-                               overwritten( responseContainer[ 0 ] );
-                       }
-
-                       responseContainer = overwritten = undefined;
-               });
-
-               // Delegate to script
-               return "script";
-       }
-});
-var xhrCallbacks, xhrSupported,
-       xhrId = 0,
-       // #5280: Internet Explorer will keep connections alive if we don't abort on unload
-       xhrOnUnloadAbort = window.ActiveXObject && function() {
-               // Abort all pending requests
-               var key;
-               for ( key in xhrCallbacks ) {
-                       xhrCallbacks[ key ]( undefined, true );
-               }
-       };
-
-// Functions to create xhrs
-function createStandardXHR() {
-       try {
-               return new window.XMLHttpRequest();
-       } catch( e ) {}
-}
-
-function createActiveXHR() {
-       try {
-               return new window.ActiveXObject("Microsoft.XMLHTTP");
-       } catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
-       /* Microsoft failed to properly
-        * implement the XMLHttpRequest in IE7 (can't request local files),
-        * so we use the ActiveXObject when it is available
-        * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
-        * we need a fallback.
-        */
-       function() {
-               return !this.isLocal && createStandardXHR() || createActiveXHR();
-       } :
-       // For all other browsers, use the standard XMLHttpRequest object
-       createStandardXHR;
-
-// Determine support properties
-xhrSupported = jQuery.ajaxSettings.xhr();
-jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-xhrSupported = jQuery.support.ajax = !!xhrSupported;
-
-// Create transport if the browser can provide an xhr
-if ( xhrSupported ) {
-
-       jQuery.ajaxTransport(function( s ) {
-               // Cross domain only allowed if supported through XMLHttpRequest
-               if ( !s.crossDomain || jQuery.support.cors ) {
-
-                       var callback;
-
-                       return {
-                               send: function( headers, complete ) {
-
-                                       // Get a new xhr
-                                       var handle, i,
-                                               xhr = s.xhr();
-
-                                       // Open the socket
-                                       // Passing null username, generates a login popup on Opera (#2865)
-                                       if ( s.username ) {
-                                               xhr.open( s.type, s.url, s.async, s.username, s.password );
-                                       } else {
-                                               xhr.open( s.type, s.url, s.async );
-                                       }
-
-                                       // Apply custom fields if provided
-                                       if ( s.xhrFields ) {
-                                               for ( i in s.xhrFields ) {
-                                                       xhr[ i ] = s.xhrFields[ i ];
-                                               }
-                                       }
-
-                                       // Override mime type if needed
-                                       if ( s.mimeType && xhr.overrideMimeType ) {
-                                               xhr.overrideMimeType( s.mimeType );
-                                       }
-
-                                       // X-Requested-With header
-                                       // For cross-domain requests, seeing as conditions for a preflight are
-                                       // akin to a jigsaw puzzle, we simply never set it to be sure.
-                                       // (it can always be set on a per-request basis or even using ajaxSetup)
-                                       // For same-domain requests, won't change header if already provided.
-                                       if ( !s.crossDomain && !headers["X-Requested-With"] ) {
-                                               headers["X-Requested-With"] = "XMLHttpRequest";
-                                       }
-
-                                       // Need an extra try/catch for cross domain requests in Firefox 3
-                                       try {
-                                               for ( i in headers ) {
-                                                       xhr.setRequestHeader( i, headers[ i ] );
-                                               }
-                                       } catch( err ) {}
-
-                                       // Do send the request
-                                       // This may raise an exception which is actually
-                                       // handled in jQuery.ajax (so no try/catch here)
-                                       xhr.send( ( s.hasContent && s.data ) || null );
-
-                                       // Listener
-                                       callback = function( _, isAbort ) {
-                                               var status, responseHeaders, statusText, responses;
-
-                                               // Firefox throws exceptions when accessing properties
-                                               // of an xhr when a network error occurred
-                                               // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
-                                               try {
-
-                                                       // Was never called and is aborted or complete
-                                                       if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
-                                                               // Only called once
-                                                               callback = undefined;
-
-                                                               // Do not keep as active anymore
-                                                               if ( handle ) {
-                                                                       xhr.onreadystatechange = jQuery.noop;
-                                                                       if ( xhrOnUnloadAbort ) {
-                                                                               delete xhrCallbacks[ handle ];
-                                                                       }
-                                                               }
-
-                                                               // If it's an abort
-                                                               if ( isAbort ) {
-                                                                       // Abort it manually if needed
-                                                                       if ( xhr.readyState !== 4 ) {
-                                                                               xhr.abort();
-                                                                       }
-                                                               } else {
-                                                                       responses = {};
-                                                                       status = xhr.status;
-                                                                       responseHeaders = xhr.getAllResponseHeaders();
-
-                                                                       // When requesting binary data, IE6-9 will throw an exception
-                                                                       // on any attempt to access responseText (#11426)
-                                                                       if ( typeof xhr.responseText === "string" ) {
-                                                                               responses.text = xhr.responseText;
-                                                                       }
-
-                                                                       // Firefox throws an exception when accessing
-                                                                       // statusText for faulty cross-domain requests
-                                                                       try {
-                                                                               statusText = xhr.statusText;
-                                                                       } catch( e ) {
-                                                                               // We normalize with Webkit giving an empty statusText
-                                                                               statusText = "";
-                                                                       }
-
-                                                                       // Filter status for non standard behaviors
-
-                                                                       // If the request is local and we have data: assume a success
-                                                                       // (success with no data won't get notified, that's the best we
-                                                                       // can do given current implementations)
-                                                                       if ( !status && s.isLocal && !s.crossDomain ) {
-                                                                               status = responses.text ? 200 : 404;
-                                                                       // IE - #1450: sometimes returns 1223 when it should be 204
-                                                                       } else if ( status === 1223 ) {
-                                                                               status = 204;
-                                                                       }
-                                                               }
-                                                       }
-                                               } catch( firefoxAccessException ) {
-                                                       if ( !isAbort ) {
-                                                               complete( -1, firefoxAccessException );
-                                                       }
-                                               }
-
-                                               // Call complete if needed
-                                               if ( responses ) {
-                                                       complete( status, statusText, responses, responseHeaders );
-                                               }
-                                       };
-
-                                       if ( !s.async ) {
-                                               // if we're in sync mode we fire the callback
-                                               callback();
-                                       } else if ( xhr.readyState === 4 ) {
-                                               // (IE6 & IE7) if it's in cache and has been
-                                               // retrieved directly we need to fire the callback
-                                               setTimeout( callback );
-                                       } else {
-                                               handle = ++xhrId;
-                                               if ( xhrOnUnloadAbort ) {
-                                                       // Create the active xhrs callbacks list if needed
-                                                       // and attach the unload handler
-                                                       if ( !xhrCallbacks ) {
-                                                               xhrCallbacks = {};
-                                                               jQuery( window ).unload( xhrOnUnloadAbort );
-                                                       }
-                                                       // Add to list of active xhrs callbacks
-                                                       xhrCallbacks[ handle ] = callback;
-                                               }
-                                               xhr.onreadystatechange = callback;
-                                       }
-                               },
-
-                               abort: function() {
-                                       if ( callback ) {
-                                               callback( undefined, true );
-                                       }
-                               }
-                       };
-               }
-       });
-}
-var fxNow, timerId,
-       rfxtypes = /^(?:toggle|show|hide)$/,
-       rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
-       rrun = /queueHooks$/,
-       animationPrefilters = [ defaultPrefilter ],
-       tweeners = {
-               "*": [function( prop, value ) {
-                       var tween = this.createTween( prop, value ),
-                               target = tween.cur(),
-                               parts = rfxnum.exec( value ),
-                               unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
-                               // Starting value computation is required for potential unit mismatches
-                               start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
-                                       rfxnum.exec( jQuery.css( tween.elem, prop ) ),
-                               scale = 1,
-                               maxIterations = 20;
-
-                       if ( start && start[ 3 ] !== unit ) {
-                               // Trust units reported by jQuery.css
-                               unit = unit || start[ 3 ];
-
-                               // Make sure we update the tween properties later on
-                               parts = parts || [];
-
-                               // Iteratively approximate from a nonzero starting point
-                               start = +target || 1;
-
-                               do {
-                                       // If previous iteration zeroed out, double until we get *something*
-                                       // Use a string for doubling factor so we don't accidentally see scale as unchanged below
-                                       scale = scale || ".5";
-
-                                       // Adjust and apply
-                                       start = start / scale;
-                                       jQuery.style( tween.elem, prop, start + unit );
-
-                               // Update scale, tolerating zero or NaN from tween.cur()
-                               // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
-                               } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
-                       }
-
-                       // Update tween properties
-                       if ( parts ) {
-                               start = tween.start = +start || +target || 0;
-                               tween.unit = unit;
-                               // If a +=/-= token was provided, we're doing a relative animation
-                               tween.end = parts[ 1 ] ?
-                                       start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
-                                       +parts[ 2 ];
-                       }
-
-                       return tween;
-               }]
-       };
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
-       setTimeout(function() {
-               fxNow = undefined;
-       });
-       return ( fxNow = jQuery.now() );
-}
-
-function createTween( value, prop, animation ) {
-       var tween,
-               collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
-               index = 0,
-               length = collection.length;
-       for ( ; index < length; index++ ) {
-               if ( (tween = collection[ index ].call( animation, prop, value )) ) {
-
-                       // we're done with this property
-                       return tween;
-               }
-       }
-}
-
-function Animation( elem, properties, options ) {
-       var result,
-               stopped,
-               index = 0,
-               length = animationPrefilters.length,
-               deferred = jQuery.Deferred().always( function() {
-                       // don't match elem in the :animated selector
-                       delete tick.elem;
-               }),
-               tick = function() {
-                       if ( stopped ) {
-                               return false;
-                       }
-                       var currentTime = fxNow || createFxNow(),
-                               remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
-                               // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
-                               temp = remaining / animation.duration || 0,
-                               percent = 1 - temp,
-                               index = 0,
-                               length = animation.tweens.length;
-
-                       for ( ; index < length ; index++ ) {
-                               animation.tweens[ index ].run( percent );
-                       }
-
-                       deferred.notifyWith( elem, [ animation, percent, remaining ]);
-
-                       if ( percent < 1 && length ) {
-                               return remaining;
-                       } else {
-                               deferred.resolveWith( elem, [ animation ] );
-                               return false;
-                       }
-               },
-               animation = deferred.promise({
-                       elem: elem,
-                       props: jQuery.extend( {}, properties ),
-                       opts: jQuery.extend( true, { specialEasing: {} }, options ),
-                       originalProperties: properties,
-                       originalOptions: options,
-                       startTime: fxNow || createFxNow(),
-                       duration: options.duration,
-                       tweens: [],
-                       createTween: function( prop, end ) {
-                               var tween = jQuery.Tween( elem, animation.opts, prop, end,
-                                               animation.opts.specialEasing[ prop ] || animation.opts.easing );
-                               animation.tweens.push( tween );
-                               return tween;
-                       },
-                       stop: function( gotoEnd ) {
-                               var index = 0,
-                                       // if we are going to the end, we want to run all the tweens
-                                       // otherwise we skip this part
-                                       length = gotoEnd ? animation.tweens.length : 0;
-                               if ( stopped ) {
-                                       return this;
-                               }
-                               stopped = true;
-                               for ( ; index < length ; index++ ) {
-                                       animation.tweens[ index ].run( 1 );
-                               }
-
-                               // resolve when we played the last frame
-                               // otherwise, reject
-                               if ( gotoEnd ) {
-                                       deferred.resolveWith( elem, [ animation, gotoEnd ] );
-                               } else {
-                                       deferred.rejectWith( elem, [ animation, gotoEnd ] );
-                               }
-                               return this;
-                       }
-               }),
-               props = animation.props;
-
-       propFilter( props, animation.opts.specialEasing );
-
-       for ( ; index < length ; index++ ) {
-               result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
-               if ( result ) {
-                       return result;
-               }
-       }
-
-       jQuery.map( props, createTween, animation );
-
-       if ( jQuery.isFunction( animation.opts.start ) ) {
-               animation.opts.start.call( elem, animation );
-       }
-
-       jQuery.fx.timer(
-               jQuery.extend( tick, {
-                       elem: elem,
-                       anim: animation,
-                       queue: animation.opts.queue
-               })
-       );
-
-       // attach callbacks from options
-       return animation.progress( animation.opts.progress )
-               .done( animation.opts.done, animation.opts.complete )
-               .fail( animation.opts.fail )
-               .always( animation.opts.always );
-}
-
-function propFilter( props, specialEasing ) {
-       var index, name, easing, value, hooks;
-
-       // camelCase, specialEasing and expand cssHook pass
-       for ( index in props ) {
-               name = jQuery.camelCase( index );
-               easing = specialEasing[ name ];
-               value = props[ index ];
-               if ( jQuery.isArray( value ) ) {
-                       easing = value[ 1 ];
-                       value = props[ index ] = value[ 0 ];
-               }
-
-               if ( index !== name ) {
-                       props[ name ] = value;
-                       delete props[ index ];
-               }
-
-               hooks = jQuery.cssHooks[ name ];
-               if ( hooks && "expand" in hooks ) {
-                       value = hooks.expand( value );
-                       delete props[ name ];
-
-                       // not quite $.extend, this wont overwrite keys already present.
-                       // also - reusing 'index' from above because we have the correct "name"
-                       for ( index in value ) {
-                               if ( !( index in props ) ) {
-                                       props[ index ] = value[ index ];
-                                       specialEasing[ index ] = easing;
-                               }
-                       }
-               } else {
-                       specialEasing[ name ] = easing;
-               }
-       }
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
-
-       tweener: function( props, callback ) {
-               if ( jQuery.isFunction( props ) ) {
-                       callback = props;
-                       props = [ "*" ];
-               } else {
-                       props = props.split(" ");
-               }
-
-               var prop,
-                       index = 0,
-                       length = props.length;
-
-               for ( ; index < length ; index++ ) {
-                       prop = props[ index ];
-                       tweeners[ prop ] = tweeners[ prop ] || [];
-                       tweeners[ prop ].unshift( callback );
-               }
-       },
-
-       prefilter: function( callback, prepend ) {
-               if ( prepend ) {
-                       animationPrefilters.unshift( callback );
-               } else {
-                       animationPrefilters.push( callback );
-               }
-       }
-});
-
-function defaultPrefilter( elem, props, opts ) {
-       /* jshint validthis: true */
-       var prop, value, toggle, tween, hooks, oldfire,
-               anim = this,
-               orig = {},
-               style = elem.style,
-               hidden = elem.nodeType && isHidden( elem ),
-               dataShow = jQuery._data( elem, "fxshow" );
-
-       // handle queue: false promises
-       if ( !opts.queue ) {
-               hooks = jQuery._queueHooks( elem, "fx" );
-               if ( hooks.unqueued == null ) {
-                       hooks.unqueued = 0;
-                       oldfire = hooks.empty.fire;
-                       hooks.empty.fire = function() {
-                               if ( !hooks.unqueued ) {
-                                       oldfire();
-                               }
-                       };
-               }
-               hooks.unqueued++;
-
-               anim.always(function() {
-                       // doing this makes sure that the complete handler will be called
-                       // before this completes
-                       anim.always(function() {
-                               hooks.unqueued--;
-                               if ( !jQuery.queue( elem, "fx" ).length ) {
-                                       hooks.empty.fire();
-                               }
-                       });
-               });
-       }
-
-       // height/width overflow pass
-       if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
-               // Make sure that nothing sneaks out
-               // Record all 3 overflow attributes because IE does not
-               // change the overflow attribute when overflowX and
-               // overflowY are set to the same value
-               opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
-               // Set display property to inline-block for height/width
-               // animations on inline elements that are having width/height animated
-               if ( jQuery.css( elem, "display" ) === "inline" &&
-                               jQuery.css( elem, "float" ) === "none" ) {
-
-                       // inline-level elements accept inline-block;
-                       // block-level elements need to be inline with layout
-                       if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
-                               style.display = "inline-block";
-
-                       } else {
-                               style.zoom = 1;
-                       }
-               }
-       }
-
-       if ( opts.overflow ) {
-               style.overflow = "hidden";
-               if ( !jQuery.support.shrinkWrapBlocks ) {
-                       anim.always(function() {
-                               style.overflow = opts.overflow[ 0 ];
-                               style.overflowX = opts.overflow[ 1 ];
-                               style.overflowY = opts.overflow[ 2 ];
-                       });
-               }
-       }
-
-
-       // show/hide pass
-       for ( prop in props ) {
-               value = props[ prop ];
-               if ( rfxtypes.exec( value ) ) {
-                       delete props[ prop ];
-                       toggle = toggle || value === "toggle";
-                       if ( value === ( hidden ? "hide" : "show" ) ) {
-                               continue;
-                       }
-                       orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
-               }
-       }
-
-       if ( !jQuery.isEmptyObject( orig ) ) {
-               if ( dataShow ) {
-                       if ( "hidden" in dataShow ) {
-                               hidden = dataShow.hidden;
-                       }
-               } else {
-                       dataShow = jQuery._data( elem, "fxshow", {} );
-               }
-
-               // store state if its toggle - enables .stop().toggle() to "reverse"
-               if ( toggle ) {
-                       dataShow.hidden = !hidden;
-               }
-               if ( hidden ) {
-                       jQuery( elem ).show();
-               } else {
-                       anim.done(function() {
-                               jQuery( elem ).hide();
-                       });
-               }
-               anim.done(function() {
-                       var prop;
-                       jQuery._removeData( elem, "fxshow" );
-                       for ( prop in orig ) {
-                               jQuery.style( elem, prop, orig[ prop ] );
-                       }
-               });
-               for ( prop in orig ) {
-                       tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
-
-                       if ( !( prop in dataShow ) ) {
-                               dataShow[ prop ] = tween.start;
-                               if ( hidden ) {
-                                       tween.end = tween.start;
-                                       tween.start = prop === "width" || prop === "height" ? 1 : 0;
-                               }
-                       }
-               }
-       }
-}
-
-function Tween( elem, options, prop, end, easing ) {
-       return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
-       constructor: Tween,
-       init: function( elem, options, prop, end, easing, unit ) {
-               this.elem = elem;
-               this.prop = prop;
-               this.easing = easing || "swing";
-               this.options = options;
-               this.start = this.now = this.cur();
-               this.end = end;
-               this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
-       },
-       cur: function() {
-               var hooks = Tween.propHooks[ this.prop ];
-
-               return hooks && hooks.get ?
-                       hooks.get( this ) :
-                       Tween.propHooks._default.get( this );
-       },
-       run: function( percent ) {
-               var eased,
-                       hooks = Tween.propHooks[ this.prop ];
-
-               if ( this.options.duration ) {
-                       this.pos = eased = jQuery.easing[ this.easing ](
-                               percent, this.options.duration * percent, 0, 1, this.options.duration
-                       );
-               } else {
-                       this.pos = eased = percent;
-               }
-               this.now = ( this.end - this.start ) * eased + this.start;
-
-               if ( this.options.step ) {
-                       this.options.step.call( this.elem, this.now, this );
-               }
-
-               if ( hooks && hooks.set ) {
-                       hooks.set( this );
-               } else {
-                       Tween.propHooks._default.set( this );
-               }
-               return this;
-       }
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
-       _default: {
-               get: function( tween ) {
-                       var result;
-
-                       if ( tween.elem[ tween.prop ] != null &&
-                               (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
-                               return tween.elem[ tween.prop ];
-                       }
-
-                       // passing an empty string as a 3rd parameter to .css will automatically
-                       // attempt a parseFloat and fallback to a string if the parse fails
-                       // so, simple values such as "10px" are parsed to Float.
-                       // complex values such as "rotate(1rad)" are returned as is.
-                       result = jQuery.css( tween.elem, tween.prop, "" );
-                       // Empty strings, null, undefined and "auto" are converted to 0.
-                       return !result || result === "auto" ? 0 : result;
-               },
-               set: function( tween ) {
-                       // use step hook for back compat - use cssHook if its there - use .style if its
-                       // available and use plain properties where available
-                       if ( jQuery.fx.step[ tween.prop ] ) {
-                               jQuery.fx.step[ tween.prop ]( tween );
-                       } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
-                               jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
-                       } else {
-                               tween.elem[ tween.prop ] = tween.now;
-                       }
-               }
-       }
-};
-
-// Support: IE <=9
-// Panic based approach to setting things on disconnected nodes
-
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
-       set: function( tween ) {
-               if ( tween.elem.nodeType && tween.elem.parentNode ) {
-                       tween.elem[ tween.prop ] = tween.now;
-               }
-       }
-};
-
-jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
-       var cssFn = jQuery.fn[ name ];
-       jQuery.fn[ name ] = function( speed, easing, callback ) {
-               return speed == null || typeof speed === "boolean" ?
-                       cssFn.apply( this, arguments ) :
-                       this.animate( genFx( name, true ), speed, easing, callback );
-       };
-});
-
-jQuery.fn.extend({
-       fadeTo: function( speed, to, easing, callback ) {
-
-               // show any hidden elements after setting opacity to 0
-               return this.filter( isHidden ).css( "opacity", 0 ).show()
-
-                       // animate to the value specified
-                       .end().animate({ opacity: to }, speed, easing, callback );
-       },
-       animate: function( prop, speed, easing, callback ) {
-               var empty = jQuery.isEmptyObject( prop ),
-                       optall = jQuery.speed( speed, easing, callback ),
-                       doAnimation = function() {
-                               // Operate on a copy of prop so per-property easing won't be lost
-                               var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
-                               // Empty animations, or finishing resolves immediately
-                               if ( empty || jQuery._data( this, "finish" ) ) {
-                                       anim.stop( true );
-                               }
-                       };
-                       doAnimation.finish = doAnimation;
-
-               return empty || optall.queue === false ?
-                       this.each( doAnimation ) :
-                       this.queue( optall.queue, doAnimation );
-       },
-       stop: function( type, clearQueue, gotoEnd ) {
-               var stopQueue = function( hooks ) {
-                       var stop = hooks.stop;
-                       delete hooks.stop;
-                       stop( gotoEnd );
-               };
-
-               if ( typeof type !== "string" ) {
-                       gotoEnd = clearQueue;
-                       clearQueue = type;
-                       type = undefined;
-               }
-               if ( clearQueue && type !== false ) {
-                       this.queue( type || "fx", [] );
-               }
-
-               return this.each(function() {
-                       var dequeue = true,
-                               index = type != null && type + "queueHooks",
-                               timers = jQuery.timers,
-                               data = jQuery._data( this );
-
-                       if ( index ) {
-                               if ( data[ index ] && data[ index ].stop ) {
-                                       stopQueue( data[ index ] );
-                               }
-                       } else {
-                               for ( index in data ) {
-                                       if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
-                                               stopQueue( data[ index ] );
-                                       }
-                               }
-                       }
-
-                       for ( index = timers.length; index--; ) {
-                               if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
-                                       timers[ index ].anim.stop( gotoEnd );
-                                       dequeue = false;
-                                       timers.splice( index, 1 );
-                               }
-                       }
-
-                       // start the next in the queue if the last step wasn't forced
-                       // timers currently will call their complete callbacks, which will dequeue
-                       // but only if they were gotoEnd
-                       if ( dequeue || !gotoEnd ) {
-                               jQuery.dequeue( this, type );
-                       }
-               });
-       },
-       finish: function( type ) {
-               if ( type !== false ) {
-                       type = type || "fx";
-               }
-               return this.each(function() {
-                       var index,
-                               data = jQuery._data( this ),
-                               queue = data[ type + "queue" ],
-                               hooks = data[ type + "queueHooks" ],
-                               timers = jQuery.timers,
-                               length = queue ? queue.length : 0;
-
-                       // enable finishing flag on private data
-                       data.finish = true;
-
-                       // empty the queue first
-                       jQuery.queue( this, type, [] );
-
-                       if ( hooks && hooks.stop ) {
-                               hooks.stop.call( this, true );
-                       }
-
-                       // look for any active animations, and finish them
-                       for ( index = timers.length; index--; ) {
-                               if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
-                                       timers[ index ].anim.stop( true );
-                                       timers.splice( index, 1 );
-                               }
-                       }
-
-                       // look for any animations in the old queue and finish them
-                       for ( index = 0; index < length; index++ ) {
-                               if ( queue[ index ] && queue[ index ].finish ) {
-                                       queue[ index ].finish.call( this );
-                               }
-                       }
-
-                       // turn off finishing flag
-                       delete data.finish;
-               });
-       }
-});
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
-       var which,
-               attrs = { height: type },
-               i = 0;
-
-       // if we include width, step value is 1 to do all cssExpand values,
-       // if we don't include width, step value is 2 to skip over Left and Right
-       includeWidth = includeWidth? 1 : 0;
-       for( ; i < 4 ; i += 2 - includeWidth ) {
-               which = cssExpand[ i ];
-               attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
-       }
-
-       if ( includeWidth ) {
-               attrs.opacity = attrs.width = type;
-       }
-
-       return attrs;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
-       slideDown: genFx("show"),
-       slideUp: genFx("hide"),
-       slideToggle: genFx("toggle"),
-       fadeIn: { opacity: "show" },
-       fadeOut: { opacity: "hide" },
-       fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
-       jQuery.fn[ name ] = function( speed, easing, callback ) {
-               return this.animate( props, speed, easing, callback );
-       };
-});
-
-jQuery.speed = function( speed, easing, fn ) {
-       var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
-               complete: fn || !fn && easing ||
-                       jQuery.isFunction( speed ) && speed,
-               duration: speed,
-               easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
-       };
-
-       opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
-               opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
-       // normalize opt.queue - true/undefined/null -> "fx"
-       if ( opt.queue == null || opt.queue === true ) {
-               opt.queue = "fx";
-       }
-
-       // Queueing
-       opt.old = opt.complete;
-
-       opt.complete = function() {
-               if ( jQuery.isFunction( opt.old ) ) {
-                       opt.old.call( this );
-               }
-
-               if ( opt.queue ) {
-                       jQuery.dequeue( this, opt.queue );
-               }
-       };
-
-       return opt;
-};
-
-jQuery.easing = {
-       linear: function( p ) {
-               return p;
-       },
-       swing: function( p ) {
-               return 0.5 - Math.cos( p*Math.PI ) / 2;
-       }
-};
-
-jQuery.timers = [];
-jQuery.fx = Tween.prototype.init;
-jQuery.fx.tick = function() {
-       var timer,
-               timers = jQuery.timers,
-               i = 0;
-
-       fxNow = jQuery.now();
-
-       for ( ; i < timers.length; i++ ) {
-               timer = timers[ i ];
-               // Checks the timer has not already been removed
-               if ( !timer() && timers[ i ] === timer ) {
-                       timers.splice( i--, 1 );
-               }
-       }
-
-       if ( !timers.length ) {
-               jQuery.fx.stop();
-       }
-       fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
-       if ( timer() && jQuery.timers.push( timer ) ) {
-               jQuery.fx.start();
-       }
-};
-
-jQuery.fx.interval = 13;
-
-jQuery.fx.start = function() {
-       if ( !timerId ) {
-               timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
-       }
-};
-
-jQuery.fx.stop = function() {
-       clearInterval( timerId );
-       timerId = null;
-};
-
-jQuery.fx.speeds = {
-       slow: 600,
-       fast: 200,
-       // Default speed
-       _default: 400
-};
-
-// Back Compat <1.8 extension point
-jQuery.fx.step = {};
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-       jQuery.expr.filters.animated = function( elem ) {
-               return jQuery.grep(jQuery.timers, function( fn ) {
-                       return elem === fn.elem;
-               }).length;
-       };
-}
-jQuery.fn.offset = function( options ) {
-       if ( arguments.length ) {
-               return options === undefined ?
-                       this :
-                       this.each(function( i ) {
-                               jQuery.offset.setOffset( this, options, i );
-                       });
-       }
-
-       var docElem, win,
-               box = { top: 0, left: 0 },
-               elem = this[ 0 ],
-               doc = elem && elem.ownerDocument;
-
-       if ( !doc ) {
-               return;
-       }
-
-       docElem = doc.documentElement;
-
-       // Make sure it's not a disconnected DOM node
-       if ( !jQuery.contains( docElem, elem ) ) {
-               return box;
-       }
-
-       // If we don't have gBCR, just use 0,0 rather than error
-       // BlackBerry 5, iOS 3 (original iPhone)
-       if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
-               box = elem.getBoundingClientRect();
-       }
-       win = getWindow( doc );
-       return {
-               top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
-               left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
-       };
-};
-
-jQuery.offset = {
-
-       setOffset: function( elem, options, i ) {
-               var position = jQuery.css( elem, "position" );
-
-               // set position first, in-case top/left are set even on static elem
-               if ( position === "static" ) {
-                       elem.style.position = "relative";
-               }
-
-               var curElem = jQuery( elem ),
-                       curOffset = curElem.offset(),
-                       curCSSTop = jQuery.css( elem, "top" ),
-                       curCSSLeft = jQuery.css( elem, "left" ),
-                       calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
-                       props = {}, curPosition = {}, curTop, curLeft;
-
-               // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
-               if ( calculatePosition ) {
-                       curPosition = curElem.position();
-                       curTop = curPosition.top;
-                       curLeft = curPosition.left;
-               } else {
-                       curTop = parseFloat( curCSSTop ) || 0;
-                       curLeft = parseFloat( curCSSLeft ) || 0;
-               }
-
-               if ( jQuery.isFunction( options ) ) {
-                       options = options.call( elem, i, curOffset );
-               }
-
-               if ( options.top != null ) {
-                       props.top = ( options.top - curOffset.top ) + curTop;
-               }
-               if ( options.left != null ) {
-                       props.left = ( options.left - curOffset.left ) + curLeft;
-               }
-
-               if ( "using" in options ) {
-                       options.using.call( elem, props );
-               } else {
-                       curElem.css( props );
-               }
-       }
-};
-
-
-jQuery.fn.extend({
-
-       position: function() {
-               if ( !this[ 0 ] ) {
-                       return;
-               }
-
-               var offsetParent, offset,
-                       parentOffset = { top: 0, left: 0 },
-                       elem = this[ 0 ];
-
-               // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
-               if ( jQuery.css( elem, "position" ) === "fixed" ) {
-                       // we assume that getBoundingClientRect is available when computed position is fixed
-                       offset = elem.getBoundingClientRect();
-               } else {
-                       // Get *real* offsetParent
-                       offsetParent = this.offsetParent();
-
-                       // Get correct offsets
-                       offset = this.offset();
-                       if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
-                               parentOffset = offsetParent.offset();
-                       }
-
-                       // Add offsetParent borders
-                       parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
-                       parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
-               }
-
-               // Subtract parent offsets and element margins
-               // note: when an element has margin: auto the offsetLeft and marginLeft
-               // are the same in Safari causing offset.left to incorrectly be 0
-               return {
-                       top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
-                       left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
-               };
-       },
-
-       offsetParent: function() {
-               return this.map(function() {
-                       var offsetParent = this.offsetParent || docElem;
-                       while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
-                               offsetParent = offsetParent.offsetParent;
-                       }
-                       return offsetParent || docElem;
-               });
-       }
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
-       var top = /Y/.test( prop );
-
-       jQuery.fn[ method ] = function( val ) {
-               return jQuery.access( this, function( elem, method, val ) {
-                       var win = getWindow( elem );
-
-                       if ( val === undefined ) {
-                               return win ? (prop in win) ? win[ prop ] :
-                                       win.document.documentElement[ method ] :
-                                       elem[ method ];
-                       }
-
-                       if ( win ) {
-                               win.scrollTo(
-                                       !top ? val : jQuery( win ).scrollLeft(),
-                                       top ? val : jQuery( win ).scrollTop()
-                               );
-
-                       } else {
-                               elem[ method ] = val;
-                       }
-               }, method, val, arguments.length, null );
-       };
-});
-
-function getWindow( elem ) {
-       return jQuery.isWindow( elem ) ?
-               elem :
-               elem.nodeType === 9 ?
-                       elem.defaultView || elem.parentWindow :
-                       false;
-}
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
-       jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
-               // margin is only for outerHeight, outerWidth
-               jQuery.fn[ funcName ] = function( margin, value ) {
-                       var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
-                               extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
-
-                       return jQuery.access( this, function( elem, type, value ) {
-                               var doc;
-
-                               if ( jQuery.isWindow( elem ) ) {
-                                       // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
-                                       // isn't a whole lot we can do. See pull request at this URL for discussion:
-                                       // https://github.com/jquery/jquery/pull/764
-                                       return elem.document.documentElement[ "client" + name ];
-                               }
-
-                               // Get document width or height
-                               if ( elem.nodeType === 9 ) {
-                                       doc = elem.documentElement;
-
-                                       // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
-                                       // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
-                                       return Math.max(
-                                               elem.body[ "scroll" + name ], doc[ "scroll" + name ],
-                                               elem.body[ "offset" + name ], doc[ "offset" + name ],
-                                               doc[ "client" + name ]
-                                       );
-                               }
-
-                               return value === undefined ?
-                                       // Get width or height on the element, requesting but not forcing parseFloat
-                                       jQuery.css( elem, type, extra ) :
-
-                                       // Set width or height on the element
-                                       jQuery.style( elem, type, value, extra );
-                       }, type, chainable ? margin : undefined, chainable, null );
-               };
-       });
-});
-// Limit scope pollution from any deprecated API
-// (function() {
-
-// The number of elements contained in the matched element set
-jQuery.fn.size = function() {
-       return this.length;
-};
-
-jQuery.fn.andSelf = jQuery.fn.addBack;
-
-// })();
-if ( typeof module === "object" && module && typeof module.exports === "object" ) {
-       // Expose jQuery as module.exports in loaders that implement the Node
-       // module pattern (including browserify). Do not create the global, since
-       // the user will be storing it themselves locally, and globals are frowned
-       // upon in the Node module world.
-       module.exports = jQuery;
-} else {
-       // Otherwise expose jQuery to the global object as usual
-       window.jQuery = window.$ = jQuery;
-
-       // Register as a named AMD module, since jQuery can be concatenated with other
-       // files that may use define, but not via a proper concatenation script that
-       // understands anonymous AMD modules. A named AMD is safest and most robust
-       // way to register. Lowercase jquery is used because AMD module names are
-       // derived from file names, and jQuery is normally delivered in a lowercase
-       // file name. Do this after creating the global so that if an AMD module wants
-       // to call noConflict to hide this version of jQuery, it will work.
-       if ( typeof define === "function" && define.amd ) {
-               define( "jquery", [], function () { return jQuery; } );
-       }
-}
-
-})( window );
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/jquery.mobile-1.3.1.js b/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/jquery.mobile-1.3.1.js
deleted file mode 100644 (file)
index 99c9a9f..0000000
+++ /dev/null
@@ -1,11191 +0,0 @@
-/*
-* jQuery Mobile 1.3.1
-* Git HEAD hash: 74b4bec049fd93e4fe40205e6157de16eb64eb46 <> Date: Mon Apr 8 2013 19:41:28 UTC
-* http://jquerymobile.com
-*
-* Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
-* Released under the MIT license.
-* http://jquery.org/license
-*
-*/
-
-
-(function ( root, doc, factory ) {
-       if ( typeof define === "function" && define.amd ) {
-               // AMD. Register as an anonymous module.
-               define( [ "jquery" ], function ( $ ) {
-                       factory( $, root, doc );
-                       return $.mobile;
-               });
-       } else {
-               // Browser globals
-               factory( root.jQuery, root, doc );
-       }
-}( this, document, function ( jQuery, window, document, undefined ) {
-(function( $ ) {
-       $.mobile = {};
-}( jQuery ));
-(function( $, window, undefined ) {
-       var nsNormalizeDict = {};
-
-       // jQuery.mobile configurable options
-       $.mobile = $.extend($.mobile, {
-
-               // Version of the jQuery Mobile Framework
-               version: "1.3.1",
-
-               // Namespace used framework-wide for data-attrs. Default is no namespace
-               ns: "",
-
-               // Define the url parameter used for referencing widget-generated sub-pages.
-               // Translates to to example.html&ui-page=subpageIdentifier
-               // hash segment before &ui-page= is used to make Ajax request
-               subPageUrlKey: "ui-page",
-
-               // Class assigned to page currently in view, and during transitions
-               activePageClass: "ui-page-active",
-
-               // Class used for "active" button state, from CSS framework
-               activeBtnClass: "ui-btn-active",
-
-               // Class used for "focus" form element state, from CSS framework
-               focusClass: "ui-focus",
-
-               // Automatically handle clicks and form submissions through Ajax, when same-domain
-               ajaxEnabled: true,
-
-               // Automatically load and show pages based on location.hash
-               hashListeningEnabled: true,
-
-               // disable to prevent jquery from bothering with links
-               linkBindingEnabled: true,
-
-               // Set default page transition - 'none' for no transitions
-               defaultPageTransition: "fade",
-
-               // Set maximum window width for transitions to apply - 'false' for no limit
-               maxTransitionWidth: false,
-
-               // Minimum scroll distance that will be remembered when returning to a page
-               minScrollBack: 250,
-
-               // DEPRECATED: the following property is no longer in use, but defined until 2.0 to prevent conflicts
-               touchOverflowEnabled: false,
-
-               // Set default dialog transition - 'none' for no transitions
-               defaultDialogTransition: "pop",
-
-               // Error response message - appears when an Ajax page request fails
-               pageLoadErrorMessage: "Error Loading Page",
-
-               // For error messages, which theme does the box uses?
-               pageLoadErrorMessageTheme: "e",
-
-               // replace calls to window.history.back with phonegaps navigation helper
-               // where it is provided on the window object
-               phonegapNavigationEnabled: false,
-
-               //automatically initialize the DOM when it's ready
-               autoInitializePage: true,
-
-               pushStateEnabled: true,
-
-               // allows users to opt in to ignoring content by marking a parent element as
-               // data-ignored
-               ignoreContentEnabled: false,
-
-               // turn of binding to the native orientationchange due to android orientation behavior
-               orientationChangeEnabled: true,
-
-               buttonMarkup: {
-                       hoverDelay: 200
-               },
-
-               // define the window and the document objects
-               window: $( window ),
-               document: $( document ),
-
-               // TODO might be useful upstream in jquery itself ?
-               keyCode: {
-                       ALT: 18,
-                       BACKSPACE: 8,
-                       CAPS_LOCK: 20,
-                       COMMA: 188,
-                       COMMAND: 91,
-                       COMMAND_LEFT: 91, // COMMAND
-                       COMMAND_RIGHT: 93,
-                       CONTROL: 17,
-                       DELETE: 46,
-                       DOWN: 40,
-                       END: 35,
-                       ENTER: 13,
-                       ESCAPE: 27,
-                       HOME: 36,
-                       INSERT: 45,
-                       LEFT: 37,
-                       MENU: 93, // COMMAND_RIGHT
-                       NUMPAD_ADD: 107,
-                       NUMPAD_DECIMAL: 110,
-                       NUMPAD_DIVIDE: 111,
-                       NUMPAD_ENTER: 108,
-                       NUMPAD_MULTIPLY: 106,
-                       NUMPAD_SUBTRACT: 109,
-                       PAGE_DOWN: 34,
-                       PAGE_UP: 33,
-                       PERIOD: 190,
-                       RIGHT: 39,
-                       SHIFT: 16,
-                       SPACE: 32,
-                       TAB: 9,
-                       UP: 38,
-                       WINDOWS: 91 // COMMAND
-               },
-
-               // Place to store various widget extensions
-               behaviors: {},
-
-               // Scroll page vertically: scroll to 0 to hide iOS address bar, or pass a Y value
-               silentScroll: function( ypos ) {
-                       if ( $.type( ypos ) !== "number" ) {
-                               ypos = $.mobile.defaultHomeScroll;
-                       }
-
-                       // prevent scrollstart and scrollstop events
-                       $.event.special.scrollstart.enabled = false;
-
-                       setTimeout( function() {
-                               window.scrollTo( 0, ypos );
-                               $.mobile.document.trigger( "silentscroll", { x: 0, y: ypos });
-                       }, 20 );
-
-                       setTimeout( function() {
-                               $.event.special.scrollstart.enabled = true;
-                       }, 150 );
-               },
-
-               // Expose our cache for testing purposes.
-               nsNormalizeDict: nsNormalizeDict,
-
-               // Take a data attribute property, prepend the namespace
-               // and then camel case the attribute string. Add the result
-               // to our nsNormalizeDict so we don't have to do this again.
-               nsNormalize: function( prop ) {
-                       if ( !prop ) {
-                               return;
-                       }
-
-                       return nsNormalizeDict[ prop ] || ( nsNormalizeDict[ prop ] = $.camelCase( $.mobile.ns + prop ) );
-               },
-
-               // Find the closest parent with a theme class on it. Note that
-               // we are not using $.fn.closest() on purpose here because this
-               // method gets called quite a bit and we need it to be as fast
-               // as possible.
-               getInheritedTheme: function( el, defaultTheme ) {
-                       var e = el[ 0 ],
-                               ltr = "",
-                               re = /ui-(bar|body|overlay)-([a-z])\b/,
-                               c, m;
-
-                       while ( e ) {
-                               c = e.className || "";
-                               if ( c && ( m = re.exec( c ) ) && ( ltr = m[ 2 ] ) ) {
-                                       // We found a parent with a theme class
-                                       // on it so bail from this loop.
-                                       break;
-                               }
-
-                               e = e.parentNode;
-                       }
-
-                       // Return the theme letter we found, if none, return the
-                       // specified default.
-
-                       return ltr || defaultTheme || "a";
-               },
-
-               // TODO the following $ and $.fn extensions can/probably should be moved into jquery.mobile.core.helpers
-               //
-               // Find the closest javascript page element to gather settings data jsperf test
-               // http://jsperf.com/single-complex-selector-vs-many-complex-selectors/edit
-               // possibly naive, but it shows that the parsing overhead for *just* the page selector vs
-               // the page and dialog selector is negligable. This could probably be speed up by
-               // doing a similar parent node traversal to the one found in the inherited theme code above
-               closestPageData: function( $target ) {
-                       return $target
-                               .closest( ':jqmData(role="page"), :jqmData(role="dialog")' )
-                               .data( "mobile-page" );
-               },
-
-               enhanceable: function( $set ) {
-                       return this.haveParents( $set, "enhance" );
-               },
-
-               hijackable: function( $set ) {
-                       return this.haveParents( $set, "ajax" );
-               },
-
-               haveParents: function( $set, attr ) {
-                       if ( !$.mobile.ignoreContentEnabled ) {
-                               return $set;
-                       }
-
-                       var count = $set.length,
-                               $newSet = $(),
-                               e, $element, excluded;
-
-                       for ( var i = 0; i < count; i++ ) {
-                               $element = $set.eq( i );
-                               excluded = false;
-                               e = $set[ i ];
-
-                               while ( e ) {
-                                       var c = e.getAttribute ? e.getAttribute( "data-" + $.mobile.ns + attr ) : "";
-
-                                       if ( c === "false" ) {
-                                               excluded = true;
-                                               break;
-                                       }
-
-                                       e = e.parentNode;
-                               }
-
-                               if ( !excluded ) {
-                                       $newSet = $newSet.add( $element );
-                               }
-                       }
-
-                       return $newSet;
-               },
-
-               getScreenHeight: function() {
-                       // Native innerHeight returns more accurate value for this across platforms,
-                       // jQuery version is here as a normalized fallback for platforms like Symbian
-                       return window.innerHeight || $.mobile.window.height();
-               }
-       }, $.mobile );
-
-       // Mobile version of data and removeData and hasData methods
-       // ensures all data is set and retrieved using jQuery Mobile's data namespace
-       $.fn.jqmData = function( prop, value ) {
-               var result;
-               if ( typeof prop !== "undefined" ) {
-                       if ( prop ) {
-                               prop = $.mobile.nsNormalize( prop );
-                       }
-
-                       // undefined is permitted as an explicit input for the second param
-                       // in this case it returns the value and does not set it to undefined
-                       if( arguments.length < 2 || value === undefined ){
-                               result = this.data( prop );
-                       } else {
-                               result = this.data( prop, value );
-                       }
-               }
-               return result;
-       };
-
-       $.jqmData = function( elem, prop, value ) {
-               var result;
-               if ( typeof prop !== "undefined" ) {
-                       result = $.data( elem, prop ? $.mobile.nsNormalize( prop ) : prop, value );
-               }
-               return result;
-       };
-
-       $.fn.jqmRemoveData = function( prop ) {
-               return this.removeData( $.mobile.nsNormalize( prop ) );
-       };
-
-       $.jqmRemoveData = function( elem, prop ) {
-               return $.removeData( elem, $.mobile.nsNormalize( prop ) );
-       };
-
-       $.fn.removeWithDependents = function() {
-               $.removeWithDependents( this );
-       };
-
-       $.removeWithDependents = function( elem ) {
-               var $elem = $( elem );
-
-               ( $elem.jqmData( 'dependents' ) || $() ).remove();
-               $elem.remove();
-       };
-
-       $.fn.addDependents = function( newDependents ) {
-               $.addDependents( $( this ), newDependents );
-       };
-
-       $.addDependents = function( elem, newDependents ) {
-               var dependents = $( elem ).jqmData( 'dependents' ) || $();
-
-               $( elem ).jqmData( 'dependents', $.merge( dependents, newDependents ) );
-       };
-
-       // note that this helper doesn't attempt to handle the callback
-       // or setting of an html element's text, its only purpose is
-       // to return the html encoded version of the text in all cases. (thus the name)
-       $.fn.getEncodedText = function() {
-               return $( "<div/>" ).text( $( this ).text() ).html();
-       };
-
-       // fluent helper function for the mobile namespaced equivalent
-       $.fn.jqmEnhanceable = function() {
-               return $.mobile.enhanceable( this );
-       };
-
-       $.fn.jqmHijackable = function() {
-               return $.mobile.hijackable( this );
-       };
-
-       // Monkey-patching Sizzle to filter the :jqmData selector
-       var oldFind = $.find,
-               jqmDataRE = /:jqmData\(([^)]*)\)/g;
-
-       $.find = function( selector, context, ret, extra ) {
-               selector = selector.replace( jqmDataRE, "[data-" + ( $.mobile.ns || "" ) + "$1]" );
-
-               return oldFind.call( this, selector, context, ret, extra );
-       };
-
-       $.extend( $.find, oldFind );
-
-       $.find.matches = function( expr, set ) {
-               return $.find( expr, null, null, set );
-       };
-
-       $.find.matchesSelector = function( node, expr ) {
-               return $.find( expr, null, null, [ node ] ).length > 0;
-       };
-})( jQuery, this );
-
-
-/*!
- * jQuery UI Widget v1.10.0pre - 2012-11-13 (ff055a0c353c3c8ce6e5bfa07ad7cb03e8885bc5)
- * http://jqueryui.com
- *
- * Copyright 2010, 2013 jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- *
- * http://api.jqueryui.com/jQuery.widget/
- */
-(function( $, undefined ) {
-
-var uuid = 0,
-       slice = Array.prototype.slice,
-       _cleanData = $.cleanData;
-$.cleanData = function( elems ) {
-       for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-               try {
-                       $( elem ).triggerHandler( "remove" );
-               // http://bugs.jquery.com/ticket/8235
-               } catch( e ) {}
-       }
-       _cleanData( elems );
-};
-
-$.widget = function( name, base, prototype ) {
-       var fullName, existingConstructor, constructor, basePrototype,
-               namespace = name.split( "." )[ 0 ];
-
-       name = name.split( "." )[ 1 ];
-       fullName = namespace + "-" + name;
-
-       if ( !prototype ) {
-               prototype = base;
-               base = $.Widget;
-       }
-
-       // create selector for plugin
-       $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
-               return !!$.data( elem, fullName );
-       };
-
-       $[ namespace ] = $[ namespace ] || {};
-       existingConstructor = $[ namespace ][ name ];
-       constructor = $[ namespace ][ name ] = function( options, element ) {
-               // allow instantiation without "new" keyword
-               if ( !this._createWidget ) {
-                       return new constructor( options, element );
-               }
-
-               // allow instantiation without initializing for simple inheritance
-               // must use "new" keyword (the code above always passes args)
-               if ( arguments.length ) {
-                       this._createWidget( options, element );
-               }
-       };
-       // extend with the existing constructor to carry over any static properties
-       $.extend( constructor, existingConstructor, {
-               version: prototype.version,
-               // copy the object used to create the prototype in case we need to
-               // redefine the widget later
-               _proto: $.extend( {}, prototype ),
-               // track widgets that inherit from this widget in case this widget is
-               // redefined after a widget inherits from it
-               _childConstructors: []
-       });
-
-       basePrototype = new base();
-       // we need to make the options hash a property directly on the new instance
-       // otherwise we'll modify the options hash on the prototype that we're
-       // inheriting from
-       basePrototype.options = $.widget.extend( {}, basePrototype.options );
-       $.each( prototype, function( prop, value ) {
-               if ( $.isFunction( value ) ) {
-                       prototype[ prop ] = (function() {
-                               var _super = function() {
-                                               return base.prototype[ prop ].apply( this, arguments );
-                                       },
-                                       _superApply = function( args ) {
-                                               return base.prototype[ prop ].apply( this, args );
-                                       };
-                               return function() {
-                                       var __super = this._super,
-                                               __superApply = this._superApply,
-                                               returnValue;
-
-                                       this._super = _super;
-                                       this._superApply = _superApply;
-
-                                       returnValue = value.apply( this, arguments );
-
-                                       this._super = __super;
-                                       this._superApply = __superApply;
-
-                                       return returnValue;
-                               };
-                       })();
-               }
-       });
-       constructor.prototype = $.widget.extend( basePrototype, {
-               // TODO: remove support for widgetEventPrefix
-               // always use the name + a colon as the prefix, e.g., draggable:start
-               // don't prefix for widgets that aren't DOM-based
-               widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
-       }, prototype, {
-               constructor: constructor,
-               namespace: namespace,
-               widgetName: name,
-               widgetFullName: fullName
-       });
-
-       // If this widget is being redefined then we need to find all widgets that
-       // are inheriting from it and redefine all of them so that they inherit from
-       // the new version of this widget. We're essentially trying to replace one
-       // level in the prototype chain.
-       if ( existingConstructor ) {
-               $.each( existingConstructor._childConstructors, function( i, child ) {
-                       var childPrototype = child.prototype;
-
-                       // redefine the child widget using the same prototype that was
-                       // originally used, but inherit from the new version of the base
-                       $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
-               });
-               // remove the list of existing child constructors from the old constructor
-               // so the old child constructors can be garbage collected
-               delete existingConstructor._childConstructors;
-       } else {
-               base._childConstructors.push( constructor );
-       }
-
-       $.widget.bridge( name, constructor );
-};
-
-$.widget.extend = function( target ) {
-       var input = slice.call( arguments, 1 ),
-               inputIndex = 0,
-               inputLength = input.length,
-               key,
-               value;
-       for ( ; inputIndex < inputLength; inputIndex++ ) {
-               for ( key in input[ inputIndex ] ) {
-                       value = input[ inputIndex ][ key ];
-                       if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
-                               // Clone objects
-                               if ( $.isPlainObject( value ) ) {
-                                       target[ key ] = $.isPlainObject( target[ key ] ) ?
-                                               $.widget.extend( {}, target[ key ], value ) :
-                                               // Don't extend strings, arrays, etc. with objects
-                                               $.widget.extend( {}, value );
-                               // Copy everything else by reference
-                               } else {
-                                       target[ key ] = value;
-                               }
-                       }
-               }
-       }
-       return target;
-};
-
-$.widget.bridge = function( name, object ) {
-       var fullName = object.prototype.widgetFullName || name;
-       $.fn[ name ] = function( options ) {
-               var isMethodCall = typeof options === "string",
-                       args = slice.call( arguments, 1 ),
-                       returnValue = this;
-
-               // allow multiple hashes to be passed on init
-               options = !isMethodCall && args.length ?
-                       $.widget.extend.apply( null, [ options ].concat(args) ) :
-                       options;
-
-               if ( isMethodCall ) {
-                       this.each(function() {
-                               var methodValue,
-                                       instance = $.data( this, fullName );
-                               if ( !instance ) {
-                                       return $.error( "cannot call methods on " + name + " prior to initialization; " +
-                                               "attempted to call method '" + options + "'" );
-                               }
-                               if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
-                                       return $.error( "no such method '" + options + "' for " + name + " widget instance" );
-                               }
-                               methodValue = instance[ options ].apply( instance, args );
-                               if ( methodValue !== instance && methodValue !== undefined ) {
-                                       returnValue = methodValue && methodValue.jquery ?
-                                               returnValue.pushStack( methodValue.get() ) :
-                                               methodValue;
-                                       return false;
-                               }
-                       });
-               } else {
-                       this.each(function() {
-                               var instance = $.data( this, fullName );
-                               if ( instance ) {
-                                       instance.option( options || {} )._init();
-                               } else {
-                                       $.data( this, fullName, new object( options, this ) );
-                               }
-                       });
-               }
-
-               return returnValue;
-       };
-};
-
-$.Widget = function( /* options, element */ ) {};
-$.Widget._childConstructors = [];
-
-$.Widget.prototype = {
-       widgetName: "widget",
-       widgetEventPrefix: "",
-       defaultElement: "<div>",
-       options: {
-               disabled: false,
-
-               // callbacks
-               create: null
-       },
-       _createWidget: function( options, element ) {
-               element = $( element || this.defaultElement || this )[ 0 ];
-               this.element = $( element );
-               this.uuid = uuid++;
-               this.eventNamespace = "." + this.widgetName + this.uuid;
-               this.options = $.widget.extend( {},
-                       this.options,
-                       this._getCreateOptions(),
-                       options );
-
-               this.bindings = $();
-               this.hoverable = $();
-               this.focusable = $();
-
-               if ( element !== this ) {
-                       $.data( element, this.widgetFullName, this );
-                       this._on( true, this.element, {
-                               remove: function( event ) {
-                                       if ( event.target === element ) {
-                                               this.destroy();
-                                       }
-                               }
-                       });
-                       this.document = $( element.style ?
-                               // element within the document
-                               element.ownerDocument :
-                               // element is window or document
-                               element.document || element );
-                       this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
-               }
-
-               this._create();
-               this._trigger( "create", null, this._getCreateEventData() );
-               this._init();
-       },
-       _getCreateOptions: $.noop,
-       _getCreateEventData: $.noop,
-       _create: $.noop,
-       _init: $.noop,
-
-       destroy: function() {
-               this._destroy();
-               // we can probably remove the unbind calls in 2.0
-               // all event bindings should go through this._on()
-               this.element
-                       .unbind( this.eventNamespace )
-                       // 1.9 BC for #7810
-                       // TODO remove dual storage
-                       .removeData( this.widgetName )
-                       .removeData( this.widgetFullName )
-                       // support: jquery <1.6.3
-                       // http://bugs.jquery.com/ticket/9413
-                       .removeData( $.camelCase( this.widgetFullName ) );
-               this.widget()
-                       .unbind( this.eventNamespace )
-                       .removeAttr( "aria-disabled" )
-                       .removeClass(
-                               this.widgetFullName + "-disabled " +
-                               "ui-state-disabled" );
-
-               // clean up events and states
-               this.bindings.unbind( this.eventNamespace );
-               this.hoverable.removeClass( "ui-state-hover" );
-               this.focusable.removeClass( "ui-state-focus" );
-       },
-       _destroy: $.noop,
-
-       widget: function() {
-               return this.element;
-       },
-
-       option: function( key, value ) {
-               var options = key,
-                       parts,
-                       curOption,
-                       i;
-
-               if ( arguments.length === 0 ) {
-                       // don't return a reference to the internal hash
-                       return $.widget.extend( {}, this.options );
-               }
-
-               if ( typeof key === "string" ) {
-                       // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
-                       options = {};
-                       parts = key.split( "." );
-                       key = parts.shift();
-                       if ( parts.length ) {
-                               curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
-                               for ( i = 0; i < parts.length - 1; i++ ) {
-                                       curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
-                                       curOption = curOption[ parts[ i ] ];
-                               }
-                               key = parts.pop();
-                               if ( value === undefined ) {
-                                       return curOption[ key ] === undefined ? null : curOption[ key ];
-                               }
-                               curOption[ key ] = value;
-                       } else {
-                               if ( value === undefined ) {
-                                       return this.options[ key ] === undefined ? null : this.options[ key ];
-                               }
-                               options[ key ] = value;
-                       }
-               }
-
-               this._setOptions( options );
-
-               return this;
-       },
-       _setOptions: function( options ) {
-               var key;
-
-               for ( key in options ) {
-                       this._setOption( key, options[ key ] );
-               }
-
-               return this;
-       },
-       _setOption: function( key, value ) {
-               this.options[ key ] = value;
-
-               if ( key === "disabled" ) {
-                       this.widget()
-                               .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
-                               .attr( "aria-disabled", value );
-                       this.hoverable.removeClass( "ui-state-hover" );
-                       this.focusable.removeClass( "ui-state-focus" );
-               }
-
-               return this;
-       },
-
-       enable: function() {
-               return this._setOption( "disabled", false );
-       },
-       disable: function() {
-               return this._setOption( "disabled", true );
-       },
-
-       _on: function( suppressDisabledCheck, element, handlers ) {
-               var delegateElement,
-                       instance = this;
-
-               // no suppressDisabledCheck flag, shuffle arguments
-               if ( typeof suppressDisabledCheck !== "boolean" ) {
-                       handlers = element;
-                       element = suppressDisabledCheck;
-                       suppressDisabledCheck = false;
-               }
-
-               // no element argument, shuffle and use this.element
-               if ( !handlers ) {
-                       handlers = element;
-                       element = this.element;
-                       delegateElement = this.widget();
-               } else {
-                       // accept selectors, DOM elements
-                       element = delegateElement = $( element );
-                       this.bindings = this.bindings.add( element );
-               }
-
-               $.each( handlers, function( event, handler ) {
-                       function handlerProxy() {
-                               // allow widgets to customize the disabled handling
-                               // - disabled as an array instead of boolean
-                               // - disabled class as method for disabling individual parts
-                               if ( !suppressDisabledCheck &&
-                                               ( instance.options.disabled === true ||
-                                                       $( this ).hasClass( "ui-state-disabled" ) ) ) {
-                                       return;
-                               }
-                               return ( typeof handler === "string" ? instance[ handler ] : handler )
-                                       .apply( instance, arguments );
-                       }
-
-                       // copy the guid so direct unbinding works
-                       if ( typeof handler !== "string" ) {
-                               handlerProxy.guid = handler.guid =
-                                       handler.guid || handlerProxy.guid || $.guid++;
-                       }
-
-                       var match = event.match( /^(\w+)\s*(.*)$/ ),
-                               eventName = match[1] + instance.eventNamespace,
-                               selector = match[2];
-                       if ( selector ) {
-                               delegateElement.delegate( selector, eventName, handlerProxy );
-                       } else {
-                               element.bind( eventName, handlerProxy );
-                       }
-               });
-       },
-
-       _off: function( element, eventName ) {
-               eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
-               element.unbind( eventName ).undelegate( eventName );
-       },
-
-       _delay: function( handler, delay ) {
-               function handlerProxy() {
-                       return ( typeof handler === "string" ? instance[ handler ] : handler )
-                               .apply( instance, arguments );
-               }
-               var instance = this;
-               return setTimeout( handlerProxy, delay || 0 );
-       },
-
-       _hoverable: function( element ) {
-               this.hoverable = this.hoverable.add( element );
-               this._on( element, {
-                       mouseenter: function( event ) {
-                               $( event.currentTarget ).addClass( "ui-state-hover" );
-                       },
-                       mouseleave: function( event ) {
-                               $( event.currentTarget ).removeClass( "ui-state-hover" );
-                       }
-               });
-       },
-
-       _focusable: function( element ) {
-               this.focusable = this.focusable.add( element );
-               this._on( element, {
-                       focusin: function( event ) {
-                               $( event.currentTarget ).addClass( "ui-state-focus" );
-                       },
-                       focusout: function( event ) {
-                               $( event.currentTarget ).removeClass( "ui-state-focus" );
-                       }
-               });
-       },
-
-       _trigger: function( type, event, data ) {
-               var prop, orig,
-                       callback = this.options[ type ];
-
-               data = data || {};
-               event = $.Event( event );
-               event.type = ( type === this.widgetEventPrefix ?
-                       type :
-                       this.widgetEventPrefix + type ).toLowerCase();
-               // the original event may come from any element
-               // so we need to reset the target on the new event
-               event.target = this.element[ 0 ];
-
-               // copy original event properties over to the new event
-               orig = event.originalEvent;
-               if ( orig ) {
-                       for ( prop in orig ) {
-                               if ( !( prop in event ) ) {
-                                       event[ prop ] = orig[ prop ];
-                               }
-                       }
-               }
-
-               this.element.trigger( event, data );
-               return !( $.isFunction( callback ) &&
-                       callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
-                       event.isDefaultPrevented() );
-       }
-};
-
-$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
-       $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
-               if ( typeof options === "string" ) {
-                       options = { effect: options };
-               }
-               var hasOptions,
-                       effectName = !options ?
-                               method :
-                               options === true || typeof options === "number" ?
-                                       defaultEffect :
-                                       options.effect || defaultEffect;
-               options = options || {};
-               if ( typeof options === "number" ) {
-                       options = { duration: options };
-               }
-               hasOptions = !$.isEmptyObject( options );
-               options.complete = callback;
-               if ( options.delay ) {
-                       element.delay( options.delay );
-               }
-               if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
-                       element[ method ]( options );
-               } else if ( effectName !== method && element[ effectName ] ) {
-                       element[ effectName ]( options.duration, options.easing, callback );
-               } else {
-                       element.queue(function( next ) {
-                               $( this )[ method ]();
-                               if ( callback ) {
-                                       callback.call( element[ 0 ] );
-                               }
-                               next();
-                       });
-               }
-       };
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-$.widget( "mobile.widget", {
-       // decorate the parent _createWidget to trigger `widgetinit` for users
-       // who wish to do post post `widgetcreate` alterations/additions
-       //
-       // TODO create a pull request for jquery ui to trigger this event
-       // in the original _createWidget
-       _createWidget: function() {
-               $.Widget.prototype._createWidget.apply( this, arguments );
-               this._trigger( 'init' );
-       },
-
-       _getCreateOptions: function() {
-
-               var elem = this.element,
-                       options = {};
-
-               $.each( this.options, function( option ) {
-
-                       var value = elem.jqmData( option.replace( /[A-Z]/g, function( c ) {
-                                                       return "-" + c.toLowerCase();
-                                               })
-                                       );
-
-                       if ( value !== undefined ) {
-                               options[ option ] = value;
-                       }
-               });
-
-               return options;
-       },
-
-       enhanceWithin: function( target, useKeepNative ) {
-               this.enhance( $( this.options.initSelector, $( target )), useKeepNative );
-       },
-
-       enhance: function( targets, useKeepNative ) {
-               var page, keepNative, $widgetElements = $( targets ), self = this;
-
-               // if ignoreContentEnabled is set to true the framework should
-               // only enhance the selected elements when they do NOT have a
-               // parent with the data-namespace-ignore attribute
-               $widgetElements = $.mobile.enhanceable( $widgetElements );
-
-               if ( useKeepNative && $widgetElements.length ) {
-                       // TODO remove dependency on the page widget for the keepNative.
-                       // Currently the keepNative value is defined on the page prototype so
-                       // the method is as well
-                       page = $.mobile.closestPageData( $widgetElements );
-                       keepNative = ( page && page.keepNativeSelector()) || "";
-
-                       $widgetElements = $widgetElements.not( keepNative );
-               }
-
-               $widgetElements[ this.widgetName ]();
-       },
-
-       raise: function( msg ) {
-               throw "Widget [" + this.widgetName + "]: " + msg;
-       }
-});
-
-})( jQuery );
-
-
-(function( $, window ) {
-       // DEPRECATED
-       // NOTE global mobile object settings
-       $.extend( $.mobile, {
-               // DEPRECATED Should the text be visble in the loading message?
-               loadingMessageTextVisible: undefined,
-
-               // DEPRECATED When the text is visible, what theme does the loading box use?
-               loadingMessageTheme: undefined,
-
-               // DEPRECATED default message setting
-               loadingMessage: undefined,
-
-               // DEPRECATED
-               // Turn on/off page loading message. Theme doubles as an object argument
-               // with the following shape: { theme: '', text: '', html: '', textVisible: '' }
-               // NOTE that the $.mobile.loading* settings and params past the first are deprecated
-               showPageLoadingMsg: function( theme, msgText, textonly ) {
-                       $.mobile.loading( 'show', theme, msgText, textonly );
-               },
-
-               // DEPRECATED
-               hidePageLoadingMsg: function() {
-                       $.mobile.loading( 'hide' );
-               },
-
-               loading: function() {
-                       this.loaderWidget.loader.apply( this.loaderWidget, arguments );
-               }
-       });
-
-       // TODO move loader class down into the widget settings
-       var loaderClass = "ui-loader", $html = $( "html" ), $window = $.mobile.window;
-
-       $.widget( "mobile.loader", {
-               // NOTE if the global config settings are defined they will override these
-               //      options
-               options: {
-                       // the theme for the loading message
-                       theme: "a",
-
-                       // whether the text in the loading message is shown
-                       textVisible: false,
-
-                       // custom html for the inner content of the loading message
-                       html: "",
-
-                       // the text to be displayed when the popup is shown
-                       text: "loading"
-               },
-
-               defaultHtml: "<div class='" + loaderClass + "'>" +
-                       "<span class='ui-icon ui-icon-loading'></span>" +
-                       "<h1></h1>" +
-                       "</div>",
-
-               // For non-fixed supportin browsers. Position at y center (if scrollTop supported), above the activeBtn (if defined), or just 100px from top
-               fakeFixLoader: function() {
-                       var activeBtn = $( "." + $.mobile.activeBtnClass ).first();
-
-                       this.element
-                               .css({
-                                       top: $.support.scrollTop && $window.scrollTop() + $window.height() / 2 ||
-                                               activeBtn.length && activeBtn.offset().top || 100
-                               });
-               },
-
-               // check position of loader to see if it appears to be "fixed" to center
-               // if not, use abs positioning
-               checkLoaderPosition: function() {
-                       var offset = this.element.offset(),
-                               scrollTop = $window.scrollTop(),
-                               screenHeight = $.mobile.getScreenHeight();
-
-                       if ( offset.top < scrollTop || ( offset.top - scrollTop ) > screenHeight ) {
-                               this.element.addClass( "ui-loader-fakefix" );
-                               this.fakeFixLoader();
-                               $window
-                                       .unbind( "scroll", this.checkLoaderPosition )
-                                       .bind( "scroll", $.proxy( this.fakeFixLoader, this ) );
-                       }
-               },
-
-               resetHtml: function() {
-                       this.element.html( $( this.defaultHtml ).html() );
-               },
-
-               // Turn on/off page loading message. Theme doubles as an object argument
-               // with the following shape: { theme: '', text: '', html: '', textVisible: '' }
-               // NOTE that the $.mobile.loading* settings and params past the first are deprecated
-               // TODO sweet jesus we need to break some of this out
-               show: function( theme, msgText, textonly ) {
-                       var textVisible, message, $header, loadSettings;
-
-                       this.resetHtml();
-
-                       // use the prototype options so that people can set them globally at
-                       // mobile init. Consistency, it's what's for dinner
-                       if ( $.type(theme) === "object" ) {
-                               loadSettings = $.extend( {}, this.options, theme );
-
-                               // prefer object property from the param then the old theme setting
-                               theme = loadSettings.theme || $.mobile.loadingMessageTheme;
-                       } else {
-                               loadSettings = this.options;
-
-                               // here we prefer the them value passed as a string argument, then
-                               // we prefer the global option because we can't use undefined default
-                               // prototype options, then the prototype option
-                               theme = theme || $.mobile.loadingMessageTheme || loadSettings.theme;
-                       }
-
-                       // set the message text, prefer the param, then the settings object
-                       // then loading message
-                       message = msgText || $.mobile.loadingMessage || loadSettings.text;
-
-                       // prepare the dom
-                       $html.addClass( "ui-loading" );
-
-                       if ( $.mobile.loadingMessage !== false || loadSettings.html ) {
-                               // boolean values require a bit more work :P, supports object properties
-                               // and old settings
-                               if ( $.mobile.loadingMessageTextVisible !== undefined ) {
-                                       textVisible = $.mobile.loadingMessageTextVisible;
-                               } else {
-                                       textVisible = loadSettings.textVisible;
-                               }
-
-                               // add the proper css given the options (theme, text, etc)
-                               // Force text visibility if the second argument was supplied, or
-                               // if the text was explicitly set in the object args
-                               this.element.attr("class", loaderClass +
-                                       " ui-corner-all ui-body-" + theme +
-                                       " ui-loader-" + ( textVisible || msgText || theme.text ? "verbose" : "default" ) +
-                                       ( loadSettings.textonly || textonly ? " ui-loader-textonly" : "" ) );
-
-                               // TODO verify that jquery.fn.html is ok to use in both cases here
-                               //      this might be overly defensive in preventing unknowing xss
-                               // if the html attribute is defined on the loading settings, use that
-                               // otherwise use the fallbacks from above
-                               if ( loadSettings.html ) {
-                                       this.element.html( loadSettings.html );
-                               } else {
-                                       this.element.find( "h1" ).text( message );
-                               }
-
-                               // attach the loader to the DOM
-                               this.element.appendTo( $.mobile.pageContainer );
-
-                               // check that the loader is visible
-                               this.checkLoaderPosition();
-
-                               // on scroll check the loader position
-                               $window.bind( "scroll", $.proxy( this.checkLoaderPosition, this ) );
-                       }
-               },
-
-               hide: function() {
-                       $html.removeClass( "ui-loading" );
-
-                       if ( $.mobile.loadingMessage ) {
-                               this.element.removeClass( "ui-loader-fakefix" );
-                       }
-
-                       $.mobile.window.unbind( "scroll", this.fakeFixLoader );
-                       $.mobile.window.unbind( "scroll", this.checkLoaderPosition );
-               }
-       });
-
-       $window.bind( 'pagecontainercreate', function() {
-               $.mobile.loaderWidget = $.mobile.loaderWidget || $( $.mobile.loader.prototype.defaultHtml ).loader();
-       });
-})(jQuery, this);
-
-
-// Script: jQuery hashchange event
-// 
-// *Version: 1.3, Last updated: 7/21/2010*
-// 
-// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/
-// GitHub       - http://github.com/cowboy/jquery-hashchange/
-// Source       - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js
-// (Minified)   - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped)
-// 
-// About: License
-// 
-// Copyright (c) 2010 "Cowboy" Ben Alman,
-// Dual licensed under the MIT and GPL licenses.
-// http://benalman.com/about/license/
-// 
-// About: Examples
-// 
-// These working examples, complete with fully commented code, illustrate a few
-// ways in which this plugin can be used.
-// 
-// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/
-// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/
-// 
-// About: Support and Testing
-// 
-// Information about what version or versions of jQuery this plugin has been
-// tested with, what browsers it has been tested in, and where the unit tests
-// reside (so you can test it yourself).
-// 
-// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2
-// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5,
-//                   Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5.
-// Unit Tests      - http://benalman.com/code/projects/jquery-hashchange/unit/
-// 
-// About: Known issues
-// 
-// While this jQuery hashchange event implementation is quite stable and
-// robust, there are a few unfortunate browser bugs surrounding expected
-// hashchange event-based behaviors, independent of any JavaScript
-// window.onhashchange abstraction. See the following examples for more
-// information:
-// 
-// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/
-// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/
-// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/
-// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/
-// 
-// Also note that should a browser natively support the window.onhashchange 
-// event, but not report that it does, the fallback polling loop will be used.
-// 
-// About: Release History
-// 
-// 1.3   - (7/21/2010) Reorganized IE6/7 Iframe code to make it more
-//         "removable" for mobile-only development. Added IE6/7 document.title
-//         support. Attempted to make Iframe as hidden as possible by using
-//         techniques from http://www.paciellogroup.com/blog/?p=604. Added 
-//         support for the "shortcut" format $(window).hashchange( fn ) and
-//         $(window).hashchange() like jQuery provides for built-in events.
-//         Renamed jQuery.hashchangeDelay to <jQuery.fn.hashchange.delay> and
-//         lowered its default value to 50. Added <jQuery.fn.hashchange.domain>
-//         and <jQuery.fn.hashchange.src> properties plus document-domain.html
-//         file to address access denied issues when setting document.domain in
-//         IE6/7.
-// 1.2   - (2/11/2010) Fixed a bug where coming back to a page using this plugin
-//         from a page on another domain would cause an error in Safari 4. Also,
-//         IE6/7 Iframe is now inserted after the body (this actually works),
-//         which prevents the page from scrolling when the event is first bound.
-//         Event can also now be bound before DOM ready, but it won't be usable
-//         before then in IE6/7.
-// 1.1   - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug
-//         where browser version is incorrectly reported as 8.0, despite
-//         inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag.
-// 1.0   - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special
-//         window.onhashchange functionality into a separate plugin for users
-//         who want just the basic event & back button support, without all the
-//         extra awesomeness that BBQ provides. This plugin will be included as
-//         part of jQuery BBQ, but also be available separately.
-
-(function( $, window, undefined ) {
-  // Reused string.
-  var str_hashchange = 'hashchange',
-    
-    // Method / object references.
-    doc = document,
-    fake_onhashchange,
-    special = $.event.special,
-    
-    // Does the browser support window.onhashchange? Note that IE8 running in
-    // IE7 compatibility mode reports true for 'onhashchange' in window, even
-    // though the event isn't supported, so also test document.documentMode.
-    doc_mode = doc.documentMode,
-    supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 );
-  
-  // Get location.hash (or what you'd expect location.hash to be) sans any
-  // leading #. Thanks for making this necessary, Firefox!
-  function get_fragment( url ) {
-    url = url || location.href;
-    return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' );
-  };
-  
-  // Method: jQuery.fn.hashchange
-  // 
-  // Bind a handler to the window.onhashchange event or trigger all bound
-  // window.onhashchange event handlers. This behavior is consistent with
-  // jQuery's built-in event handlers.
-  // 
-  // Usage:
-  // 
-  // > jQuery(window).hashchange( [ handler ] );
-  // 
-  // Arguments:
-  // 
-  //  handler - (Function) Optional handler to be bound to the hashchange
-  //    event. This is a "shortcut" for the more verbose form:
-  //    jQuery(window).bind( 'hashchange', handler ). If handler is omitted,
-  //    all bound window.onhashchange event handlers will be triggered. This
-  //    is a shortcut for the more verbose
-  //    jQuery(window).trigger( 'hashchange' ). These forms are described in
-  //    the <hashchange event> section.
-  // 
-  // Returns:
-  // 
-  //  (jQuery) The initial jQuery collection of elements.
-  
-  // Allow the "shortcut" format $(elem).hashchange( fn ) for binding and
-  // $(elem).hashchange() for triggering, like jQuery does for built-in events.
-  $.fn[ str_hashchange ] = function( fn ) {
-    return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange );
-  };
-  
-  // Property: jQuery.fn.hashchange.delay
-  // 
-  // The numeric interval (in milliseconds) at which the <hashchange event>
-  // polling loop executes. Defaults to 50.
-  
-  // Property: jQuery.fn.hashchange.domain
-  // 
-  // If you're setting document.domain in your JavaScript, and you want hash
-  // history to work in IE6/7, not only must this property be set, but you must
-  // also set document.domain BEFORE jQuery is loaded into the page. This
-  // property is only applicable if you are supporting IE6/7 (or IE8 operating
-  // in "IE7 compatibility" mode).
-  // 
-  // In addition, the <jQuery.fn.hashchange.src> property must be set to the
-  // path of the included "document-domain.html" file, which can be renamed or
-  // modified if necessary (note that the document.domain specified must be the
-  // same in both your main JavaScript as well as in this file).
-  // 
-  // Usage:
-  // 
-  // jQuery.fn.hashchange.domain = document.domain;
-  
-  // Property: jQuery.fn.hashchange.src
-  // 
-  // If, for some reason, you need to specify an Iframe src file (for example,
-  // when setting document.domain as in <jQuery.fn.hashchange.domain>), you can
-  // do so using this property. Note that when using this property, history
-  // won't be recorded in IE6/7 until the Iframe src file loads. This property
-  // is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7
-  // compatibility" mode).
-  // 
-  // Usage:
-  // 
-  // jQuery.fn.hashchange.src = 'path/to/file.html';
-  
-  $.fn[ str_hashchange ].delay = 50;
-  /*
-  $.fn[ str_hashchange ].domain = null;
-  $.fn[ str_hashchange ].src = null;
-  */
-  
-  // Event: hashchange event
-  // 
-  // Fired when location.hash changes. In browsers that support it, the native
-  // HTML5 window.onhashchange event is used, otherwise a polling loop is
-  // initialized, running every <jQuery.fn.hashchange.delay> milliseconds to
-  // see if the hash has changed. In IE6/7 (and IE8 operating in "IE7
-  // compatibility" mode), a hidden Iframe is created to allow the back button
-  // and hash-based history to work.
-  // 
-  // Usage as described in <jQuery.fn.hashchange>:
-  // 
-  // > // Bind an event handler.
-  // > jQuery(window).hashchange( function(e) {
-  // >   var hash = location.hash;
-  // >   ...
-  // > });
-  // > 
-  // > // Manually trigger the event handler.
-  // > jQuery(window).hashchange();
-  // 
-  // A more verbose usage that allows for event namespacing:
-  // 
-  // > // Bind an event handler.
-  // > jQuery(window).bind( 'hashchange', function(e) {
-  // >   var hash = location.hash;
-  // >   ...
-  // > });
-  // > 
-  // > // Manually trigger the event handler.
-  // > jQuery(window).trigger( 'hashchange' );
-  // 
-  // Additional Notes:
-  // 
-  // * The polling loop and Iframe are not created until at least one handler
-  //   is actually bound to the 'hashchange' event.
-  // * If you need the bound handler(s) to execute immediately, in cases where
-  //   a location.hash exists on page load, via bookmark or page refresh for
-  //   example, use jQuery(window).hashchange() or the more verbose 
-  //   jQuery(window).trigger( 'hashchange' ).
-  // * The event can be bound before DOM ready, but since it won't be usable
-  //   before then in IE6/7 (due to the necessary Iframe), recommended usage is
-  //   to bind it inside a DOM ready handler.
-  
-  // Override existing $.event.special.hashchange methods (allowing this plugin
-  // to be defined after jQuery BBQ in BBQ's source code).
-  special[ str_hashchange ] = $.extend( special[ str_hashchange ], {
-    
-    // Called only when the first 'hashchange' event is bound to window.
-    setup: function() {
-      // If window.onhashchange is supported natively, there's nothing to do..
-      if ( supports_onhashchange ) { return false; }
-      
-      // Otherwise, we need to create our own. And we don't want to call this
-      // until the user binds to the event, just in case they never do, since it
-      // will create a polling loop and possibly even a hidden Iframe.
-      $( fake_onhashchange.start );
-    },
-    
-    // Called only when the last 'hashchange' event is unbound from window.
-    teardown: function() {
-      // If window.onhashchange is supported natively, there's nothing to do..
-      if ( supports_onhashchange ) { return false; }
-      
-      // Otherwise, we need to stop ours (if possible).
-      $( fake_onhashchange.stop );
-    }
-    
-  });
-  
-  // fake_onhashchange does all the work of triggering the window.onhashchange
-  // event for browsers that don't natively support it, including creating a
-  // polling loop to watch for hash changes and in IE 6/7 creating a hidden
-  // Iframe to enable back and forward.
-  fake_onhashchange = (function() {
-    var self = {},
-      timeout_id,
-      
-      // Remember the initial hash so it doesn't get triggered immediately.
-      last_hash = get_fragment(),
-      
-      fn_retval = function( val ) { return val; },
-      history_set = fn_retval,
-      history_get = fn_retval;
-    
-    // Start the polling loop.
-    self.start = function() {
-      timeout_id || poll();
-    };
-    
-    // Stop the polling loop.
-    self.stop = function() {
-      timeout_id && clearTimeout( timeout_id );
-      timeout_id = undefined;
-    };
-    
-    // This polling loop checks every $.fn.hashchange.delay milliseconds to see
-    // if location.hash has changed, and triggers the 'hashchange' event on
-    // window when necessary.
-    function poll() {
-      var hash = get_fragment(),
-        history_hash = history_get( last_hash );
-      
-      if ( hash !== last_hash ) {
-        history_set( last_hash = hash, history_hash );
-        
-        $(window).trigger( str_hashchange );
-        
-      } else if ( history_hash !== last_hash ) {
-        location.href = location.href.replace( /#.*/, '' ) + history_hash;
-      }
-      
-      timeout_id = setTimeout( poll, $.fn[ str_hashchange ].delay );
-    };
-    
-    // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
-    // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv
-    // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
-    window.attachEvent && !window.addEventListener && !supports_onhashchange && (function() {
-      // Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8
-      // when running in "IE7 compatibility" mode.
-      
-      var iframe,
-        iframe_src;
-      
-      // When the event is bound and polling starts in IE 6/7, create a hidden
-      // Iframe for history handling.
-      self.start = function() {
-        if ( !iframe ) {
-          iframe_src = $.fn[ str_hashchange ].src;
-          iframe_src = iframe_src && iframe_src + get_fragment();
-          
-          // Create hidden Iframe. Attempt to make Iframe as hidden as possible
-          // by using techniques from http://www.paciellogroup.com/blog/?p=604.
-          iframe = $('<iframe tabindex="-1" title="empty"/>').hide()
-            
-            // When Iframe has completely loaded, initialize the history and
-            // start polling.
-            .one( 'load', function() {
-              iframe_src || history_set( get_fragment() );
-              poll();
-            })
-            
-            // Load Iframe src if specified, otherwise nothing.
-            .attr( 'src', iframe_src || 'javascript:0' )
-            
-            // Append Iframe after the end of the body to prevent unnecessary
-            // initial page scrolling (yes, this works).
-            .insertAfter( 'body' )[0].contentWindow;
-          
-          // Whenever `document.title` changes, update the Iframe's title to
-          // prettify the back/next history menu entries. Since IE sometimes
-          // errors with "Unspecified error" the very first time this is set
-          // (yes, very useful) wrap this with a try/catch block.
-          doc.onpropertychange = function() {
-            try {
-              if ( event.propertyName === 'title' ) {
-                iframe.document.title = doc.title;
-              }
-            } catch(e) {}
-          };
-          
-        }
-      };
-      
-      // Override the "stop" method since an IE6/7 Iframe was created. Even
-      // if there are no longer any bound event handlers, the polling loop
-      // is still necessary for back/next to work at all!
-      self.stop = fn_retval;
-      
-      // Get history by looking at the hidden Iframe's location.hash.
-      history_get = function() {
-        return get_fragment( iframe.location.href );
-      };
-      
-      // Set a new history item by opening and then closing the Iframe
-      // document, *then* setting its location.hash. If document.domain has
-      // been set, update that as well.
-      history_set = function( hash, history_hash ) {
-        var iframe_doc = iframe.document,
-          domain = $.fn[ str_hashchange ].domain;
-        
-        if ( hash !== history_hash ) {
-          // Update Iframe with any initial `document.title` that might be set.
-          iframe_doc.title = doc.title;
-          
-          // Opening the Iframe's document after it has been closed is what
-          // actually adds a history entry.
-          iframe_doc.open();
-          
-          // Set document.domain for the Iframe document as well, if necessary.
-          domain && iframe_doc.write( '<script>document.domain="' + domain + '"</script>' );
-          
-          iframe_doc.close();
-          
-          // Update the Iframe's hash, for great justice.
-          iframe.location.hash = hash;
-        }
-      };
-      
-    })();
-    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-    // ^^^^^^^^^^^^^^^^^^^ REMOVE IF NOT SUPPORTING IE6/7/8 ^^^^^^^^^^^^^^^^^^^
-    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-    
-    return self;
-  })();
-  
-})(jQuery,this);
-
-(function( $, undefined ) {
-
-       /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */
-       window.matchMedia = window.matchMedia || (function( doc, undefined ) {
-
-               
-
-               var bool,
-                       docElem = doc.documentElement,
-                       refNode = docElem.firstElementChild || docElem.firstChild,
-                       // fakeBody required for <FF4 when executed in <head>
-                       fakeBody = doc.createElement( "body" ),
-                       div = doc.createElement( "div" );
-
-               div.id = "mq-test-1";
-               div.style.cssText = "position:absolute;top:-100em";
-               fakeBody.style.background = "none";
-               fakeBody.appendChild(div);
-
-               return function(q){
-
-                       div.innerHTML = "&shy;<style media=\"" + q + "\"> #mq-test-1 { width: 42px; }</style>";
-
-                       docElem.insertBefore( fakeBody, refNode );
-                       bool = div.offsetWidth === 42;
-                       docElem.removeChild( fakeBody );
-
-                       return {
-                               matches: bool,
-                               media: q
-                       };
-
-               };
-
-       }( document ));
-
-       // $.mobile.media uses matchMedia to return a boolean.
-       $.mobile.media = function( q ) {
-               return window.matchMedia( q ).matches;
-       };
-
-})(jQuery);
-
-       (function( $, undefined ) {
-               var support = {
-                       touch: "ontouchend" in document
-               };
-
-               $.mobile.support = $.mobile.support || {};
-               $.extend( $.support, support );
-               $.extend( $.mobile.support, support );
-       }( jQuery ));
-
-       (function( $, undefined ) {
-               $.extend( $.support, {
-                       orientation: "orientation" in window && "onorientationchange" in window
-               });
-       }( jQuery ));
-
-(function( $, undefined ) {
-
-// thx Modernizr
-function propExists( prop ) {
-       var uc_prop = prop.charAt( 0 ).toUpperCase() + prop.substr( 1 ),
-               props = ( prop + " " + vendors.join( uc_prop + " " ) + uc_prop ).split( " " );
-
-       for ( var v in props ) {
-               if ( fbCSS[ props[ v ] ] !== undefined ) {
-                       return true;
-               }
-       }
-}
-
-var fakeBody = $( "<body>" ).prependTo( "html" ),
-       fbCSS = fakeBody[ 0 ].style,
-       vendors = [ "Webkit", "Moz", "O" ],
-       webos = "palmGetResource" in window, //only used to rule out scrollTop
-       opera = window.opera,
-       operamini = window.operamini && ({}).toString.call( window.operamini ) === "[object OperaMini]",
-       bb = window.blackberry && !propExists( "-webkit-transform" ); //only used to rule out box shadow, as it's filled opaque on BB 5 and lower
-
-
-function validStyle( prop, value, check_vend ) {
-       var div = document.createElement( 'div' ),
-               uc = function( txt ) {
-                       return txt.charAt( 0 ).toUpperCase() + txt.substr( 1 );
-               },
-               vend_pref = function( vend ) {
-                       if( vend === "" ) {
-                               return "";
-                       } else {
-                               return  "-" + vend.charAt( 0 ).toLowerCase() + vend.substr( 1 ) + "-";
-                       }
-               },
-               check_style = function( vend ) {
-                       var vend_prop = vend_pref( vend ) + prop + ": " + value + ";",
-                               uc_vend = uc( vend ),
-                               propStyle = uc_vend + ( uc_vend === "" ? prop : uc( prop ) );
-
-                       div.setAttribute( "style", vend_prop );
-
-                       if ( !!div.style[ propStyle ] ) {
-                               ret = true;
-                       }
-               },
-               check_vends = check_vend ? check_vend : vendors,
-               ret;
-
-       for( var i = 0; i < check_vends.length; i++ ) {
-               check_style( check_vends[i] );
-       }
-       return !!ret;
-}
-
-function transform3dTest() {
-       var mqProp = "transform-3d",
-               // Because the `translate3d` test below throws false positives in Android:
-               ret = $.mobile.media( "(-" + vendors.join( "-" + mqProp + "),(-" ) + "-" + mqProp + "),(" + mqProp + ")" );
-
-       if( ret ) {
-               return !!ret;
-       }
-
-       var el = document.createElement( "div" ),
-               transforms = {
-                       // We’re omitting Opera for the time being; MS uses unprefixed.
-                       'MozTransform':'-moz-transform',
-                       'transform':'transform'
-               };
-
-       fakeBody.append( el );
-
-       for ( var t in transforms ) {
-               if( el.style[ t ] !== undefined ){
-                       el.style[ t ] = 'translate3d( 100px, 1px, 1px )';
-                       ret = window.getComputedStyle( el ).getPropertyValue( transforms[ t ] );
-               }
-       }
-       return ( !!ret && ret !== "none" );
-}
-
-// Test for dynamic-updating base tag support ( allows us to avoid href,src attr rewriting )
-function baseTagTest() {
-       var fauxBase = location.protocol + "//" + location.host + location.pathname + "ui-dir/",
-               base = $( "head base" ),
-               fauxEle = null,
-               href = "",
-               link, rebase;
-
-       if ( !base.length ) {
-               base = fauxEle = $( "<base>", { "href": fauxBase }).appendTo( "head" );
-       } else {
-               href = base.attr( "href" );
-       }
-
-       link = $( "<a href='testurl' />" ).prependTo( fakeBody );
-       rebase = link[ 0 ].href;
-       base[ 0 ].href = href || location.pathname;
-
-       if ( fauxEle ) {
-               fauxEle.remove();
-       }
-       return rebase.indexOf( fauxBase ) === 0;
-}
-
-// Thanks Modernizr
-function cssPointerEventsTest() {
-       var element = document.createElement( 'x' ),
-               documentElement = document.documentElement,
-               getComputedStyle = window.getComputedStyle,
-               supports;
-
-       if ( !( 'pointerEvents' in element.style ) ) {
-               return false;
-       }
-
-       element.style.pointerEvents = 'auto';
-       element.style.pointerEvents = 'x';
-       documentElement.appendChild( element );
-       supports = getComputedStyle &&
-       getComputedStyle( element, '' ).pointerEvents === 'auto';
-       documentElement.removeChild( element );
-       return !!supports;
-}
-
-function boundingRect() {
-       var div = document.createElement( "div" );
-       return typeof div.getBoundingClientRect !== "undefined";
-}
-
-// non-UA-based IE version check by James Padolsey, modified by jdalton - from http://gist.github.com/527683
-// allows for inclusion of IE 6+, including Windows Mobile 7
-$.extend( $.mobile, { browser: {} } );
-$.mobile.browser.oldIE = (function() {
-       var v = 3,
-               div = document.createElement( "div" ),
-               a = div.all || [];
-
-       do {
-               div.innerHTML = "<!--[if gt IE " + ( ++v ) + "]><br><![endif]-->";
-       } while( a[0] );
-
-       return v > 4 ? v : !v;
-})();
-
-function fixedPosition() {
-       var w = window,
-               ua = navigator.userAgent,
-               platform = navigator.platform,
-               // Rendering engine is Webkit, and capture major version
-               wkmatch = ua.match( /AppleWebKit\/([0-9]+)/ ),
-               wkversion = !!wkmatch && wkmatch[ 1 ],
-               ffmatch = ua.match( /Fennec\/([0-9]+)/ ),
-               ffversion = !!ffmatch && ffmatch[ 1 ],
-               operammobilematch = ua.match( /Opera Mobi\/([0-9]+)/ ),
-               omversion = !!operammobilematch && operammobilematch[ 1 ];
-
-       if(
-               // iOS 4.3 and older : Platform is iPhone/Pad/Touch and Webkit version is less than 534 (ios5)
-               ( ( platform.indexOf( "iPhone" ) > -1 || platform.indexOf( "iPad" ) > -1  || platform.indexOf( "iPod" ) > -1 ) && wkversion && wkversion < 534 ) ||
-               // Opera Mini
-               ( w.operamini && ({}).toString.call( w.operamini ) === "[object OperaMini]" ) ||
-               ( operammobilematch && omversion < 7458 )       ||
-               //Android lte 2.1: Platform is Android and Webkit version is less than 533 (Android 2.2)
-               ( ua.indexOf( "Android" ) > -1 && wkversion && wkversion < 533 ) ||
-               // Firefox Mobile before 6.0 -
-               ( ffversion && ffversion < 6 ) ||
-               // WebOS less than 3
-               ( "palmGetResource" in window && wkversion && wkversion < 534 ) ||
-               // MeeGo
-               ( ua.indexOf( "MeeGo" ) > -1 && ua.indexOf( "NokiaBrowser/8.5.0" ) > -1 ) ) {
-               return false;
-       }
-
-       return true;
-}
-
-$.extend( $.support, {
-       cssTransitions: "WebKitTransitionEvent" in window ||
-               validStyle( 'transition', 'height 100ms linear', [ "Webkit", "Moz", "" ] ) &&
-               !$.mobile.browser.oldIE && !opera,
-
-       // Note, Chrome for iOS has an extremely quirky implementation of popstate.
-       // We've chosen to take the shortest path to a bug fix here for issue #5426
-       // See the following link for information about the regex chosen
-       // https://developers.google.com/chrome/mobile/docs/user-agent#chrome_for_ios_user-agent
-       pushState: "pushState" in history &&
-               "replaceState" in history &&
-               // When running inside a FF iframe, calling replaceState causes an error
-               !( window.navigator.userAgent.indexOf( "Firefox" ) >= 0 && window.top !== window ) &&
-               ( window.navigator.userAgent.search(/CriOS/) === -1 ),
-
-       mediaquery: $.mobile.media( "only all" ),
-       cssPseudoElement: !!propExists( "content" ),
-       touchOverflow: !!propExists( "overflowScrolling" ),
-       cssTransform3d: transform3dTest(),
-       boxShadow: !!propExists( "boxShadow" ) && !bb,
-       fixedPosition: fixedPosition(),
-       scrollTop: ("pageXOffset" in window ||
-               "scrollTop" in document.documentElement ||
-               "scrollTop" in fakeBody[ 0 ]) && !webos && !operamini,
-
-       dynamicBaseTag: baseTagTest(),
-       cssPointerEvents: cssPointerEventsTest(),
-       boundingRect: boundingRect()
-});
-
-fakeBody.remove();
-
-
-// $.mobile.ajaxBlacklist is used to override ajaxEnabled on platforms that have known conflicts with hash history updates (BB5, Symbian)
-// or that generally work better browsing in regular http for full page refreshes (Opera Mini)
-// Note: This detection below is used as a last resort.
-// We recommend only using these detection methods when all other more reliable/forward-looking approaches are not possible
-var nokiaLTE7_3 = (function() {
-
-       var ua = window.navigator.userAgent;
-
-       //The following is an attempt to match Nokia browsers that are running Symbian/s60, with webkit, version 7.3 or older
-       return ua.indexOf( "Nokia" ) > -1 &&
-                       ( ua.indexOf( "Symbian/3" ) > -1 || ua.indexOf( "Series60/5" ) > -1 ) &&
-                       ua.indexOf( "AppleWebKit" ) > -1 &&
-                       ua.match( /(BrowserNG|NokiaBrowser)\/7\.[0-3]/ );
-})();
-
-// Support conditions that must be met in order to proceed
-// default enhanced qualifications are media query support OR IE 7+
-
-$.mobile.gradeA = function() {
-       return ( $.support.mediaquery || $.mobile.browser.oldIE && $.mobile.browser.oldIE >= 7 ) && ( $.support.boundingRect || $.fn.jquery.match(/1\.[0-7+]\.[0-9+]?/) !== null );
-};
-
-$.mobile.ajaxBlacklist =
-                       // BlackBerry browsers, pre-webkit
-                       window.blackberry && !window.WebKitPoint ||
-                       // Opera Mini
-                       operamini ||
-                       // Symbian webkits pre 7.3
-                       nokiaLTE7_3;
-
-// Lastly, this workaround is the only way we've found so far to get pre 7.3 Symbian webkit devices
-// to render the stylesheets when they're referenced before this script, as we'd recommend doing.
-// This simply reappends the CSS in place, which for some reason makes it apply
-if ( nokiaLTE7_3 ) {
-       $(function() {
-               $( "head link[rel='stylesheet']" ).attr( "rel", "alternate stylesheet" ).attr( "rel", "stylesheet" );
-       });
-}
-
-// For ruling out shadows via css
-if ( !$.support.boxShadow ) {
-       $( "html" ).addClass( "ui-mobile-nosupport-boxshadow" );
-}
-
-})( jQuery );
-
-
-(function( $, undefined ) {
-       var $win = $.mobile.window, self, history;
-
-       $.event.special.navigate = self = {
-               bound: false,
-
-               pushStateEnabled: true,
-
-               originalEventName: undefined,
-
-               // If pushstate support is present and push state support is defined to
-               // be true on the mobile namespace.
-               isPushStateEnabled: function() {
-                       return $.support.pushState &&
-                               $.mobile.pushStateEnabled === true &&
-                               this.isHashChangeEnabled();
-               },
-
-               // !! assumes mobile namespace is present
-               isHashChangeEnabled: function() {
-                       return $.mobile.hashListeningEnabled === true;
-               },
-
-               // TODO a lot of duplication between popstate and hashchange
-               popstate: function( event ) {
-                       var newEvent = new $.Event( "navigate" ),
-                               beforeNavigate = new $.Event( "beforenavigate" ),
-                               state = event.originalEvent.state || {},
-                               href = location.href;
-
-                       $win.trigger( beforeNavigate );
-
-                       if( beforeNavigate.isDefaultPrevented() ){
-                               return;
-                       }
-
-                       if( event.historyState ){
-                               $.extend(state, event.historyState);
-                       }
-
-                       // Make sure the original event is tracked for the end
-                       // user to inspect incase they want to do something special
-                       newEvent.originalEvent = event;
-
-                       // NOTE we let the current stack unwind because any assignment to
-                       //      location.hash will stop the world and run this event handler. By
-                       //      doing this we create a similar behavior to hashchange on hash
-                       //      assignment
-                       setTimeout(function() {
-                               $win.trigger( newEvent, {
-                                       state: state
-                               });
-                       }, 0);
-               },
-
-               hashchange: function( event, data ) {
-                       var newEvent = new $.Event( "navigate" ),
-                               beforeNavigate = new $.Event( "beforenavigate" );
-
-                       $win.trigger( beforeNavigate );
-
-                       if( beforeNavigate.isDefaultPrevented() ){
-                               return;
-                       }
-
-                       // Make sure the original event is tracked for the end
-                       // user to inspect incase they want to do something special
-                       newEvent.originalEvent = event;
-
-                       // Trigger the hashchange with state provided by the user
-                       // that altered the hash
-                       $win.trigger( newEvent, {
-                               // Users that want to fully normalize the two events
-                               // will need to do history management down the stack and
-                               // add the state to the event before this binding is fired
-                               // TODO consider allowing for the explicit addition of callbacks
-                               //      to be fired before this value is set to avoid event timing issues
-                               state: event.hashchangeState || {}
-                       });
-               },
-
-               // TODO We really only want to set this up once
-               //      but I'm not clear if there's a beter way to achieve
-               //      this with the jQuery special event structure
-               setup: function( data, namespaces ) {
-                       if( self.bound ) {
-                               return;
-                       }
-
-                       self.bound = true;
-
-                       if( self.isPushStateEnabled() ) {
-                               self.originalEventName = "popstate";
-                               $win.bind( "popstate.navigate", self.popstate );
-                       } else if ( self.isHashChangeEnabled() ){
-                               self.originalEventName = "hashchange";
-                               $win.bind( "hashchange.navigate", self.hashchange );
-                       }
-               }
-       };
-})( jQuery );
-
-
-
-(function( $, undefined ) {
-               var path, documentBase, $base, dialogHashKey = "&ui-state=dialog";
-
-               $.mobile.path = path = {
-                       uiStateKey: "&ui-state",
-
-                       // This scary looking regular expression parses an absolute URL or its relative
-                       // variants (protocol, site, document, query, and hash), into the various
-                       // components (protocol, host, path, query, fragment, etc that make up the
-                       // URL as well as some other commonly used sub-parts. When used with RegExp.exec()
-                       // or String.match, it parses the URL into a results array that looks like this:
-                       //
-                       //     [0]: http://jblas:password@mycompany.com:8080/mail/inbox?msg=1234&type=unread#msg-content
-                       //     [1]: http://jblas:password@mycompany.com:8080/mail/inbox?msg=1234&type=unread
-                       //     [2]: http://jblas:password@mycompany.com:8080/mail/inbox
-                       //     [3]: http://jblas:password@mycompany.com:8080
-                       //     [4]: http:
-                       //     [5]: //
-                       //     [6]: jblas:password@mycompany.com:8080
-                       //     [7]: jblas:password
-                       //     [8]: jblas
-                       //     [9]: password
-                       //    [10]: mycompany.com:8080
-                       //    [11]: mycompany.com
-                       //    [12]: 8080
-                       //    [13]: /mail/inbox
-                       //    [14]: /mail/
-                       //    [15]: inbox
-                       //    [16]: ?msg=1234&type=unread
-                       //    [17]: #msg-content
-                       //
-                       urlParseRE: /^\s*(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/,
-
-                       // Abstraction to address xss (Issue #4787) by removing the authority in
-                       // browsers that auto   decode it. All references to location.href should be
-                       // replaced with a call to this method so that it can be dealt with properly here
-                       getLocation: function( url ) {
-                               var uri = url ? this.parseUrl( url ) : location,
-                                       hash = this.parseUrl( url || location.href ).hash;
-
-                               // mimic the browser with an empty string when the hash is empty
-                               hash = hash === "#" ? "" : hash;
-
-                               // Make sure to parse the url or the location object for the hash because using location.hash
-                               // is autodecoded in firefox, the rest of the url should be from the object (location unless
-                               // we're testing) to avoid the inclusion of the authority
-                               return uri.protocol + "//" + uri.host + uri.pathname + uri.search + hash;
-                       },
-
-                       parseLocation: function() {
-                               return this.parseUrl( this.getLocation() );
-                       },
-
-                       //Parse a URL into a structure that allows easy access to
-                       //all of the URL components by name.
-                       parseUrl: function( url ) {
-                               // If we're passed an object, we'll assume that it is
-                               // a parsed url object and just return it back to the caller.
-                               if ( $.type( url ) === "object" ) {
-                                       return url;
-                               }
-
-                               var matches = path.urlParseRE.exec( url || "" ) || [];
-
-                                       // Create an object that allows the caller to access the sub-matches
-                                       // by name. Note that IE returns an empty string instead of undefined,
-                                       // like all other browsers do, so we normalize everything so its consistent
-                                       // no matter what browser we're running on.
-                                       return {
-                                               href:         matches[  0 ] || "",
-                                               hrefNoHash:   matches[  1 ] || "",
-                                               hrefNoSearch: matches[  2 ] || "",
-                                               domain:       matches[  3 ] || "",
-                                               protocol:     matches[  4 ] || "",
-                                               doubleSlash:  matches[  5 ] || "",
-                                               authority:    matches[  6 ] || "",
-                                               username:     matches[  8 ] || "",
-                                               password:     matches[  9 ] || "",
-                                               host:         matches[ 10 ] || "",
-                                               hostname:     matches[ 11 ] || "",
-                                               port:         matches[ 12 ] || "",
-                                               pathname:     matches[ 13 ] || "",
-                                               directory:    matches[ 14 ] || "",
-                                               filename:     matches[ 15 ] || "",
-                                               search:       matches[ 16 ] || "",
-                                               hash:         matches[ 17 ] || ""
-                                       };
-                       },
-
-                       //Turn relPath into an asbolute path. absPath is
-                       //an optional absolute path which describes what
-                       //relPath is relative to.
-                       makePathAbsolute: function( relPath, absPath ) {
-                               if ( relPath && relPath.charAt( 0 ) === "/" ) {
-                                       return relPath;
-                               }
-
-                               relPath = relPath || "";
-                               absPath = absPath ? absPath.replace( /^\/|(\/[^\/]*|[^\/]+)$/g, "" ) : "";
-
-                               var absStack = absPath ? absPath.split( "/" ) : [],
-                                       relStack = relPath.split( "/" );
-                               for ( var i = 0; i < relStack.length; i++ ) {
-                                       var d = relStack[ i ];
-                                       switch ( d ) {
-                                               case ".":
-                                                       break;
-                                               case "..":
-                                                       if ( absStack.length ) {
-                                                               absStack.pop();
-                                                       }
-                                                       break;
-                                               default:
-                                                       absStack.push( d );
-                                                       break;
-                                       }
-                               }
-                               return "/" + absStack.join( "/" );
-                       },
-
-                       //Returns true if both urls have the same domain.
-                       isSameDomain: function( absUrl1, absUrl2 ) {
-                               return path.parseUrl( absUrl1 ).domain === path.parseUrl( absUrl2 ).domain;
-                       },
-
-                       //Returns true for any relative variant.
-                       isRelativeUrl: function( url ) {
-                               // All relative Url variants have one thing in common, no protocol.
-                               return path.parseUrl( url ).protocol === "";
-                       },
-
-                       //Returns true for an absolute url.
-                       isAbsoluteUrl: function( url ) {
-                               return path.parseUrl( url ).protocol !== "";
-                       },
-
-                       //Turn the specified realtive URL into an absolute one. This function
-                       //can handle all relative variants (protocol, site, document, query, fragment).
-                       makeUrlAbsolute: function( relUrl, absUrl ) {
-                               if ( !path.isRelativeUrl( relUrl ) ) {
-                                       return relUrl;
-                               }
-
-                               if ( absUrl === undefined ) {
-                                       absUrl = this.documentBase;
-                               }
-
-                               var relObj = path.parseUrl( relUrl ),
-                                       absObj = path.parseUrl( absUrl ),
-                                       protocol = relObj.protocol || absObj.protocol,
-                                       doubleSlash = relObj.protocol ? relObj.doubleSlash : ( relObj.doubleSlash || absObj.doubleSlash ),
-                                       authority = relObj.authority || absObj.authority,
-                                       hasPath = relObj.pathname !== "",
-                                       pathname = path.makePathAbsolute( relObj.pathname || absObj.filename, absObj.pathname ),
-                                       search = relObj.search || ( !hasPath && absObj.search ) || "",
-                                       hash = relObj.hash;
-
-                               return protocol + doubleSlash + authority + pathname + search + hash;
-                       },
-
-                       //Add search (aka query) params to the specified url.
-                       addSearchParams: function( url, params ) {
-                               var u = path.parseUrl( url ),
-                                       p = ( typeof params === "object" ) ? $.param( params ) : params,
-                                       s = u.search || "?";
-                               return u.hrefNoSearch + s + ( s.charAt( s.length - 1 ) !== "?" ? "&" : "" ) + p + ( u.hash || "" );
-                       },
-
-                       convertUrlToDataUrl: function( absUrl ) {
-                               var u = path.parseUrl( absUrl );
-                               if ( path.isEmbeddedPage( u ) ) {
-                                       // For embedded pages, remove the dialog hash key as in getFilePath(),
-                                       // and remove otherwise the Data Url won't match the id of the embedded Page.
-                                       return u.hash
-                                               .split( dialogHashKey )[0]
-                                               .replace( /^#/, "" )
-                                               .replace( /\?.*$/, "" );
-                               } else if ( path.isSameDomain( u, this.documentBase ) ) {
-                                       return u.hrefNoHash.replace( this.documentBase.domain, "" ).split( dialogHashKey )[0];
-                               }
-
-                               return window.decodeURIComponent(absUrl);
-                       },
-
-                       //get path from current hash, or from a file path
-                       get: function( newPath ) {
-                               if ( newPath === undefined ) {
-                                       newPath = path.parseLocation().hash;
-                               }
-                               return path.stripHash( newPath ).replace( /[^\/]*\.[^\/*]+$/, '' );
-                       },
-
-                       //set location hash to path
-                       set: function( path ) {
-                               location.hash = path;
-                       },
-
-                       //test if a given url (string) is a path
-                       //NOTE might be exceptionally naive
-                       isPath: function( url ) {
-                               return ( /\// ).test( url );
-                       },
-
-                       //return a url path with the window's location protocol/hostname/pathname removed
-                       clean: function( url ) {
-                               return url.replace( this.documentBase.domain, "" );
-                       },
-
-                       //just return the url without an initial #
-                       stripHash: function( url ) {
-                               return url.replace( /^#/, "" );
-                       },
-
-                       stripQueryParams: function( url ) {
-                               return url.replace( /\?.*$/, "" );
-                       },
-
-                       //remove the preceding hash, any query params, and dialog notations
-                       cleanHash: function( hash ) {
-                               return path.stripHash( hash.replace( /\?.*$/, "" ).replace( dialogHashKey, "" ) );
-                       },
-
-                       isHashValid: function( hash ) {
-                               return ( /^#[^#]+$/ ).test( hash );
-                       },
-
-                       //check whether a url is referencing the same domain, or an external domain or different protocol
-                       //could be mailto, etc
-                       isExternal: function( url ) {
-                               var u = path.parseUrl( url );
-                               return u.protocol && u.domain !== this.documentUrl.domain ? true : false;
-                       },
-
-                       hasProtocol: function( url ) {
-                               return ( /^(:?\w+:)/ ).test( url );
-                       },
-
-                       isEmbeddedPage: function( url ) {
-                               var u = path.parseUrl( url );
-
-                               //if the path is absolute, then we need to compare the url against
-                               //both the this.documentUrl and the documentBase. The main reason for this
-                               //is that links embedded within external documents will refer to the
-                               //application document, whereas links embedded within the application
-                               //document will be resolved against the document base.
-                               if ( u.protocol !== "" ) {
-                                       return ( !this.isPath(u.hash) && u.hash && ( u.hrefNoHash === this.documentUrl.hrefNoHash || ( this.documentBaseDiffers && u.hrefNoHash === this.documentBase.hrefNoHash ) ) );
-                               }
-                               return ( /^#/ ).test( u.href );
-                       },
-
-                       squash: function( url, resolutionUrl ) {
-                               var state, href, cleanedUrl, search, stateIndex,
-                                       isPath = this.isPath( url ),
-                                       uri = this.parseUrl( url ),
-                                       preservedHash = uri.hash,
-                                       uiState = "";
-
-                               // produce a url against which we can resole the provided path
-                               resolutionUrl = resolutionUrl || (path.isPath(url) ? path.getLocation() : path.getDocumentUrl());
-
-                               // If the url is anything but a simple string, remove any preceding hash
-                               // eg #foo/bar -> foo/bar
-                               //    #foo -> #foo
-                               cleanedUrl = isPath ? path.stripHash( url ) : url;
-
-                               // If the url is a full url with a hash check if the parsed hash is a path
-                               // if it is, strip the #, and use it otherwise continue without change
-                               cleanedUrl = path.isPath( uri.hash ) ? path.stripHash( uri.hash ) : cleanedUrl;
-
-                               // Split the UI State keys off the href
-                               stateIndex = cleanedUrl.indexOf( this.uiStateKey );
-
-                               // store the ui state keys for use
-                               if( stateIndex > -1 ){
-                                       uiState = cleanedUrl.slice( stateIndex );
-                                       cleanedUrl = cleanedUrl.slice( 0, stateIndex );
-                               }
-
-                               // make the cleanedUrl absolute relative to the resolution url
-                               href = path.makeUrlAbsolute( cleanedUrl, resolutionUrl );
-
-                               // grab the search from the resolved url since parsing from
-                               // the passed url may not yield the correct result
-                               search = this.parseUrl( href ).search;
-
-                               // TODO all this crap is terrible, clean it up
-                               if ( isPath ) {
-                                       // reject the hash if it's a path or it's just a dialog key
-                                       if( path.isPath( preservedHash ) || preservedHash.replace("#", "").indexOf( this.uiStateKey ) === 0) {
-                                               preservedHash = "";
-                                       }
-
-                                       // Append the UI State keys where it exists and it's been removed
-                                       // from the url
-                                       if( uiState && preservedHash.indexOf( this.uiStateKey ) === -1){
-                                               preservedHash += uiState;
-                                       }
-
-                                       // make sure that pound is on the front of the hash
-                                       if( preservedHash.indexOf( "#" ) === -1 && preservedHash !== "" ){
-                                               preservedHash = "#" + preservedHash;
-                                       }
-
-                                       // reconstruct each of the pieces with the new search string and hash
-                                       href = path.parseUrl( href );
-                                       href = href.protocol + "//" + href.host + href.pathname + search + preservedHash;
-                               } else {
-                                       href += href.indexOf( "#" ) > -1 ? uiState : "#" + uiState;
-                               }
-
-                               return href;
-                       },
-
-                       isPreservableHash: function( hash ) {
-                               return hash.replace( "#", "" ).indexOf( this.uiStateKey ) === 0;
-                       }
-               };
-
-               path.documentUrl = path.parseLocation();
-
-               $base = $( "head" ).find( "base" );
-
-               path.documentBase = $base.length ?
-                       path.parseUrl( path.makeUrlAbsolute( $base.attr( "href" ), path.documentUrl.href ) ) :
-                       path.documentUrl;
-
-               path.documentBaseDiffers = (path.documentUrl.hrefNoHash !== path.documentBase.hrefNoHash);
-
-               //return the original document url
-               path.getDocumentUrl = function( asParsedObject ) {
-                       return asParsedObject ? $.extend( {}, path.documentUrl ) : path.documentUrl.href;
-               };
-
-               //return the original document base url
-               path.getDocumentBase = function( asParsedObject ) {
-                       return asParsedObject ? $.extend( {}, path.documentBase ) : path.documentBase.href;
-               };
-})( jQuery );
-
-
-
-(function( $, undefined ) {
-       var path = $.mobile.path;
-
-       $.mobile.History = function( stack, index ) {
-               this.stack = stack || [];
-               this.activeIndex = index || 0;
-       };
-
-       $.extend($.mobile.History.prototype, {
-               getActive: function() {
-                       return this.stack[ this.activeIndex ];
-               },
-
-               getLast: function() {
-                       return this.stack[ this.previousIndex ];
-               },
-
-               getNext: function() {
-                       return this.stack[ this.activeIndex + 1 ];
-               },
-
-               getPrev: function() {
-                       return this.stack[ this.activeIndex - 1 ];
-               },
-
-               // addNew is used whenever a new page is added
-               add: function( url, data ){
-                       data = data || {};
-
-                       //if there's forward history, wipe it
-                       if ( this.getNext() ) {
-                               this.clearForward();
-                       }
-
-                       // if the hash is included in the data make sure the shape
-                       // is consistent for comparison
-                       if( data.hash && data.hash.indexOf( "#" ) === -1) {
-                               data.hash = "#" + data.hash;
-                       }
-
-                       data.url = url;
-                       this.stack.push( data );
-                       this.activeIndex = this.stack.length - 1;
-               },
-
-               //wipe urls ahead of active index
-               clearForward: function() {
-                       this.stack = this.stack.slice( 0, this.activeIndex + 1 );
-               },
-
-               find: function( url, stack, earlyReturn ) {
-                       stack = stack || this.stack;
-
-                       var entry, i, length = stack.length, index;
-
-                       for ( i = 0; i < length; i++ ) {
-                               entry = stack[i];
-
-                               if ( decodeURIComponent(url) === decodeURIComponent(entry.url) ||
-                                       decodeURIComponent(url) === decodeURIComponent(entry.hash) ) {
-                                       index = i;
-
-                                       if( earlyReturn ) {
-                                               return index;
-                                       }
-                               }
-                       }
-
-                       return index;
-               },
-
-               closest: function( url ) {
-                       var closest, a = this.activeIndex;
-
-                       // First, take the slice of the history stack before the current index and search
-                       // for a url match. If one is found, we'll avoid avoid looking through forward history
-                       // NOTE the preference for backward history movement is driven by the fact that
-                       //      most mobile browsers only have a dedicated back button, and users rarely use
-                       //      the forward button in desktop browser anyhow
-                       closest = this.find( url, this.stack.slice(0, a) );
-
-                       // If nothing was found in backward history check forward. The `true`
-                       // value passed as the third parameter causes the find method to break
-                       // on the first match in the forward history slice. The starting index
-                       // of the slice must then be added to the result to get the element index
-                       // in the original history stack :( :(
-                       //
-                       // TODO this is hyper confusing and should be cleaned up (ugh so bad)
-                       if( closest === undefined ) {
-                               closest = this.find( url, this.stack.slice(a), true );
-                               closest = closest === undefined ? closest : closest + a;
-                       }
-
-                       return closest;
-               },
-
-               direct: function( opts ) {
-                       var newActiveIndex = this.closest( opts.url ), a = this.activeIndex;
-
-                       // save new page index, null check to prevent falsey 0 result
-                       // record the previous index for reference
-                       if( newActiveIndex !== undefined ) {
-                               this.activeIndex = newActiveIndex;
-                               this.previousIndex = a;
-                       }
-
-                       // invoke callbacks where appropriate
-                       //
-                       // TODO this is also convoluted and confusing
-                       if ( newActiveIndex < a ) {
-                               ( opts.present || opts.back || $.noop )( this.getActive(), 'back' );
-                       } else if ( newActiveIndex > a ) {
-                               ( opts.present || opts.forward || $.noop )( this.getActive(), 'forward' );
-                       } else if ( newActiveIndex === undefined && opts.missing ){
-                               opts.missing( this.getActive() );
-                       }
-               }
-       });
-})( jQuery );
-
-
-(function( $, undefined ) {
-       var path = $.mobile.path,
-               initialHref = location.href;
-
-       $.mobile.Navigator = function( history ) {
-               this.history = history;
-               this.ignoreInitialHashChange = true;
-
-               $.mobile.window.bind({
-                       "popstate.history": $.proxy( this.popstate, this ),
-                       "hashchange.history": $.proxy( this.hashchange, this )
-               });
-       };
-
-       $.extend($.mobile.Navigator.prototype, {
-               squash: function( url, data ) {
-                       var state, href, hash = path.isPath(url) ? path.stripHash(url) : url;
-
-                       href = path.squash( url );
-
-                       // make sure to provide this information when it isn't explicitly set in the
-                       // data object that was passed to the squash method
-                       state = $.extend({
-                               hash: hash,
-                               url: href
-                       }, data);
-
-                       // replace the current url with the new href and store the state
-                       // Note that in some cases we might be replacing an url with the
-                       // same url. We do this anyways because we need to make sure that
-                       // all of our history entries have a state object associated with
-                       // them. This allows us to work around the case where $.mobile.back()
-                       // is called to transition from an external page to an embedded page.
-                       // In that particular case, a hashchange event is *NOT* generated by the browser.
-                       // Ensuring each history entry has a state object means that onPopState()
-                       // will always trigger our hashchange callback even when a hashchange event
-                       // is not fired.
-                       window.history.replaceState( state, state.title || document.title, href );
-
-                       return state;
-               },
-
-               hash: function( url, href ) {
-                       var parsed, loc, hash;
-
-                       // Grab the hash for recording. If the passed url is a path
-                       // we used the parsed version of the squashed url to reconstruct,
-                       // otherwise we assume it's a hash and store it directly
-                       parsed = path.parseUrl( url );
-                       loc = path.parseLocation();
-
-                       if( loc.pathname + loc.search === parsed.pathname + parsed.search ) {
-                               // If the pathname and search of the passed url is identical to the current loc
-                               // then we must use the hash. Otherwise there will be no event
-                               // eg, url = "/foo/bar?baz#bang", location.href = "http://example.com/foo/bar?baz"
-                               hash = parsed.hash ? parsed.hash : parsed.pathname + parsed.search;
-                       } else if ( path.isPath(url) ) {
-                               var resolved = path.parseUrl( href );
-                               // If the passed url is a path, make it domain relative and remove any trailing hash
-                               hash = resolved.pathname + resolved.search + (path.isPreservableHash( resolved.hash )? resolved.hash.replace( "#", "" ) : "");
-                       } else {
-                               hash = url;
-                       }
-
-                       return hash;
-               },
-
-               // TODO reconsider name
-               go: function( url, data, noEvents ) {
-                       var state, href, hash, popstateEvent,
-                               isPopStateEvent = $.event.special.navigate.isPushStateEnabled();
-
-                       // Get the url as it would look squashed on to the current resolution url
-                       href = path.squash( url );
-
-                       // sort out what the hash sould be from the url
-                       hash = this.hash( url, href );
-
-                       // Here we prevent the next hash change or popstate event from doing any
-                       // history management. In the case of hashchange we don't swallow it
-                       // if there will be no hashchange fired (since that won't reset the value)
-                       // and will swallow the following hashchange
-                       if( noEvents && hash !== path.stripHash(path.parseLocation().hash) ) {
-                               this.preventNextHashChange = noEvents;
-                       }
-
-                       // IMPORTANT in the case where popstate is supported the event will be triggered
-                       //      directly, stopping further execution - ie, interupting the flow of this
-                       //      method call to fire bindings at this expression. Below the navigate method
-                       //      there is a binding to catch this event and stop its propagation.
-                       //
-                       //      We then trigger a new popstate event on the window with a null state
-                       //      so that the navigate events can conclude their work properly
-                       //
-                       // if the url is a path we want to preserve the query params that are available on
-                       // the current url.
-                       this.preventHashAssignPopState = true;
-                       window.location.hash = hash;
-
-                       // If popstate is enabled and the browser triggers `popstate` events when the hash
-                       // is set (this often happens immediately in browsers like Chrome), then the
-                       // this flag will be set to false already. If it's a browser that does not trigger
-                       // a `popstate` on hash assignement or `replaceState` then we need avoid the branch
-                       // that swallows the event created by the popstate generated by the hash assignment
-                       // At the time of this writing this happens with Opera 12 and some version of IE
-                       this.preventHashAssignPopState = false;
-
-                       state = $.extend({
-                               url: href,
-                               hash: hash,
-                               title: document.title
-                       }, data);
-
-                       if( isPopStateEvent ) {
-                               popstateEvent = new $.Event( "popstate" );
-                               popstateEvent.originalEvent = {
-                                       type: "popstate",
-                                       state: null
-                               };
-
-                               this.squash( url, state );
-
-                               // Trigger a new faux popstate event to replace the one that we
-                               // caught that was triggered by the hash setting above.
-                               if( !noEvents ) {
-                                       this.ignorePopState = true;
-                                       $.mobile.window.trigger( popstateEvent );
-                               }
-                       }
-
-                       // record the history entry so that the information can be included
-                       // in hashchange event driven navigate events in a similar fashion to
-                       // the state that's provided by popstate
-                       this.history.add( state.url, state );
-               },
-
-
-               // This binding is intended to catch the popstate events that are fired
-               // when execution of the `$.navigate` method stops at window.location.hash = url;
-               // and completely prevent them from propagating. The popstate event will then be
-               // retriggered after execution resumes
-               //
-               // TODO grab the original event here and use it for the synthetic event in the
-               //      second half of the navigate execution that will follow this binding
-               popstate: function( event ) {
-                       var active, hash, state, closestIndex;
-
-                       // Partly to support our test suite which manually alters the support
-                       // value to test hashchange. Partly to prevent all around weirdness
-                       if( !$.event.special.navigate.isPushStateEnabled() ){
-                               return;
-                       }
-
-                       // If this is the popstate triggered by the actual alteration of the hash
-                       // prevent it completely. History is tracked manually
-                       if( this.preventHashAssignPopState ) {
-                               this.preventHashAssignPopState = false;
-                               event.stopImmediatePropagation();
-                               return;
-                       }
-
-                       // if this is the popstate triggered after the `replaceState` call in the go
-                       // method, then simply ignore it. The history entry has already been captured
-                       if( this.ignorePopState ) {
-                               this.ignorePopState = false;
-                               return;
-                       }
-
-                       // If there is no state, and the history stack length is one were
-                       // probably getting the page load popstate fired by browsers like chrome
-                       // avoid it and set the one time flag to false.
-                       // TODO: Do we really need all these conditions? Comparing location hrefs
-                       // should be sufficient.
-                       if( !event.originalEvent.state &&
-                               this.history.stack.length === 1 &&
-                               this.ignoreInitialHashChange ) {
-                               this.ignoreInitialHashChange = false;
-
-                               if ( location.href === initialHref ) {
-                                       event.preventDefault();
-                                       return;
-                               }
-                       }
-
-                       // account for direct manipulation of the hash. That is, we will receive a popstate
-                       // when the hash is changed by assignment, and it won't have a state associated. We
-                       // then need to squash the hash. See below for handling of hash assignment that
-                       // matches an existing history entry
-                       // TODO it might be better to only add to the history stack
-                       //      when the hash is adjacent to the active history entry
-                       hash = path.parseLocation().hash;
-                       if( !event.originalEvent.state && hash ) {
-                               // squash the hash that's been assigned on the URL with replaceState
-                               // also grab the resulting state object for storage
-                               state = this.squash( hash );
-
-                               // record the new hash as an additional history entry
-                               // to match the browser's treatment of hash assignment
-                               this.history.add( state.url, state );
-
-                               // pass the newly created state information
-                               // along with the event
-                               event.historyState = state;
-
-                               // do not alter history, we've added a new history entry
-                               // so we know where we are
-                               return;
-                       }
-
-                       // If all else fails this is a popstate that comes from the back or forward buttons
-                       // make sure to set the state of our history stack properly, and record the directionality
-                       this.history.direct({
-                               url: (event.originalEvent.state || {}).url || hash,
-
-                               // When the url is either forward or backward in history include the entry
-                               // as data on the event object for merging as data in the navigate event
-                               present: function( historyEntry, direction ) {
-                                       // make sure to create a new object to pass down as the navigate event data
-                                       event.historyState = $.extend({}, historyEntry);
-                                       event.historyState.direction = direction;
-                               }
-                       });
-               },
-
-               // NOTE must bind before `navigate` special event hashchange binding otherwise the
-               //      navigation data won't be attached to the hashchange event in time for those
-               //      bindings to attach it to the `navigate` special event
-               // TODO add a check here that `hashchange.navigate` is bound already otherwise it's
-               //      broken (exception?)
-               hashchange: function( event ) {
-                       var history, hash;
-
-                       // If hashchange listening is explicitly disabled or pushstate is supported
-                       // avoid making use of the hashchange handler.
-                       if(!$.event.special.navigate.isHashChangeEnabled() ||
-                               $.event.special.navigate.isPushStateEnabled() ) {
-                               return;
-                       }
-
-                       // On occasion explicitly want to prevent the next hash from propogating because we only
-                       // with to alter the url to represent the new state do so here
-                       if( this.preventNextHashChange ){
-                               this.preventNextHashChange = false;
-                               event.stopImmediatePropagation();
-                               return;
-                       }
-
-                       history = this.history;
-                       hash = path.parseLocation().hash;
-
-                       // If this is a hashchange caused by the back or forward button
-                       // make sure to set the state of our history stack properly
-                       this.history.direct({
-                               url: hash,
-
-                               // When the url is either forward or backward in history include the entry
-                               // as data on the event object for merging as data in the navigate event
-                               present: function( historyEntry, direction ) {
-                                       // make sure to create a new object to pass down as the navigate event data
-                                       event.hashchangeState = $.extend({}, historyEntry);
-                                       event.hashchangeState.direction = direction;
-                               },
-
-                               // When we don't find a hash in our history clearly we're aiming to go there
-                               // record the entry as new for future traversal
-                               //
-                               // NOTE it's not entirely clear that this is the right thing to do given that we
-                               //      can't know the users intention. It might be better to explicitly _not_
-                               //      support location.hash assignment in preference to $.navigate calls
-                               // TODO first arg to add should be the href, but it causes issues in identifying
-                               //      embeded pages
-                               missing: function() {
-                                       history.add( hash, {
-                                               hash: hash,
-                                               title: document.title
-                                       });
-                               }
-                       });
-               }
-       });
-})( jQuery );
-
-
-
-(function( $, undefined ) {
-       // TODO consider queueing navigation activity until previous activities have completed
-       //      so that end users don't have to think about it. Punting for now
-       // TODO !! move the event bindings into callbacks on the navigate event
-       $.mobile.navigate = function( url, data, noEvents ) {
-               $.mobile.navigate.navigator.go( url, data, noEvents );
-       };
-
-       // expose the history on the navigate method in anticipation of full integration with
-       // existing navigation functionalty that is tightly coupled to the history information
-       $.mobile.navigate.history = new $.mobile.History();
-
-       // instantiate an instance of the navigator for use within the $.navigate method
-       $.mobile.navigate.navigator = new $.mobile.Navigator( $.mobile.navigate.history );
-
-       var loc = $.mobile.path.parseLocation();
-       $.mobile.navigate.history.add( loc.href, {hash: loc.hash} );
-})( jQuery );
-
-
-// This plugin is an experiment for abstracting away the touch and mouse
-// events so that developers don't have to worry about which method of input
-// the device their document is loaded on supports.
-//
-// The idea here is to allow the developer to register listeners for the
-// basic mouse events, such as mousedown, mousemove, mouseup, and click,
-// and the plugin will take care of registering the correct listeners
-// behind the scenes to invoke the listener at the fastest possible time
-// for that device, while still retaining the order of event firing in
-// the traditional mouse environment, should multiple handlers be registered
-// on the same element for different events.
-//
-// The current version exposes the following virtual events to jQuery bind methods:
-// "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel"
-
-(function( $, window, document, undefined ) {
-
-var dataPropertyName = "virtualMouseBindings",
-       touchTargetPropertyName = "virtualTouchID",
-       virtualEventNames = "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split( " " ),
-       touchEventProps = "clientX clientY pageX pageY screenX screenY".split( " " ),
-       mouseHookProps = $.event.mouseHooks ? $.event.mouseHooks.props : [],
-       mouseEventProps = $.event.props.concat( mouseHookProps ),
-       activeDocHandlers = {},
-       resetTimerID = 0,
-       startX = 0,
-       startY = 0,
-       didScroll = false,
-       clickBlockList = [],
-       blockMouseTriggers = false,
-       blockTouchTriggers = false,
-       eventCaptureSupported = "addEventListener" in document,
-       $document = $( document ),
-       nextTouchID = 1,
-       lastTouchID = 0, threshold;
-
-$.vmouse = {
-       moveDistanceThreshold: 10,
-       clickDistanceThreshold: 10,
-       resetTimerDuration: 1500
-};
-
-function getNativeEvent( event ) {
-
-       while ( event && typeof event.originalEvent !== "undefined" ) {
-               event = event.originalEvent;
-       }
-       return event;
-}
-
-function createVirtualEvent( event, eventType ) {
-
-       var t = event.type,
-               oe, props, ne, prop, ct, touch, i, j, len;
-
-       event = $.Event( event );
-       event.type = eventType;
-
-       oe = event.originalEvent;
-       props = $.event.props;
-
-       // addresses separation of $.event.props in to $.event.mouseHook.props and Issue 3280
-       // https://github.com/jquery/jquery-mobile/issues/3280
-       if ( t.search( /^(mouse|click)/ ) > -1 ) {
-               props = mouseEventProps;
-       }
-
-       // copy original event properties over to the new event
-       // this would happen if we could call $.event.fix instead of $.Event
-       // but we don't have a way to force an event to be fixed multiple times
-       if ( oe ) {
-               for ( i = props.length, prop; i; ) {
-                       prop = props[ --i ];
-                       event[ prop ] = oe[ prop ];
-               }
-       }
-
-       // make sure that if the mouse and click virtual events are generated
-       // without a .which one is defined
-       if ( t.search(/mouse(down|up)|click/) > -1 && !event.which ) {
-               event.which = 1;
-       }
-
-       if ( t.search(/^touch/) !== -1 ) {
-               ne = getNativeEvent( oe );
-               t = ne.touches;
-               ct = ne.changedTouches;
-               touch = ( t && t.length ) ? t[0] : ( ( ct && ct.length ) ? ct[ 0 ] : undefined );
-
-               if ( touch ) {
-                       for ( j = 0, len = touchEventProps.length; j < len; j++) {
-                               prop = touchEventProps[ j ];
-                               event[ prop ] = touch[ prop ];
-                       }
-               }
-       }
-
-       return event;
-}
-
-function getVirtualBindingFlags( element ) {
-
-       var flags = {},
-               b, k;
-
-       while ( element ) {
-
-               b = $.data( element, dataPropertyName );
-
-               for (  k in b ) {
-                       if ( b[ k ] ) {
-                               flags[ k ] = flags.hasVirtualBinding = true;
-                       }
-               }
-               element = element.parentNode;
-       }
-       return flags;
-}
-
-function getClosestElementWithVirtualBinding( element, eventType ) {
-       var b;
-       while ( element ) {
-
-               b = $.data( element, dataPropertyName );
-
-               if ( b && ( !eventType || b[ eventType ] ) ) {
-                       return element;
-               }
-               element = element.parentNode;
-       }
-       return null;
-}
-
-function enableTouchBindings() {
-       blockTouchTriggers = false;
-}
-
-function disableTouchBindings() {
-       blockTouchTriggers = true;
-}
-
-function enableMouseBindings() {
-       lastTouchID = 0;
-       clickBlockList.length = 0;
-       blockMouseTriggers = false;
-
-       // When mouse bindings are enabled, our
-       // touch bindings are disabled.
-       disableTouchBindings();
-}
-
-function disableMouseBindings() {
-       // When mouse bindings are disabled, our
-       // touch bindings are enabled.
-       enableTouchBindings();
-}
-
-function startResetTimer() {
-       clearResetTimer();
-       resetTimerID = setTimeout( function() {
-               resetTimerID = 0;
-               enableMouseBindings();
-       }, $.vmouse.resetTimerDuration );
-}
-
-function clearResetTimer() {
-       if ( resetTimerID ) {
-               clearTimeout( resetTimerID );
-               resetTimerID = 0;
-       }
-}
-
-function triggerVirtualEvent( eventType, event, flags ) {
-       var ve;
-
-       if ( ( flags && flags[ eventType ] ) ||
-                               ( !flags && getClosestElementWithVirtualBinding( event.target, eventType ) ) ) {
-
-               ve = createVirtualEvent( event, eventType );
-
-               $( event.target).trigger( ve );
-       }
-
-       return ve;
-}
-
-function mouseEventCallback( event ) {
-       var touchID = $.data( event.target, touchTargetPropertyName );
-
-       if ( !blockMouseTriggers && ( !lastTouchID || lastTouchID !== touchID ) ) {
-               var ve = triggerVirtualEvent( "v" + event.type, event );
-               if ( ve ) {
-                       if ( ve.isDefaultPrevented() ) {
-                               event.preventDefault();
-                       }
-                       if ( ve.isPropagationStopped() ) {
-                               event.stopPropagation();
-                       }
-                       if ( ve.isImmediatePropagationStopped() ) {
-                               event.stopImmediatePropagation();
-                       }
-               }
-       }
-}
-
-function handleTouchStart( event ) {
-
-       var touches = getNativeEvent( event ).touches,
-               target, flags;
-
-       if ( touches && touches.length === 1 ) {
-
-               target = event.target;
-               flags = getVirtualBindingFlags( target );
-
-               if ( flags.hasVirtualBinding ) {
-
-                       lastTouchID = nextTouchID++;
-                       $.data( target, touchTargetPropertyName, lastTouchID );
-
-                       clearResetTimer();
-
-                       disableMouseBindings();
-                       didScroll = false;
-
-                       var t = getNativeEvent( event ).touches[ 0 ];
-                       startX = t.pageX;
-                       startY = t.pageY;
-
-                       triggerVirtualEvent( "vmouseover", event, flags );
-                       triggerVirtualEvent( "vmousedown", event, flags );
-               }
-       }
-}
-
-function handleScroll( event ) {
-       if ( blockTouchTriggers ) {
-               return;
-       }
-
-       if ( !didScroll ) {
-               triggerVirtualEvent( "vmousecancel", event, getVirtualBindingFlags( event.target ) );
-       }
-
-       didScroll = true;
-       startResetTimer();
-}
-
-function handleTouchMove( event ) {
-       if ( blockTouchTriggers ) {
-               return;
-       }
-
-       var t = getNativeEvent( event ).touches[ 0 ],
-               didCancel = didScroll,
-               moveThreshold = $.vmouse.moveDistanceThreshold,
-               flags = getVirtualBindingFlags( event.target );
-
-               didScroll = didScroll ||
-                       ( Math.abs( t.pageX - startX ) > moveThreshold ||
-                               Math.abs( t.pageY - startY ) > moveThreshold );
-
-
-       if ( didScroll && !didCancel ) {
-               triggerVirtualEvent( "vmousecancel", event, flags );
-       }
-
-       triggerVirtualEvent( "vmousemove", event, flags );
-       startResetTimer();
-}
-
-function handleTouchEnd( event ) {
-       if ( blockTouchTriggers ) {
-               return;
-       }
-
-       disableTouchBindings();
-
-       var flags = getVirtualBindingFlags( event.target ),
-               t;
-       triggerVirtualEvent( "vmouseup", event, flags );
-
-       if ( !didScroll ) {
-               var ve = triggerVirtualEvent( "vclick", event, flags );
-               if ( ve && ve.isDefaultPrevented() ) {
-                       // The target of the mouse events that follow the touchend
-                       // event don't necessarily match the target used during the
-                       // touch. This means we need to rely on coordinates for blocking
-                       // any click that is generated.
-                       t = getNativeEvent( event ).changedTouches[ 0 ];
-                       clickBlockList.push({
-                               touchID: lastTouchID,
-                               x: t.clientX,
-                               y: t.clientY
-                       });
-
-                       // Prevent any mouse events that follow from triggering
-                       // virtual event notifications.
-                       blockMouseTriggers = true;
-               }
-       }
-       triggerVirtualEvent( "vmouseout", event, flags);
-       didScroll = false;
-
-       startResetTimer();
-}
-
-function hasVirtualBindings( ele ) {
-       var bindings = $.data( ele, dataPropertyName ),
-               k;
-
-       if ( bindings ) {
-               for ( k in bindings ) {
-                       if ( bindings[ k ] ) {
-                               return true;
-                       }
-               }
-       }
-       return false;
-}
-
-function dummyMouseHandler() {}
-
-function getSpecialEventObject( eventType ) {
-       var realType = eventType.substr( 1 );
-
-       return {
-               setup: function( data, namespace ) {
-                       // If this is the first virtual mouse binding for this element,
-                       // add a bindings object to its data.
-
-                       if ( !hasVirtualBindings( this ) ) {
-                               $.data( this, dataPropertyName, {} );
-                       }
-
-                       // If setup is called, we know it is the first binding for this
-                       // eventType, so initialize the count for the eventType to zero.
-                       var bindings = $.data( this, dataPropertyName );
-                       bindings[ eventType ] = true;
-
-                       // If this is the first virtual mouse event for this type,
-                       // register a global handler on the document.
-
-                       activeDocHandlers[ eventType ] = ( activeDocHandlers[ eventType ] || 0 ) + 1;
-
-                       if ( activeDocHandlers[ eventType ] === 1 ) {
-                               $document.bind( realType, mouseEventCallback );
-                       }
-
-                       // Some browsers, like Opera Mini, won't dispatch mouse/click events
-                       // for elements unless they actually have handlers registered on them.
-                       // To get around this, we register dummy handlers on the elements.
-
-                       $( this ).bind( realType, dummyMouseHandler );
-
-                       // For now, if event capture is not supported, we rely on mouse handlers.
-                       if ( eventCaptureSupported ) {
-                               // If this is the first virtual mouse binding for the document,
-                               // register our touchstart handler on the document.
-
-                               activeDocHandlers[ "touchstart" ] = ( activeDocHandlers[ "touchstart" ] || 0) + 1;
-
-                               if ( activeDocHandlers[ "touchstart" ] === 1 ) {
-                                       $document.bind( "touchstart", handleTouchStart )
-                                               .bind( "touchend", handleTouchEnd )
-
-                                               // On touch platforms, touching the screen and then dragging your finger
-                                               // causes the window content to scroll after some distance threshold is
-                                               // exceeded. On these platforms, a scroll prevents a click event from being
-                                               // dispatched, and on some platforms, even the touchend is suppressed. To
-                                               // mimic the suppression of the click event, we need to watch for a scroll
-                                               // event. Unfortunately, some platforms like iOS don't dispatch scroll
-                                               // events until *AFTER* the user lifts their finger (touchend). This means
-                                               // we need to watch both scroll and touchmove events to figure out whether
-                                               // or not a scroll happenens before the touchend event is fired.
-
-                                               .bind( "touchmove", handleTouchMove )
-                                               .bind( "scroll", handleScroll );
-                               }
-                       }
-               },
-
-               teardown: function( data, namespace ) {
-                       // If this is the last virtual binding for this eventType,
-                       // remove its global handler from the document.
-
-                       --activeDocHandlers[ eventType ];
-
-                       if ( !activeDocHandlers[ eventType ] ) {
-                               $document.unbind( realType, mouseEventCallback );
-                       }
-
-                       if ( eventCaptureSupported ) {
-                               // If this is the last virtual mouse binding in existence,
-                               // remove our document touchstart listener.
-
-                               --activeDocHandlers[ "touchstart" ];
-
-                               if ( !activeDocHandlers[ "touchstart" ] ) {
-                                       $document.unbind( "touchstart", handleTouchStart )
-                                               .unbind( "touchmove", handleTouchMove )
-                                               .unbind( "touchend", handleTouchEnd )
-                                               .unbind( "scroll", handleScroll );
-                               }
-                       }
-
-                       var $this = $( this ),
-                               bindings = $.data( this, dataPropertyName );
-
-                       // teardown may be called when an element was
-                       // removed from the DOM. If this is the case,
-                       // jQuery core may have already stripped the element
-                       // of any data bindings so we need to check it before
-                       // using it.
-                       if ( bindings ) {
-                               bindings[ eventType ] = false;
-                       }
-
-                       // Unregister the dummy event handler.
-
-                       $this.unbind( realType, dummyMouseHandler );
-
-                       // If this is the last virtual mouse binding on the
-                       // element, remove the binding data from the element.
-
-                       if ( !hasVirtualBindings( this ) ) {
-                               $this.removeData( dataPropertyName );
-                       }
-               }
-       };
-}
-
-// Expose our custom events to the jQuery bind/unbind mechanism.
-
-for ( var i = 0; i < virtualEventNames.length; i++ ) {
-       $.event.special[ virtualEventNames[ i ] ] = getSpecialEventObject( virtualEventNames[ i ] );
-}
-
-// Add a capture click handler to block clicks.
-// Note that we require event capture support for this so if the device
-// doesn't support it, we punt for now and rely solely on mouse events.
-if ( eventCaptureSupported ) {
-       document.addEventListener( "click", function( e ) {
-               var cnt = clickBlockList.length,
-                       target = e.target,
-                       x, y, ele, i, o, touchID;
-
-               if ( cnt ) {
-                       x = e.clientX;
-                       y = e.clientY;
-                       threshold = $.vmouse.clickDistanceThreshold;
-
-                       // The idea here is to run through the clickBlockList to see if
-                       // the current click event is in the proximity of one of our
-                       // vclick events that had preventDefault() called on it. If we find
-                       // one, then we block the click.
-                       //
-                       // Why do we have to rely on proximity?
-                       //
-                       // Because the target of the touch event that triggered the vclick
-                       // can be different from the target of the click event synthesized
-                       // by the browser. The target of a mouse/click event that is syntehsized
-                       // from a touch event seems to be implementation specific. For example,
-                       // some browsers will fire mouse/click events for a link that is near
-                       // a touch event, even though the target of the touchstart/touchend event
-                       // says the user touched outside the link. Also, it seems that with most
-                       // browsers, the target of the mouse/click event is not calculated until the
-                       // time it is dispatched, so if you replace an element that you touched
-                       // with another element, the target of the mouse/click will be the new
-                       // element underneath that point.
-                       //
-                       // Aside from proximity, we also check to see if the target and any
-                       // of its ancestors were the ones that blocked a click. This is necessary
-                       // because of the strange mouse/click target calculation done in the
-                       // Android 2.1 browser, where if you click on an element, and there is a
-                       // mouse/click handler on one of its ancestors, the target will be the
-                       // innermost child of the touched element, even if that child is no where
-                       // near the point of touch.
-
-                       ele = target;
-
-                       while ( ele ) {
-                               for ( i = 0; i < cnt; i++ ) {
-                                       o = clickBlockList[ i ];
-                                       touchID = 0;
-
-                                       if ( ( ele === target && Math.abs( o.x - x ) < threshold && Math.abs( o.y - y ) < threshold ) ||
-                                                               $.data( ele, touchTargetPropertyName ) === o.touchID ) {
-                                               // XXX: We may want to consider removing matches from the block list
-                                               //      instead of waiting for the reset timer to fire.
-                                               e.preventDefault();
-                                               e.stopPropagation();
-                                               return;
-                                       }
-                               }
-                               ele = ele.parentNode;
-                       }
-               }
-       }, true);
-}
-})( jQuery, window, document );
-
-
-(function( $, window, undefined ) {
-       var $document = $( document );
-
-       // add new event shortcuts
-       $.each( ( "touchstart touchmove touchend " +
-               "tap taphold " +
-               "swipe swipeleft swiperight " +
-               "scrollstart scrollstop" ).split( " " ), function( i, name ) {
-
-               $.fn[ name ] = function( fn ) {
-                       return fn ? this.bind( name, fn ) : this.trigger( name );
-               };
-
-               // jQuery < 1.8
-               if ( $.attrFn ) {
-                       $.attrFn[ name ] = true;
-               }
-       });
-
-       var supportTouch = $.mobile.support.touch,
-               scrollEvent = "touchmove scroll",
-               touchStartEvent = supportTouch ? "touchstart" : "mousedown",
-               touchStopEvent = supportTouch ? "touchend" : "mouseup",
-               touchMoveEvent = supportTouch ? "touchmove" : "mousemove";
-
-       function triggerCustomEvent( obj, eventType, event ) {
-               var originalType = event.type;
-               event.type = eventType;
-               $.event.dispatch.call( obj, event );
-               event.type = originalType;
-       }
-
-       // also handles scrollstop
-       $.event.special.scrollstart = {
-
-               enabled: true,
-
-               setup: function() {
-
-                       var thisObject = this,
-                               $this = $( thisObject ),
-                               scrolling,
-                               timer;
-
-                       function trigger( event, state ) {
-                               scrolling = state;
-                               triggerCustomEvent( thisObject, scrolling ? "scrollstart" : "scrollstop", event );
-                       }
-
-                       // iPhone triggers scroll after a small delay; use touchmove instead
-                       $this.bind( scrollEvent, function( event ) {
-
-                               if ( !$.event.special.scrollstart.enabled ) {
-                                       return;
-                               }
-
-                               if ( !scrolling ) {
-                                       trigger( event, true );
-                               }
-
-                               clearTimeout( timer );
-                               timer = setTimeout( function() {
-                                       trigger( event, false );
-                               }, 50 );
-                       });
-               }
-       };
-
-       // also handles taphold
-       $.event.special.tap = {
-               tapholdThreshold: 750,
-
-               setup: function() {
-                       var thisObject = this,
-                               $this = $( thisObject );
-
-                       $this.bind( "vmousedown", function( event ) {
-
-                               if ( event.which && event.which !== 1 ) {
-                                       return false;
-                               }
-
-                               var origTarget = event.target,
-                                       origEvent = event.originalEvent,
-                                       timer;
-
-                               function clearTapTimer() {
-                                       clearTimeout( timer );
-                               }
-
-                               function clearTapHandlers() {
-                                       clearTapTimer();
-
-                                       $this.unbind( "vclick", clickHandler )
-                                               .unbind( "vmouseup", clearTapTimer );
-                                       $document.unbind( "vmousecancel", clearTapHandlers );
-                               }
-
-                               function clickHandler( event ) {
-                                       clearTapHandlers();
-
-                                       // ONLY trigger a 'tap' event if the start target is
-                                       // the same as the stop target.
-                                       if ( origTarget === event.target ) {
-                                               triggerCustomEvent( thisObject, "tap", event );
-                                       }
-                               }
-
-                               $this.bind( "vmouseup", clearTapTimer )
-                                       .bind( "vclick", clickHandler );
-                               $document.bind( "vmousecancel", clearTapHandlers );
-
-                               timer = setTimeout( function() {
-                                       triggerCustomEvent( thisObject, "taphold", $.Event( "taphold", { target: origTarget } ) );
-                               }, $.event.special.tap.tapholdThreshold );
-                       });
-               }
-       };
-
-       // also handles swipeleft, swiperight
-       $.event.special.swipe = {
-               scrollSupressionThreshold: 30, // More than this horizontal displacement, and we will suppress scrolling.
-
-               durationThreshold: 1000, // More time than this, and it isn't a swipe.
-
-               horizontalDistanceThreshold: 30,  // Swipe horizontal displacement must be more than this.
-
-               verticalDistanceThreshold: 75,  // Swipe vertical displacement must be less than this.
-
-               start: function( event ) {
-                       var data = event.originalEvent.touches ?
-                                       event.originalEvent.touches[ 0 ] : event;
-                       return {
-                                               time: ( new Date() ).getTime(),
-                                               coords: [ data.pageX, data.pageY ],
-                                               origin: $( event.target )
-                                       };
-               },
-
-               stop: function( event ) {
-                       var data = event.originalEvent.touches ?
-                                       event.originalEvent.touches[ 0 ] : event;
-                       return {
-                                               time: ( new Date() ).getTime(),
-                                               coords: [ data.pageX, data.pageY ]
-                                       };
-               },
-
-               handleSwipe: function( start, stop ) {
-                       if ( stop.time - start.time < $.event.special.swipe.durationThreshold &&
-                               Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.horizontalDistanceThreshold &&
-                               Math.abs( start.coords[ 1 ] - stop.coords[ 1 ] ) < $.event.special.swipe.verticalDistanceThreshold ) {
-
-                               start.origin.trigger( "swipe" )
-                                       .trigger( start.coords[0] > stop.coords[ 0 ] ? "swipeleft" : "swiperight" );
-                       }
-               },
-
-               setup: function() {
-                       var thisObject = this,
-                               $this = $( thisObject );
-
-                       $this.bind( touchStartEvent, function( event ) {
-                               var start = $.event.special.swipe.start( event ),
-                                       stop;
-
-                               function moveHandler( event ) {
-                                       if ( !start ) {
-                                               return;
-                                       }
-
-                                       stop = $.event.special.swipe.stop( event );
-
-                                       // prevent scrolling
-                                       if ( Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.scrollSupressionThreshold ) {
-                                               event.preventDefault();
-                                       }
-                               }
-
-                               $this.bind( touchMoveEvent, moveHandler )
-                                       .one( touchStopEvent, function() {
-                                               $this.unbind( touchMoveEvent, moveHandler );
-
-                                               if ( start && stop ) {
-                                                       $.event.special.swipe.handleSwipe( start, stop );
-                                               }
-                                               start = stop = undefined;
-                                       });
-                       });
-               }
-       };
-       $.each({
-               scrollstop: "scrollstart",
-               taphold: "tap",
-               swipeleft: "swipe",
-               swiperight: "swipe"
-       }, function( event, sourceEvent ) {
-
-               $.event.special[ event ] = {
-                       setup: function() {
-                               $( this ).bind( sourceEvent, $.noop );
-                       }
-               };
-       });
-
-})( jQuery, this );
-
-
-       // throttled resize event
-       (function( $ ) {
-               $.event.special.throttledresize = {
-                       setup: function() {
-                               $( this ).bind( "resize", handler );
-                       },
-                       teardown: function() {
-                               $( this ).unbind( "resize", handler );
-                       }
-               };
-
-               var throttle = 250,
-                       handler = function() {
-                               curr = ( new Date() ).getTime();
-                               diff = curr - lastCall;
-
-                               if ( diff >= throttle ) {
-
-                                       lastCall = curr;
-                                       $( this ).trigger( "throttledresize" );
-
-                               } else {
-
-                                       if ( heldCall ) {
-                                               clearTimeout( heldCall );
-                                       }
-
-                                       // Promise a held call will still execute
-                                       heldCall = setTimeout( handler, throttle - diff );
-                               }
-                       },
-                       lastCall = 0,
-                       heldCall,
-                       curr,
-                       diff;
-       })( jQuery );
-
-(function( $, window ) {
-       var win = $( window ),
-               event_name = "orientationchange",
-               special_event,
-               get_orientation,
-               last_orientation,
-               initial_orientation_is_landscape,
-               initial_orientation_is_default,
-               portrait_map = { "0": true, "180": true };
-
-       // It seems that some device/browser vendors use window.orientation values 0 and 180 to
-       // denote the "default" orientation. For iOS devices, and most other smart-phones tested,
-       // the default orientation is always "portrait", but in some Android and RIM based tablets,
-       // the default orientation is "landscape". The following code attempts to use the window
-       // dimensions to figure out what the current orientation is, and then makes adjustments
-       // to the to the portrait_map if necessary, so that we can properly decode the
-       // window.orientation value whenever get_orientation() is called.
-       //
-       // Note that we used to use a media query to figure out what the orientation the browser
-       // thinks it is in:
-       //
-       //     initial_orientation_is_landscape = $.mobile.media("all and (orientation: landscape)");
-       //
-       // but there was an iPhone/iPod Touch bug beginning with iOS 4.2, up through iOS 5.1,
-       // where the browser *ALWAYS* applied the landscape media query. This bug does not
-       // happen on iPad.
-
-       if ( $.support.orientation ) {
-
-               // Check the window width and height to figure out what the current orientation
-               // of the device is at this moment. Note that we've initialized the portrait map
-               // values to 0 and 180, *AND* we purposely check for landscape so that if we guess
-               // wrong, , we default to the assumption that portrait is the default orientation.
-               // We use a threshold check below because on some platforms like iOS, the iPhone
-               // form-factor can report a larger width than height if the user turns on the
-               // developer console. The actual threshold value is somewhat arbitrary, we just
-               // need to make sure it is large enough to exclude the developer console case.
-
-               var ww = window.innerWidth || win.width(),
-                       wh = window.innerHeight || win.height(),
-                       landscape_threshold = 50;
-
-               initial_orientation_is_landscape = ww > wh && ( ww - wh ) > landscape_threshold;
-
-
-               // Now check to see if the current window.orientation is 0 or 180.
-               initial_orientation_is_default = portrait_map[ window.orientation ];
-
-               // If the initial orientation is landscape, but window.orientation reports 0 or 180, *OR*
-               // if the initial orientation is portrait, but window.orientation reports 90 or -90, we
-               // need to flip our portrait_map values because landscape is the default orientation for
-               // this device/browser.
-               if ( ( initial_orientation_is_landscape && initial_orientation_is_default ) || ( !initial_orientation_is_landscape && !initial_orientation_is_default ) ) {
-                       portrait_map = { "-90": true, "90": true };
-               }
-       }
-
-       $.event.special.orientationchange = $.extend( {}, $.event.special.orientationchange, {
-               setup: function() {
-                       // If the event is supported natively, return false so that jQuery
-                       // will bind to the event using DOM methods.
-                       if ( $.support.orientation && !$.event.special.orientationchange.disabled ) {
-                               return false;
-                       }
-
-                       // Get the current orientation to avoid initial double-triggering.
-                       last_orientation = get_orientation();
-
-                       // Because the orientationchange event doesn't exist, simulate the
-                       // event by testing window dimensions on resize.
-                       win.bind( "throttledresize", handler );
-               },
-               teardown: function() {
-                       // If the event is not supported natively, return false so that
-                       // jQuery will unbind the event using DOM methods.
-                       if ( $.support.orientation && !$.event.special.orientationchange.disabled ) {
-                               return false;
-                       }
-
-                       // Because the orientationchange event doesn't exist, unbind the
-                       // resize event handler.
-                       win.unbind( "throttledresize", handler );
-               },
-               add: function( handleObj ) {
-                       // Save a reference to the bound event handler.
-                       var old_handler = handleObj.handler;
-
-
-                       handleObj.handler = function( event ) {
-                               // Modify event object, adding the .orientation property.
-                               event.orientation = get_orientation();
-
-                               // Call the originally-bound event handler and return its result.
-                               return old_handler.apply( this, arguments );
-                       };
-               }
-       });
-
-       // If the event is not supported natively, this handler will be bound to
-       // the window resize event to simulate the orientationchange event.
-       function handler() {
-               // Get the current orientation.
-               var orientation = get_orientation();
-
-               if ( orientation !== last_orientation ) {
-                       // The orientation has changed, so trigger the orientationchange event.
-                       last_orientation = orientation;
-                       win.trigger( event_name );
-               }
-       }
-
-       // Get the current page orientation. This method is exposed publicly, should it
-       // be needed, as jQuery.event.special.orientationchange.orientation()
-       $.event.special.orientationchange.orientation = get_orientation = function() {
-               var isPortrait = true, elem = document.documentElement;
-
-               // prefer window orientation to the calculation based on screensize as
-               // the actual screen resize takes place before or after the orientation change event
-               // has been fired depending on implementation (eg android 2.3 is before, iphone after).
-               // More testing is required to determine if a more reliable method of determining the new screensize
-               // is possible when orientationchange is fired. (eg, use media queries + element + opacity)
-               if ( $.support.orientation ) {
-                       // if the window orientation registers as 0 or 180 degrees report
-                       // portrait, otherwise landscape
-                       isPortrait = portrait_map[ window.orientation ];
-               } else {
-                       isPortrait = elem && elem.clientWidth / elem.clientHeight < 1.1;
-               }
-
-               return isPortrait ? "portrait" : "landscape";
-       };
-
-       $.fn[ event_name ] = function( fn ) {
-               return fn ? this.bind( event_name, fn ) : this.trigger( event_name );
-       };
-
-       // jQuery < 1.8
-       if ( $.attrFn ) {
-               $.attrFn[ event_name ] = true;
-       }
-
-}( jQuery, this ));
-
-
-
-(function( $, undefined ) {
-
-$.widget( "mobile.page", $.mobile.widget, {
-       options: {
-               theme: "c",
-               domCache: false,
-               keepNativeDefault: ":jqmData(role='none'), :jqmData(role='nojs')"
-       },
-
-       _create: function() {
-               // if false is returned by the callbacks do not create the page
-               if ( this._trigger( "beforecreate" ) === false ) {
-                       return false;
-               }
-
-               this.element
-                       .attr( "tabindex", "0" )
-                       .addClass( "ui-page ui-body-" + this.options.theme );
-
-               this._on( this.element, {
-                       pagebeforehide: "removeContainerBackground",
-                       pagebeforeshow: "_handlePageBeforeShow"
-               });
-       },
-
-       _handlePageBeforeShow: function( e ) {
-               this.setContainerBackground();
-       },
-
-       removeContainerBackground: function() {
-               $.mobile.pageContainer.removeClass( "ui-overlay-" + $.mobile.getInheritedTheme( this.element.parent() ) );
-       },
-
-       // set the page container background to the page theme
-       setContainerBackground: function( theme ) {
-               if ( this.options.theme ) {
-                       $.mobile.pageContainer.addClass( "ui-overlay-" + ( theme || this.options.theme ) );
-               }
-       },
-
-       keepNativeSelector: function() {
-               var options = this.options,
-                       keepNativeDefined = options.keepNative && $.trim( options.keepNative );
-
-               if ( keepNativeDefined && options.keepNative !== options.keepNativeDefault ) {
-                       return [options.keepNative, options.keepNativeDefault].join( ", " );
-               }
-
-               return options.keepNativeDefault;
-       }
-});
-})( jQuery );
-
-(function( $, window, undefined ) {
-
-var createHandler = function( sequential ) {
-
-       // Default to sequential
-       if ( sequential === undefined ) {
-               sequential = true;
-       }
-
-       return function( name, reverse, $to, $from ) {
-
-               var deferred = new $.Deferred(),
-                       reverseClass = reverse ? " reverse" : "",
-                       active  = $.mobile.urlHistory.getActive(),
-                       toScroll = active.lastScroll || $.mobile.defaultHomeScroll,
-                       screenHeight = $.mobile.getScreenHeight(),
-                       maxTransitionOverride = $.mobile.maxTransitionWidth !== false && $.mobile.window.width() > $.mobile.maxTransitionWidth,
-                       none = !$.support.cssTransitions || maxTransitionOverride || !name || name === "none" || Math.max( $.mobile.window.scrollTop(), toScroll ) > $.mobile.getMaxScrollForTransition(),
-                       toPreClass = " ui-page-pre-in",
-                       toggleViewportClass = function() {
-                               $.mobile.pageContainer.toggleClass( "ui-mobile-viewport-transitioning viewport-" + name );
-                       },
-                       scrollPage = function() {
-                               // By using scrollTo instead of silentScroll, we can keep things better in order
-                               // Just to be precautios, disable scrollstart listening like silentScroll would
-                               $.event.special.scrollstart.enabled = false;
-
-                               window.scrollTo( 0, toScroll );
-
-                               // reenable scrollstart listening like silentScroll would
-                               setTimeout( function() {
-                                       $.event.special.scrollstart.enabled = true;
-                               }, 150 );
-                       },
-                       cleanFrom = function() {
-                               $from
-                                       .removeClass( $.mobile.activePageClass + " out in reverse " + name )
-                                       .height( "" );
-                       },
-                       startOut = function() {
-                               // if it's not sequential, call the doneOut transition to start the TO page animating in simultaneously
-                               if ( !sequential ) {
-                                       doneOut();
-                               }
-                               else {
-                                       $from.animationComplete( doneOut );
-                               }
-
-                               // Set the from page's height and start it transitioning out
-                               // Note: setting an explicit height helps eliminate tiling in the transitions
-                               $from
-                                       .height( screenHeight + $.mobile.window.scrollTop() )
-                                       .addClass( name + " out" + reverseClass );
-                       },
-
-                       doneOut = function() {
-
-                               if ( $from && sequential ) {
-                                       cleanFrom();
-                               }
-
-                               startIn();
-                       },
-
-                       startIn = function() {
-
-                               // Prevent flickering in phonegap container: see comments at #4024 regarding iOS
-                               $to.css( "z-index", -10 );
-
-                               $to.addClass( $.mobile.activePageClass + toPreClass );
-
-                               // Send focus to page as it is now display: block
-                               $.mobile.focusPage( $to );
-
-                               // Set to page height
-                               $to.height( screenHeight + toScroll );
-
-                               scrollPage();
-
-                               // Restores visibility of the new page: added together with $to.css( "z-index", -10 );
-                               $to.css( "z-index", "" );
-
-                               if ( !none ) {
-                                       $to.animationComplete( doneIn );
-                               }
-
-                               $to
-                                       .removeClass( toPreClass )
-                                       .addClass( name + " in" + reverseClass );
-
-                               if ( none ) {
-                                       doneIn();
-                               }
-
-                       },
-
-                       doneIn = function() {
-
-                               if ( !sequential ) {
-
-                                       if ( $from ) {
-                                               cleanFrom();
-                                       }
-                               }
-
-                               $to
-                                       .removeClass( "out in reverse " + name )
-                                       .height( "" );
-
-                               toggleViewportClass();
-
-                               // In some browsers (iOS5), 3D transitions block the ability to scroll to the desired location during transition
-                               // This ensures we jump to that spot after the fact, if we aren't there already.
-                               if ( $.mobile.window.scrollTop() !== toScroll ) {
-                                       scrollPage();
-                               }
-
-                               deferred.resolve( name, reverse, $to, $from, true );
-                       };
-
-               toggleViewportClass();
-
-               if ( $from && !none ) {
-                       startOut();
-               }
-               else {
-                       doneOut();
-               }
-
-               return deferred.promise();
-       };
-};
-
-// generate the handlers from the above
-var sequentialHandler = createHandler(),
-       simultaneousHandler = createHandler( false ),
-       defaultGetMaxScrollForTransition = function() {
-               return $.mobile.getScreenHeight() * 3;
-       };
-
-// Make our transition handler the public default.
-$.mobile.defaultTransitionHandler = sequentialHandler;
-
-//transition handler dictionary for 3rd party transitions
-$.mobile.transitionHandlers = {
-       "default": $.mobile.defaultTransitionHandler,
-       "sequential": sequentialHandler,
-       "simultaneous": simultaneousHandler
-};
-
-$.mobile.transitionFallbacks = {};
-
-// If transition is defined, check if css 3D transforms are supported, and if not, if a fallback is specified
-$.mobile._maybeDegradeTransition = function( transition ) {
-               if ( transition && !$.support.cssTransform3d && $.mobile.transitionFallbacks[ transition ] ) {
-                       transition = $.mobile.transitionFallbacks[ transition ];
-               }
-
-               return transition;
-};
-
-// Set the getMaxScrollForTransition to default if no implementation was set by user
-$.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defaultGetMaxScrollForTransition;
-})( jQuery, this );
-
-(function( $, undefined ) {
-
-       //define vars for interal use
-       var $window = $.mobile.window,
-               $html = $( 'html' ),
-               $head = $( 'head' ),
-
-               // NOTE: path extensions dependent on core attributes. Moved here to remove deps from
-               //       $.mobile.path definition
-               path = $.extend($.mobile.path, {
-
-                       //return the substring of a filepath before the sub-page key, for making a server request
-                       getFilePath: function( path ) {
-                               var splitkey = '&' + $.mobile.subPageUrlKey;
-                               return path && path.split( splitkey )[0].split( dialogHashKey )[0];
-                       },
-
-                       //check if the specified url refers to the first page in the main application document.
-                       isFirstPageUrl: function( url ) {
-                               // We only deal with absolute paths.
-                               var u = path.parseUrl( path.makeUrlAbsolute( url, this.documentBase ) ),
-
-                                       // Does the url have the same path as the document?
-                                       samePath = u.hrefNoHash === this.documentUrl.hrefNoHash || ( this.documentBaseDiffers && u.hrefNoHash === this.documentBase.hrefNoHash ),
-
-                                       // Get the first page element.
-                                       fp = $.mobile.firstPage,
-
-                                       // Get the id of the first page element if it has one.
-                                       fpId = fp && fp[0] ? fp[0].id : undefined;
-
-                               // The url refers to the first page if the path matches the document and
-                               // it either has no hash value, or the hash is exactly equal to the id of the
-                               // first page element.
-                               return samePath && ( !u.hash || u.hash === "#" || ( fpId && u.hash.replace( /^#/, "" ) === fpId ) );
-                       },
-
-                       // Some embedded browsers, like the web view in Phone Gap, allow cross-domain XHR
-                       // requests if the document doing the request was loaded via the file:// protocol.
-                       // This is usually to allow the application to "phone home" and fetch app specific
-                       // data. We normally let the browser handle external/cross-domain urls, but if the
-                       // allowCrossDomainPages option is true, we will allow cross-domain http/https
-                       // requests to go through our page loading logic.
-                       isPermittedCrossDomainRequest: function( docUrl, reqUrl ) {
-                               return $.mobile.allowCrossDomainPages &&
-                                       docUrl.protocol === "file:" &&
-                                       reqUrl.search( /^https?:/ ) !== -1;
-                       }
-               }),
-
-               // used to track last vclicked element to make sure its value is added to form data
-               $lastVClicked = null,
-
-               //will be defined when a link is clicked and given an active class
-               $activeClickedLink = null,
-
-               // resolved on domready
-               domreadyDeferred = $.Deferred(),
-
-               //urlHistory is purely here to make guesses at whether the back or forward button was clicked
-               //and provide an appropriate transition
-               urlHistory = $.mobile.navigate.history,
-
-               //define first selector to receive focus when a page is shown
-               focusable = "[tabindex],a,button:visible,select:visible,input",
-
-               //queue to hold simultanious page transitions
-               pageTransitionQueue = [],
-
-               //indicates whether or not page is in process of transitioning
-               isPageTransitioning = false,
-
-               //nonsense hash change key for dialogs, so they create a history entry
-               dialogHashKey = "&ui-state=dialog",
-
-               //existing base tag?
-               $base = $head.children( "base" ),
-
-               //tuck away the original document URL minus any fragment.
-               documentUrl = path.documentUrl,
-
-               //if the document has an embedded base tag, documentBase is set to its
-               //initial value. If a base tag does not exist, then we default to the documentUrl.
-               documentBase = path.documentBase,
-
-               //cache the comparison once.
-               documentBaseDiffers = path.documentBaseDiffers,
-
-               getScreenHeight = $.mobile.getScreenHeight;
-
-               //base element management, defined depending on dynamic base tag support
-               var base = $.support.dynamicBaseTag ? {
-
-                       //define base element, for use in routing asset urls that are referenced in Ajax-requested markup
-                       element: ( $base.length ? $base : $( "<base>", { href: documentBase.hrefNoHash } ).prependTo( $head ) ),
-
-                       //set the generated BASE element's href attribute to a new page's base path
-                       set: function( href ) {
-                               href = path.parseUrl(href).hrefNoHash;
-                               base.element.attr( "href", path.makeUrlAbsolute( href, documentBase ) );
-                       },
-
-                       //set the generated BASE element's href attribute to a new page's base path
-                       reset: function() {
-                               base.element.attr( "href", documentBase.hrefNoSearch );
-                       }
-
-               } : undefined;
-
-
-       //return the original document url
-       $.mobile.getDocumentUrl = path.getDocumentUrl;
-
-       //return the original document base url
-       $.mobile.getDocumentBase = path.getDocumentBase;
-
-       /* internal utility functions */
-
-       // NOTE Issue #4950 Android phonegap doesn't navigate back properly
-       //      when a full page refresh has taken place. It appears that hashchange
-       //      and replacestate history alterations work fine but we need to support
-       //      both forms of history traversal in our code that uses backward history
-       //      movement
-       $.mobile.back = function() {
-               var nav = window.navigator;
-
-               // if the setting is on and the navigator object is
-               // available use the phonegap navigation capability
-               if( this.phonegapNavigationEnabled &&
-                       nav &&
-                       nav.app &&
-                       nav.app.backHistory ){
-                       nav.app.backHistory();
-               } else {
-                       window.history.back();
-               }
-       };
-
-       //direct focus to the page title, or otherwise first focusable element
-       $.mobile.focusPage = function ( page ) {
-               var autofocus = page.find( "[autofocus]" ),
-                       pageTitle = page.find( ".ui-title:eq(0)" );
-
-               if ( autofocus.length ) {
-                       autofocus.focus();
-                       return;
-               }
-
-               if ( pageTitle.length ) {
-                       pageTitle.focus();
-               } else{
-                       page.focus();
-               }
-       };
-
-       //remove active classes after page transition or error
-       function removeActiveLinkClass( forceRemoval ) {
-               if ( !!$activeClickedLink && ( !$activeClickedLink.closest( "." + $.mobile.activePageClass ).length || forceRemoval ) ) {
-                       $activeClickedLink.removeClass( $.mobile.activeBtnClass );
-               }
-               $activeClickedLink = null;
-       }
-
-       function releasePageTransitionLock() {
-               isPageTransitioning = false;
-               if ( pageTransitionQueue.length > 0 ) {
-                       $.mobile.changePage.apply( null, pageTransitionQueue.pop() );
-               }
-       }
-
-       // Save the last scroll distance per page, before it is hidden
-       var setLastScrollEnabled = true,
-               setLastScroll, delayedSetLastScroll;
-
-       setLastScroll = function() {
-               // this barrier prevents setting the scroll value based on the browser
-               // scrolling the window based on a hashchange
-               if ( !setLastScrollEnabled ) {
-                       return;
-               }
-
-               var active = $.mobile.urlHistory.getActive();
-
-               if ( active ) {
-                       var lastScroll = $window.scrollTop();
-
-                       // Set active page's lastScroll prop.
-                       // If the location we're scrolling to is less than minScrollBack, let it go.
-                       active.lastScroll = lastScroll < $.mobile.minScrollBack ? $.mobile.defaultHomeScroll : lastScroll;
-               }
-       };
-
-       // bind to scrollstop to gather scroll position. The delay allows for the hashchange
-       // event to fire and disable scroll recording in the case where the browser scrolls
-       // to the hash targets location (sometimes the top of the page). once pagechange fires
-       // getLastScroll is again permitted to operate
-       delayedSetLastScroll = function() {
-               setTimeout( setLastScroll, 100 );
-       };
-
-       // disable an scroll setting when a hashchange has been fired, this only works
-       // because the recording of the scroll position is delayed for 100ms after
-       // the browser might have changed the position because of the hashchange
-       $window.bind( $.support.pushState ? "popstate" : "hashchange", function() {
-               setLastScrollEnabled = false;
-       });
-
-       // handle initial hashchange from chrome :(
-       $window.one( $.support.pushState ? "popstate" : "hashchange", function() {
-               setLastScrollEnabled = true;
-       });
-
-       // wait until the mobile page container has been determined to bind to pagechange
-       $window.one( "pagecontainercreate", function() {
-               // once the page has changed, re-enable the scroll recording
-               $.mobile.pageContainer.bind( "pagechange", function() {
-
-                       setLastScrollEnabled = true;
-
-                       // remove any binding that previously existed on the get scroll
-                       // which may or may not be different than the scroll element determined for
-                       // this page previously
-                       $window.unbind( "scrollstop", delayedSetLastScroll );
-
-                       // determine and bind to the current scoll element which may be the window
-                       // or in the case of touch overflow the element with touch overflow
-                       $window.bind( "scrollstop", delayedSetLastScroll );
-               });
-       });
-
-       // bind to scrollstop for the first page as "pagechange" won't be fired in that case
-       $window.bind( "scrollstop", delayedSetLastScroll );
-
-       // No-op implementation of transition degradation
-       $.mobile._maybeDegradeTransition = $.mobile._maybeDegradeTransition || function( transition ) {
-               return transition;
-       };
-
-       //function for transitioning between two existing pages
-       function transitionPages( toPage, fromPage, transition, reverse ) {
-               if ( fromPage ) {
-                       //trigger before show/hide events
-                       fromPage.data( "mobile-page" )._trigger( "beforehide", null, { nextPage: toPage } );
-               }
-
-               toPage.data( "mobile-page" )._trigger( "beforeshow", null, { prevPage: fromPage || $( "" ) } );
-
-               //clear page loader
-               $.mobile.hidePageLoadingMsg();
-
-               transition = $.mobile._maybeDegradeTransition( transition );
-
-               //find the transition handler for the specified transition. If there
-               //isn't one in our transitionHandlers dictionary, use the default one.
-               //call the handler immediately to kick-off the transition.
-               var th = $.mobile.transitionHandlers[ transition || "default" ] || $.mobile.defaultTransitionHandler,
-                       promise = th( transition, reverse, toPage, fromPage );
-
-               promise.done(function() {
-                       //trigger show/hide events
-                       if ( fromPage ) {
-                               fromPage.data( "mobile-page" )._trigger( "hide", null, { nextPage: toPage } );
-                       }
-
-                       //trigger pageshow, define prevPage as either fromPage or empty jQuery obj
-                       toPage.data( "mobile-page" )._trigger( "show", null, { prevPage: fromPage || $( "" ) } );
-               });
-
-               return promise;
-       }
-
-       //simply set the active page's minimum height to screen height, depending on orientation
-       $.mobile.resetActivePageHeight = function resetActivePageHeight( height ) {
-               var aPage = $( "." + $.mobile.activePageClass ),
-                       aPagePadT = parseFloat( aPage.css( "padding-top" ) ),
-                       aPagePadB = parseFloat( aPage.css( "padding-bottom" ) ),
-                       aPageBorderT = parseFloat( aPage.css( "border-top-width" ) ),
-                       aPageBorderB = parseFloat( aPage.css( "border-bottom-width" ) );
-
-               height = ( typeof height === "number" )? height : getScreenHeight();
-               
-               aPage.css( "min-height", height - aPagePadT - aPagePadB - aPageBorderT - aPageBorderB );
-       };
-
-       //shared page enhancements
-       function enhancePage( $page, role ) {
-               // If a role was specified, make sure the data-role attribute
-               // on the page element is in sync.
-               if ( role ) {
-                       $page.attr( "data-" + $.mobile.ns + "role", role );
-               }
-
-               //run page plugin
-               $page.page();
-       }
-
-       // determine the current base url
-       function findBaseWithDefault() {
-               var closestBase = ( $.mobile.activePage && getClosestBaseUrl( $.mobile.activePage ) );
-               return closestBase || documentBase.hrefNoHash;
-       }
-
-       /* exposed $.mobile methods */
-
-       //animation complete callback
-       $.fn.animationComplete = function( callback ) {
-               if ( $.support.cssTransitions ) {
-                       return $( this ).one( 'webkitAnimationEnd animationend', callback );
-               }
-               else{
-                       // defer execution for consistency between webkit/non webkit
-                       setTimeout( callback, 0 );
-                       return $( this );
-               }
-       };
-
-       //expose path object on $.mobile
-       $.mobile.path = path;
-
-       //expose base object on $.mobile
-       $.mobile.base = base;
-
-       //history stack
-       $.mobile.urlHistory = urlHistory;
-
-       $.mobile.dialogHashKey = dialogHashKey;
-
-       //enable cross-domain page support
-       $.mobile.allowCrossDomainPages = false;
-
-       $.mobile._bindPageRemove = function() {
-               var page = $( this );
-
-               // when dom caching is not enabled or the page is embedded bind to remove the page on hide
-               if ( !page.data( "mobile-page" ).options.domCache &&
-                       page.is( ":jqmData(external-page='true')" ) ) {
-
-                       page.bind( 'pagehide.remove', function( e ) {
-                               var $this = $( this ),
-                                       prEvent = new $.Event( "pageremove" );
-
-                               $this.trigger( prEvent );
-
-                               if ( !prEvent.isDefaultPrevented() ) {
-                                       $this.removeWithDependents();
-                               }
-                       });
-               }
-       };
-
-       // Load a page into the DOM.
-       $.mobile.loadPage = function( url, options ) {
-               // This function uses deferred notifications to let callers
-               // know when the page is done loading, or if an error has occurred.
-               var deferred = $.Deferred(),
-
-                       // The default loadPage options with overrides specified by
-                       // the caller.
-                       settings = $.extend( {}, $.mobile.loadPage.defaults, options ),
-
-                       // The DOM element for the page after it has been loaded.
-                       page = null,
-
-                       // If the reloadPage option is true, and the page is already
-                       // in the DOM, dupCachedPage will be set to the page element
-                       // so that it can be removed after the new version of the
-                       // page is loaded off the network.
-                       dupCachedPage = null,
-
-                       // The absolute version of the URL passed into the function. This
-                       // version of the URL may contain dialog/subpage params in it.
-                       absUrl = path.makeUrlAbsolute( url, findBaseWithDefault() );
-
-               // If the caller provided data, and we're using "get" request,
-               // append the data to the URL.
-               if ( settings.data && settings.type === "get" ) {
-                       absUrl = path.addSearchParams( absUrl, settings.data );
-                       settings.data = undefined;
-               }
-
-               // If the caller is using a "post" request, reloadPage must be true
-               if ( settings.data && settings.type === "post" ) {
-                       settings.reloadPage = true;
-               }
-
-               // The absolute version of the URL minus any dialog/subpage params.
-               // In otherwords the real URL of the page to be loaded.
-               var fileUrl = path.getFilePath( absUrl ),
-
-                       // The version of the Url actually stored in the data-url attribute of
-                       // the page. For embedded pages, it is just the id of the page. For pages
-                       // within the same domain as the document base, it is the site relative
-                       // path. For cross-domain pages (Phone Gap only) the entire absolute Url
-                       // used to load the page.
-                       dataUrl = path.convertUrlToDataUrl( absUrl );
-
-               // Make sure we have a pageContainer to work with.
-               settings.pageContainer = settings.pageContainer || $.mobile.pageContainer;
-
-               // Check to see if the page already exists in the DOM.
-               // NOTE do _not_ use the :jqmData psuedo selector because parenthesis
-               //      are a valid url char and it breaks on the first occurence
-               page = settings.pageContainer.children( "[data-" + $.mobile.ns +"url='" + dataUrl + "']" );
-
-               // If we failed to find the page, check to see if the url is a
-               // reference to an embedded page. If so, it may have been dynamically
-               // injected by a developer, in which case it would be lacking a data-url
-               // attribute and in need of enhancement.
-               if ( page.length === 0 && dataUrl && !path.isPath( dataUrl ) ) {
-                       page = settings.pageContainer.children( "#" + dataUrl )
-                               .attr( "data-" + $.mobile.ns + "url", dataUrl )
-                               .jqmData( "url", dataUrl );
-               }
-
-               
-               // If we failed to find a page in the DOM, check the URL to see if it
-               // refers to the first page in the application. If it isn't a reference
-               // to the first page and refers to non-existent embedded page, error out.
-               if ( page.length === 0 ) {
-                       if ( $.mobile.firstPage && path.isFirstPageUrl( fileUrl ) ) {
-                               // Check to make sure our cached-first-page is actually
-                               // in the DOM. Some user deployed apps are pruning the first
-                               // page from the DOM for various reasons, we check for this
-                               // case here because we don't want a first-page with an id
-                               // falling through to the non-existent embedded page error
-                               // case. If the first-page is not in the DOM, then we let
-                               // things fall through to the ajax loading code below so
-                               // that it gets reloaded.
-                               if ( $.mobile.firstPage.parent().length ) {
-                                       page = $( $.mobile.firstPage );
-                               }
-                       } else if ( path.isEmbeddedPage( fileUrl )  ) {
-                               deferred.reject( absUrl, options );
-                               return deferred.promise();
-                       }
-               }
-               
-               // If the page we are interested in is already in the DOM,
-               // and the caller did not indicate that we should force a
-               // reload of the file, we are done. Otherwise, track the
-               // existing page as a duplicated.
-               if ( page.length ) {
-                       if ( !settings.reloadPage ) {
-                               enhancePage( page, settings.role );
-                               deferred.resolve( absUrl, options, page );
-                               //if we are reloading the page make sure we update the base if its not a prefetch 
-                               if( base && !options.prefetch ){
-                                       base.set(url);
-                               }
-                               return deferred.promise();
-                       }
-                       dupCachedPage = page;
-               }
-               var mpc = settings.pageContainer,
-                       pblEvent = new $.Event( "pagebeforeload" ),
-                       triggerData = { url: url, absUrl: absUrl, dataUrl: dataUrl, deferred: deferred, options: settings };
-
-               // Let listeners know we're about to load a page.
-               mpc.trigger( pblEvent, triggerData );
-
-               // If the default behavior is prevented, stop here!
-               if ( pblEvent.isDefaultPrevented() ) {
-                       return deferred.promise();
-               }
-
-               if ( settings.showLoadMsg ) {
-
-                       // This configurable timeout allows cached pages a brief delay to load without showing a message
-                       var loadMsgDelay = setTimeout(function() {
-                                       $.mobile.showPageLoadingMsg();
-                               }, settings.loadMsgDelay ),
-
-                               // Shared logic for clearing timeout and removing message.
-                               hideMsg = function() {
-
-                                       // Stop message show timer
-                                       clearTimeout( loadMsgDelay );
-
-                                       // Hide loading message
-                                       $.mobile.hidePageLoadingMsg();
-                               };
-               }
-               // Reset base to the default document base.
-               // only reset if we are not prefetching 
-               if ( base && typeof options.prefetch === "undefined" ) {
-                       base.reset();
-               }
-
-               if ( !( $.mobile.allowCrossDomainPages || path.isSameDomain( documentUrl, absUrl ) ) ) {
-                       deferred.reject( absUrl, options );
-               } else {
-                       // Load the new page.
-                       $.ajax({
-                               url: fileUrl,
-                               type: settings.type,
-                               data: settings.data,
-                               contentType: settings.contentType,
-                               dataType: "html",
-                               success: function( html, textStatus, xhr ) {
-                                       //pre-parse html to check for a data-url,
-                                       //use it as the new fileUrl, base path, etc
-                                       var all = $( "<div></div>" ),
-
-                                               //page title regexp
-                                               newPageTitle = html.match( /<title[^>]*>([^<]*)/ ) && RegExp.$1,
-
-                                               // TODO handle dialogs again
-                                               pageElemRegex = new RegExp( "(<[^>]+\\bdata-" + $.mobile.ns + "role=[\"']?page[\"']?[^>]*>)" ),
-                                               dataUrlRegex = new RegExp( "\\bdata-" + $.mobile.ns + "url=[\"']?([^\"'>]*)[\"']?" );
-
-
-                                       // data-url must be provided for the base tag so resource requests can be directed to the
-                                       // correct url. loading into a temprorary element makes these requests immediately
-                                       if ( pageElemRegex.test( html ) &&
-                                                       RegExp.$1 &&
-                                                       dataUrlRegex.test( RegExp.$1 ) &&
-                                                       RegExp.$1 ) {
-                                               url = fileUrl = path.getFilePath( $( "<div>" + RegExp.$1 + "</div>" ).text() );
-                                       }
-                                       //dont update the base tag if we are prefetching
-                                       if ( base && typeof options.prefetch === "undefined") {
-                                               base.set( fileUrl );
-                                       }
-
-                                       //workaround to allow scripts to execute when included in page divs
-                                       all.get( 0 ).innerHTML = html;
-                                       page = all.find( ":jqmData(role='page'), :jqmData(role='dialog')" ).first();
-
-                                       //if page elem couldn't be found, create one and insert the body element's contents
-                                       if ( !page.length ) {
-                                               page = $( "<div data-" + $.mobile.ns + "role='page'>" + ( html.split( /<\/?body[^>]*>/gmi )[1] || "" ) + "</div>" );
-                                       }
-
-                                       if ( newPageTitle && !page.jqmData( "title" ) ) {
-                                               if ( ~newPageTitle.indexOf( "&" ) ) {
-                                                       newPageTitle = $( "<div>" + newPageTitle + "</div>" ).text();
-                                               }
-                                               page.jqmData( "title", newPageTitle );
-                                       }
-
-                                       //rewrite src and href attrs to use a base url
-                                       if ( !$.support.dynamicBaseTag ) {
-                                               var newPath = path.get( fileUrl );
-                                               page.find( "[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]" ).each(function() {
-                                                       var thisAttr = $( this ).is( '[href]' ) ? 'href' :
-                                                                       $( this ).is( '[src]' ) ? 'src' : 'action',
-                                                               thisUrl = $( this ).attr( thisAttr );
-
-                                                       // XXX_jblas: We need to fix this so that it removes the document
-                                                       //            base URL, and then prepends with the new page URL.
-                                                       //if full path exists and is same, chop it - helps IE out
-                                                       thisUrl = thisUrl.replace( location.protocol + '//' + location.host + location.pathname, '' );
-
-                                                       if ( !/^(\w+:|#|\/)/.test( thisUrl ) ) {
-                                                               $( this ).attr( thisAttr, newPath + thisUrl );
-                                                       }
-                                               });
-                                       }
-
-                                       //append to page and enhance
-                                       // TODO taging a page with external to make sure that embedded pages aren't removed
-                                       //      by the various page handling code is bad. Having page handling code in many
-                                       //      places is bad. Solutions post 1.0
-                                       page
-                                               .attr( "data-" + $.mobile.ns + "url", path.convertUrlToDataUrl( fileUrl ) )
-                                               .attr( "data-" + $.mobile.ns + "external-page", true )
-                                               .appendTo( settings.pageContainer );
-
-                                       // wait for page creation to leverage options defined on widget
-                                       page.one( 'pagecreate', $.mobile._bindPageRemove );
-
-                                       enhancePage( page, settings.role );
-
-                                       // Enhancing the page may result in new dialogs/sub pages being inserted
-                                       // into the DOM. If the original absUrl refers to a sub-page, that is the
-                                       // real page we are interested in.
-                                       if ( absUrl.indexOf( "&" + $.mobile.subPageUrlKey ) > -1 ) {
-                                               page = settings.pageContainer.children( "[data-" + $.mobile.ns +"url='" + dataUrl + "']" );
-                                       }
-
-                                       // Remove loading message.
-                                       if ( settings.showLoadMsg ) {
-                                               hideMsg();
-                                       }
-
-                                       // Add the page reference and xhr to our triggerData.
-                                       triggerData.xhr = xhr;
-                                       triggerData.textStatus = textStatus;
-                                       triggerData.page = page;
-
-                                       // Let listeners know the page loaded successfully.
-                                       settings.pageContainer.trigger( "pageload", triggerData );
-
-                                       deferred.resolve( absUrl, options, page, dupCachedPage );
-                               },
-                               error: function( xhr, textStatus, errorThrown ) {
-                                       //set base back to current path
-                                       if ( base ) {
-                                               base.set( path.get() );
-                                       }
-
-                                       // Add error info to our triggerData.
-                                       triggerData.xhr = xhr;
-                                       triggerData.textStatus = textStatus;
-                                       triggerData.errorThrown = errorThrown;
-
-                                       var plfEvent = new $.Event( "pageloadfailed" );
-
-                                       // Let listeners know the page load failed.
-                                       settings.pageContainer.trigger( plfEvent, triggerData );
-
-                                       // If the default behavior is prevented, stop here!
-                                       // Note that it is the responsibility of the listener/handler
-                                       // that called preventDefault(), to resolve/reject the
-                                       // deferred object within the triggerData.
-                                       if ( plfEvent.isDefaultPrevented() ) {
-                                               return;
-                                       }
-
-                                       // Remove loading message.
-                                       if ( settings.showLoadMsg ) {
-
-                                               // Remove loading message.
-                                               hideMsg();
-
-                                               // show error message
-                                               $.mobile.showPageLoadingMsg( $.mobile.pageLoadErrorMessageTheme, $.mobile.pageLoadErrorMessage, true );
-
-                                               // hide after delay
-                                               setTimeout( $.mobile.hidePageLoadingMsg, 1500 );
-                                       }
-
-                                       deferred.reject( absUrl, options );
-                               }
-                       });
-               }
-
-               return deferred.promise();
-       };
-
-       $.mobile.loadPage.defaults = {
-               type: "get",
-               data: undefined,
-               reloadPage: false,
-               role: undefined, // By default we rely on the role defined by the @data-role attribute.
-               showLoadMsg: false,
-               pageContainer: undefined,
-               loadMsgDelay: 50 // This delay allows loads that pull from browser cache to occur without showing the loading message.
-       };
-
-       // Show a specific page in the page container.
-       $.mobile.changePage = function( toPage, options ) {
-               // If we are in the midst of a transition, queue the current request.
-               // We'll call changePage() once we're done with the current transition to
-               // service the request.
-               if ( isPageTransitioning ) {
-                       pageTransitionQueue.unshift( arguments );
-                       return;
-               }
-
-               var settings = $.extend( {}, $.mobile.changePage.defaults, options ), isToPageString;
-
-               // Make sure we have a pageContainer to work with.
-               settings.pageContainer = settings.pageContainer || $.mobile.pageContainer;
-
-               // Make sure we have a fromPage.
-               settings.fromPage = settings.fromPage || $.mobile.activePage;
-
-               isToPageString = (typeof toPage === "string");
-
-               var mpc = settings.pageContainer,
-                       pbcEvent = new $.Event( "pagebeforechange" ),
-                       triggerData = { toPage: toPage, options: settings };
-
-               // NOTE: preserve the original target as the dataUrl value will be simplified
-               //       eg, removing ui-state, and removing query params from the hash
-               //       this is so that users who want to use query params have access to them
-               //       in the event bindings for the page life cycle See issue #5085
-               if ( isToPageString ) {
-                       // if the toPage is a string simply convert it
-                       triggerData.absUrl = path.makeUrlAbsolute( toPage, findBaseWithDefault() );
-               } else {
-                       // if the toPage is a jQuery object grab the absolute url stored
-                       // in the loadPage callback where it exists
-                       triggerData.absUrl = toPage.data( 'absUrl' );
-               }
-
-               // Let listeners know we're about to change the current page.
-               mpc.trigger( pbcEvent, triggerData );
-
-               // If the default behavior is prevented, stop here!
-               if ( pbcEvent.isDefaultPrevented() ) {
-                       return;
-               }
-
-               // We allow "pagebeforechange" observers to modify the toPage in the trigger
-               // data to allow for redirects. Make sure our toPage is updated.
-               //
-               // We also need to re-evaluate whether it is a string, because an object can
-               // also be replaced by a string
-
-               toPage = triggerData.toPage;
-               isToPageString = (typeof toPage === "string");
-
-               // Set the isPageTransitioning flag to prevent any requests from
-               // entering this method while we are in the midst of loading a page
-               // or transitioning.
-               isPageTransitioning = true;
-
-               // If the caller passed us a url, call loadPage()
-               // to make sure it is loaded into the DOM. We'll listen
-               // to the promise object it returns so we know when
-               // it is done loading or if an error ocurred.
-               if ( isToPageString ) {
-                       // preserve the original target as the dataUrl value will be simplified
-                       // eg, removing ui-state, and removing query params from the hash
-                       // this is so that users who want to use query params have access to them
-                       // in the event bindings for the page life cycle See issue #5085
-                       settings.target = toPage;
-
-                       $.mobile.loadPage( toPage, settings )
-                               .done(function( url, options, newPage, dupCachedPage ) {
-                                       isPageTransitioning = false;
-                                       options.duplicateCachedPage = dupCachedPage;
-
-                                       // store the original absolute url so that it can be provided
-                                       // to events in the triggerData of the subsequent changePage call
-                                       newPage.data( 'absUrl', triggerData.absUrl );
-                                       $.mobile.changePage( newPage, options );
-                               })
-                               .fail(function( url, options ) {
-
-                                       //clear out the active button state
-                                       removeActiveLinkClass( true );
-
-                                       //release transition lock so navigation is free again
-                                       releasePageTransitionLock();
-                                       settings.pageContainer.trigger( "pagechangefailed", triggerData );
-                               });
-                       return;
-               }
-
-               // If we are going to the first-page of the application, we need to make
-               // sure settings.dataUrl is set to the application document url. This allows
-               // us to avoid generating a document url with an id hash in the case where the
-               // first-page of the document has an id attribute specified.
-               if ( toPage[ 0 ] === $.mobile.firstPage[ 0 ] && !settings.dataUrl ) {
-                       settings.dataUrl = documentUrl.hrefNoHash;
-               }
-
-               // The caller passed us a real page DOM element. Update our
-               // internal state and then trigger a transition to the page.
-               var fromPage = settings.fromPage,
-                       url = ( settings.dataUrl && path.convertUrlToDataUrl( settings.dataUrl ) ) || toPage.jqmData( "url" ),
-                       // The pageUrl var is usually the same as url, except when url is obscured as a dialog url. pageUrl always contains the file path
-                       pageUrl = url,
-                       fileUrl = path.getFilePath( url ),
-                       active = urlHistory.getActive(),
-                       activeIsInitialPage = urlHistory.activeIndex === 0,
-                       historyDir = 0,
-                       pageTitle = document.title,
-                       isDialog = settings.role === "dialog" || toPage.jqmData( "role" ) === "dialog";
-
-
-               // By default, we prevent changePage requests when the fromPage and toPage
-               // are the same element, but folks that generate content manually/dynamically
-               // and reuse pages want to be able to transition to the same page. To allow
-               // this, they will need to change the default value of allowSamePageTransition
-               // to true, *OR*, pass it in as an option when they manually call changePage().
-               // It should be noted that our default transition animations assume that the
-               // formPage and toPage are different elements, so they may behave unexpectedly.
-               // It is up to the developer that turns on the allowSamePageTransitiona option
-               // to either turn off transition animations, or make sure that an appropriate
-               // animation transition is used.
-               if ( fromPage && fromPage[0] === toPage[0] && !settings.allowSamePageTransition ) {
-                       isPageTransitioning = false;
-                       mpc.trigger( "pagechange", triggerData );
-
-                       // Even if there is no page change to be done, we should keep the urlHistory in sync with the hash changes
-                       if ( settings.fromHashChange ) {
-                               urlHistory.direct({ url: url });
-                       }
-
-                       return;
-               }
-
-               // We need to make sure the page we are given has already been enhanced.
-               enhancePage( toPage, settings.role );
-
-               // If the changePage request was sent from a hashChange event, check to see if the
-               // page is already within the urlHistory stack. If so, we'll assume the user hit
-               // the forward/back button and will try to match the transition accordingly.
-               if ( settings.fromHashChange ) {
-                       historyDir = options.direction === "back" ? -1 : 1;
-               }
-
-               // Kill the keyboard.
-               // XXX_jblas: We need to stop crawling the entire document to kill focus. Instead,
-               //            we should be tracking focus with a delegate() handler so we already have
-               //            the element in hand at this point.
-               // Wrap this in a try/catch block since IE9 throw "Unspecified error" if document.activeElement
-               // is undefined when we are in an IFrame.
-               try {
-                       if ( document.activeElement && document.activeElement.nodeName.toLowerCase() !== 'body' ) {
-                               $( document.activeElement ).blur();
-                       } else {
-                               $( "input:focus, textarea:focus, select:focus" ).blur();
-                       }
-               } catch( e ) {}
-
-               // Record whether we are at a place in history where a dialog used to be - if so, do not add a new history entry and do not change the hash either
-               var alreadyThere = false;
-
-               // If we're displaying the page as a dialog, we don't want the url
-               // for the dialog content to be used in the hash. Instead, we want
-               // to append the dialogHashKey to the url of the current page.
-               if ( isDialog && active ) {
-                       // on the initial page load active.url is undefined and in that case should
-                       // be an empty string. Moving the undefined -> empty string back into
-                       // urlHistory.addNew seemed imprudent given undefined better represents
-                       // the url state
-
-                       // If we are at a place in history that once belonged to a dialog, reuse
-                       // this state without adding to urlHistory and without modifying the hash.
-                       // However, if a dialog is already displayed at this point, and we're
-                       // about to display another dialog, then we must add another hash and
-                       // history entry on top so that one may navigate back to the original dialog
-                       if ( active.url &&
-                               active.url.indexOf( dialogHashKey ) > -1 &&
-                               $.mobile.activePage &&
-                               !$.mobile.activePage.is( ".ui-dialog" ) &&
-                               urlHistory.activeIndex > 0 ) {
-                               settings.changeHash = false;
-                               alreadyThere = true;
-                       }
-
-                       // Normally, we tack on a dialog hash key, but if this is the location of a stale dialog,
-                       // we reuse the URL from the entry
-                       url = ( active.url || "" );
-
-                       // account for absolute urls instead of just relative urls use as hashes
-                       if( !alreadyThere && url.indexOf("#") > -1 ) {
-                               url += dialogHashKey;
-                       } else {
-                               url += "#" + dialogHashKey;
-                       }
-
-                       // tack on another dialogHashKey if this is the same as the initial hash
-                       // this makes sure that a history entry is created for this dialog
-                       if ( urlHistory.activeIndex === 0 && url === urlHistory.initialDst ) {
-                               url += dialogHashKey;
-                       }
-               }
-
-               // if title element wasn't found, try the page div data attr too
-               // If this is a deep-link or a reload ( active === undefined ) then just use pageTitle
-               var newPageTitle = ( !active )? pageTitle : toPage.jqmData( "title" ) || toPage.children( ":jqmData(role='header')" ).find( ".ui-title" ).text();
-               if ( !!newPageTitle && pageTitle === document.title ) {
-                       pageTitle = newPageTitle;
-               }
-               if ( !toPage.jqmData( "title" ) ) {
-                       toPage.jqmData( "title", pageTitle );
-               }
-
-               // Make sure we have a transition defined.
-               settings.transition = settings.transition ||
-                       ( ( historyDir && !activeIsInitialPage ) ? active.transition : undefined ) ||
-                       ( isDialog ? $.mobile.defaultDialogTransition : $.mobile.defaultPageTransition );
-
-               //add page to history stack if it's not back or forward
-               if ( !historyDir && alreadyThere ) {
-                       urlHistory.getActive().pageUrl = pageUrl;
-               }
-
-               // Set the location hash.
-               if ( url && !settings.fromHashChange ) {
-                       var params;
-
-                       // rebuilding the hash here since we loose it earlier on
-                       // TODO preserve the originally passed in path
-                       if( !path.isPath( url ) && url.indexOf( "#" ) < 0 ) {
-                               url = "#" + url;
-                       }
-
-                       // TODO the property names here are just silly
-                       params = {
-                               transition: settings.transition,
-                               title: pageTitle,
-                               pageUrl: pageUrl,
-                               role: settings.role
-                       };
-
-                       if ( settings.changeHash !== false && $.mobile.hashListeningEnabled ) {
-                               $.mobile.navigate( url, params, true);
-                       } else if ( toPage[ 0 ] !== $.mobile.firstPage[ 0 ] ) {
-                               $.mobile.navigate.history.add( url, params );
-                       }
-               }
-
-               //set page title
-               document.title = pageTitle;
-
-               //set "toPage" as activePage
-               $.mobile.activePage = toPage;
-
-               // If we're navigating back in the URL history, set reverse accordingly.
-               settings.reverse = settings.reverse || historyDir < 0;
-
-               transitionPages( toPage, fromPage, settings.transition, settings.reverse )
-                       .done(function( name, reverse, $to, $from, alreadyFocused ) {
-                               removeActiveLinkClass();
-
-                               //if there's a duplicateCachedPage, remove it from the DOM now that it's hidden
-                               if ( settings.duplicateCachedPage ) {
-                                       settings.duplicateCachedPage.remove();
-                               }
-
-                               // Send focus to the newly shown page. Moved from promise .done binding in transitionPages
-                               // itself to avoid ie bug that reports offsetWidth as > 0 (core check for visibility)
-                               // despite visibility: hidden addresses issue #2965
-                               // https://github.com/jquery/jquery-mobile/issues/2965
-                               if ( !alreadyFocused ) {
-                                       $.mobile.focusPage( toPage );
-                               }
-
-                               releasePageTransitionLock();
-                               mpc.trigger( "pagechange", triggerData );
-                       });
-       };
-
-       $.mobile.changePage.defaults = {
-               transition: undefined,
-               reverse: false,
-               changeHash: true,
-               fromHashChange: false,
-               role: undefined, // By default we rely on the role defined by the @data-role attribute.
-               duplicateCachedPage: undefined,
-               pageContainer: undefined,
-               showLoadMsg: true, //loading message shows by default when pages are being fetched during changePage
-               dataUrl: undefined,
-               fromPage: undefined,
-               allowSamePageTransition: false
-       };
-
-/* Event Bindings - hashchange, submit, and click */
-       function findClosestLink( ele )
-       {
-               while ( ele ) {
-                       // Look for the closest element with a nodeName of "a".
-                       // Note that we are checking if we have a valid nodeName
-                       // before attempting to access it. This is because the
-                       // node we get called with could have originated from within
-                       // an embedded SVG document where some symbol instance elements
-                       // don't have nodeName defined on them, or strings are of type
-                       // SVGAnimatedString.
-                       if ( ( typeof ele.nodeName === "string" ) && ele.nodeName.toLowerCase() === "a" ) {
-                               break;
-                       }
-                       ele = ele.parentNode;
-               }
-               return ele;
-       }
-
-       // The base URL for any given element depends on the page it resides in.
-       function getClosestBaseUrl( ele )
-       {
-               // Find the closest page and extract out its url.
-               var url = $( ele ).closest( ".ui-page" ).jqmData( "url" ),
-                       base = documentBase.hrefNoHash;
-
-               if ( !url || !path.isPath( url ) ) {
-                       url = base;
-               }
-
-               return path.makeUrlAbsolute( url, base);
-       }
-
-       //The following event bindings should be bound after mobileinit has been triggered
-       //the following deferred is resolved in the init file
-       $.mobile.navreadyDeferred = $.Deferred();
-       $.mobile._registerInternalEvents = function() {
-               var getAjaxFormData = function( $form, calculateOnly ) {
-                       var url, ret = true, formData, vclickedName, method;
-                       
-                       if ( !$.mobile.ajaxEnabled ||
-                                       // test that the form is, itself, ajax false
-                                       $form.is( ":jqmData(ajax='false')" ) ||
-                                       // test that $.mobile.ignoreContentEnabled is set and
-                                       // the form or one of it's parents is ajax=false
-                                       !$form.jqmHijackable().length ||
-                                       $form.attr( "target" ) ) {
-                               return false;
-                       }
-
-                       url = $form.attr( "action" );
-                       method = ( $form.attr( "method" ) || "get" ).toLowerCase();
-
-                       // If no action is specified, browsers default to using the
-                       // URL of the document containing the form. Since we dynamically
-                       // pull in pages from external documents, the form should submit
-                       // to the URL for the source document of the page containing
-                       // the form.
-                       if ( !url ) {
-                               // Get the @data-url for the page containing the form.
-                               url = getClosestBaseUrl( $form );
-
-                               // NOTE: If the method is "get", we need to strip off the query string
-                               // because it will get replaced with the new form data. See issue #5710.
-                               if ( method === "get" ) {
-                                       url = path.parseUrl( url ).hrefNoSearch;
-                               }
-
-                               if ( url === documentBase.hrefNoHash ) {
-                                       // The url we got back matches the document base,
-                                       // which means the page must be an internal/embedded page,
-                                       // so default to using the actual document url as a browser
-                                       // would.
-                                       url = documentUrl.hrefNoSearch;
-                               }
-                       }
-
-                       url = path.makeUrlAbsolute(  url, getClosestBaseUrl( $form ) );
-
-                       if ( ( path.isExternal( url ) && !path.isPermittedCrossDomainRequest( documentUrl, url ) ) ) {
-                               return false;
-                       }
-
-                       if ( !calculateOnly ) {
-                               formData = $form.serializeArray();
-
-                               if ( $lastVClicked && $lastVClicked[ 0 ].form === $form[ 0 ] ) {
-                                       vclickedName = $lastVClicked.attr( "name" );
-                                       if ( vclickedName ) {
-                                               // Make sure the last clicked element is included in the form
-                                               $.each( formData, function( key, value ) {
-                                                       if ( value.name === vclickedName ) {
-                                                               // Unset vclickedName - we've found it in the serialized data already
-                                                               vclickedName = "";
-                                                               return false;
-                                                       }
-                                               });
-                                               if ( vclickedName ) {
-                                                       formData.push( { name: vclickedName, value: $lastVClicked.attr( "value" ) } );
-                                               }
-                                       }
-                               }
-
-                               ret = {
-                                       url: url,
-                                       options: {
-                                               type:           method,
-                                               data:           $.param( formData ),
-                                               transition:     $form.jqmData( "transition" ),
-                                               reverse:        $form.jqmData( "direction" ) === "reverse",
-                                               reloadPage:     true
-                                       }
-                               };
-                       }
-
-                       return ret;
-               };
-
-               //bind to form submit events, handle with Ajax
-               $.mobile.document.delegate( "form", "submit", function( event ) {
-                       var formData = getAjaxFormData( $( this ) );
-
-                       if ( formData ) {
-                               $.mobile.changePage( formData.url, formData.options );
-                               event.preventDefault();
-                       }
-               });
-
-               //add active state on vclick
-               $.mobile.document.bind( "vclick", function( event ) {
-                       var $btn, btnEls, target = event.target, needClosest = false;
-                       // if this isn't a left click we don't care. Its important to note
-                       // that when the virtual event is generated it will create the which attr
-                       if ( event.which > 1 || !$.mobile.linkBindingEnabled ) {
-                               return;
-                       }
-
-                       // Record that this element was clicked, in case we need it for correct
-                       // form submission during the "submit" handler above
-                       $lastVClicked = $( target );
-
-                       // Try to find a target element to which the active class will be applied
-                       if ( $.data( target, "mobile-button" ) ) {
-                               // If the form will not be submitted via AJAX, do not add active class
-                               if ( !getAjaxFormData( $( target ).closest( "form" ), true ) ) {
-                                       return;
-                               }
-                               // We will apply the active state to this button widget - the parent
-                               // of the input that was clicked will have the associated data
-                               if ( target.parentNode ) {
-                                       target = target.parentNode;
-                               }
-                       } else {
-                               target = findClosestLink( target );
-                               if ( !( target && path.parseUrl( target.getAttribute( "href" ) || "#" ).hash !== "#" ) ) {
-                                       return;
-                               }
-
-                               // TODO teach $.mobile.hijackable to operate on raw dom elements so the
-                               // link wrapping can be avoided
-                               if ( !$( target ).jqmHijackable().length ) {
-                                       return;
-                               }
-                       }
-
-                       // Avoid calling .closest by using the data set during .buttonMarkup()
-                       // List items have the button data in the parent of the element clicked
-                       if ( !!~target.className.indexOf( "ui-link-inherit" ) ) {
-                               if ( target.parentNode ) {
-                                       btnEls = $.data( target.parentNode, "buttonElements" );
-                               }
-                       // Otherwise, look for the data on the target itself
-                       } else {
-                               btnEls = $.data( target, "buttonElements" );
-                       }
-                       // If found, grab the button's outer element
-                       if ( btnEls ) {
-                               target = btnEls.outer;
-                       } else {
-                               needClosest = true;
-                       }
-
-                       $btn = $( target );
-                       // If the outer element wasn't found by the our heuristics, use .closest()
-                       if ( needClosest ) {
-                               $btn = $btn.closest( ".ui-btn" );
-                       }
-
-                       if ( $btn.length > 0 && !$btn.hasClass( "ui-disabled" ) ) {
-                               removeActiveLinkClass( true );
-                               $activeClickedLink = $btn;
-                               $activeClickedLink.addClass( $.mobile.activeBtnClass );
-                       }
-               });
-
-               // click routing - direct to HTTP or Ajax, accordingly
-               $.mobile.document.bind( "click", function( event ) {
-                       if ( !$.mobile.linkBindingEnabled || event.isDefaultPrevented() ) {
-                               return;
-                       }
-
-                       var link = findClosestLink( event.target ), $link = $( link ), httpCleanup;
-
-                       // If there is no link associated with the click or its not a left
-                       // click we want to ignore the click
-                       // TODO teach $.mobile.hijackable to operate on raw dom elements so the link wrapping
-                       // can be avoided
-                       if ( !link || event.which > 1 || !$link.jqmHijackable().length ) {
-                               return;
-                       }
-
-                       //remove active link class if external (then it won't be there if you come back)
-                       httpCleanup = function() {
-                               window.setTimeout(function() { removeActiveLinkClass( true ); }, 200 );
-                       };
-
-                       //if there's a data-rel=back attr, go back in history
-                       if ( $link.is( ":jqmData(rel='back')" ) ) {
-                               $.mobile.back();
-                               return false;
-                       }
-
-                       var baseUrl = getClosestBaseUrl( $link ),
-
-                               //get href, if defined, otherwise default to empty hash
-                               href = path.makeUrlAbsolute( $link.attr( "href" ) || "#", baseUrl );
-
-                       //if ajax is disabled, exit early
-                       if ( !$.mobile.ajaxEnabled && !path.isEmbeddedPage( href ) ) {
-                               httpCleanup();
-                               //use default click handling
-                               return;
-                       }
-
-                       // XXX_jblas: Ideally links to application pages should be specified as
-                       //            an url to the application document with a hash that is either
-                       //            the site relative path or id to the page. But some of the
-                       //            internal code that dynamically generates sub-pages for nested
-                       //            lists and select dialogs, just write a hash in the link they
-                       //            create. This means the actual URL path is based on whatever
-                       //            the current value of the base tag is at the time this code
-                       //            is called. For now we are just assuming that any url with a
-                       //            hash in it is an application page reference.
-                       if ( href.search( "#" ) !== -1 ) {
-                               href = href.replace( /[^#]*#/, "" );
-                               if ( !href ) {
-                                       //link was an empty hash meant purely
-                                       //for interaction, so we ignore it.
-                                       event.preventDefault();
-                                       return;
-                               } else if ( path.isPath( href ) ) {
-                                       //we have apath so make it the href we want to load.
-                                       href = path.makeUrlAbsolute( href, baseUrl );
-                               } else {
-                                       //we have a simple id so use the documentUrl as its base.
-                                       href = path.makeUrlAbsolute( "#" + href, documentUrl.hrefNoHash );
-                               }
-                       }
-
-                               // Should we handle this link, or let the browser deal with it?
-                       var useDefaultUrlHandling = $link.is( "[rel='external']" ) || $link.is( ":jqmData(ajax='false')" ) || $link.is( "[target]" ),
-
-                               // Some embedded browsers, like the web view in Phone Gap, allow cross-domain XHR
-                               // requests if the document doing the request was loaded via the file:// protocol.
-                               // This is usually to allow the application to "phone home" and fetch app specific
-                               // data. We normally let the browser handle external/cross-domain urls, but if the
-                               // allowCrossDomainPages option is true, we will allow cross-domain http/https
-                               // requests to go through our page loading logic.
-
-                               //check for protocol or rel and its not an embedded page
-                               //TODO overlap in logic from isExternal, rel=external check should be
-                               //     moved into more comprehensive isExternalLink
-                               isExternal = useDefaultUrlHandling || ( path.isExternal( href ) && !path.isPermittedCrossDomainRequest( documentUrl, href ) );
-
-                       if ( isExternal ) {
-                               httpCleanup();
-                               //use default click handling
-                               return;
-                       }
-
-                       //use ajax
-                       var transition = $link.jqmData( "transition" ),
-                               reverse = $link.jqmData( "direction" ) === "reverse" ||
-                                                       // deprecated - remove by 1.0
-                                                       $link.jqmData( "back" ),
-
-                               //this may need to be more specific as we use data-rel more
-                               role = $link.attr( "data-" + $.mobile.ns + "rel" ) || undefined;
-
-                       $.mobile.changePage( href, { transition: transition, reverse: reverse, role: role, link: $link } );
-                       event.preventDefault();
-               });
-
-               //prefetch pages when anchors with data-prefetch are encountered
-               $.mobile.document.delegate( ".ui-page", "pageshow.prefetch", function() {
-                       var urls = [];
-                       $( this ).find( "a:jqmData(prefetch)" ).each(function() {
-                               var $link = $( this ),
-                                       url = $link.attr( "href" );
-
-                               if ( url && $.inArray( url, urls ) === -1 ) {
-                                       urls.push( url );
-
-                                       $.mobile.loadPage( url, { role: $link.attr( "data-" + $.mobile.ns + "rel" ),prefetch: true } );
-                               }
-                       });
-               });
-
-               $.mobile._handleHashChange = function( url, data ) {
-                       //find first page via hash
-                       var to = path.stripHash(url),
-                               //transition is false if it's the first page, undefined otherwise (and may be overridden by default)
-                               transition = $.mobile.urlHistory.stack.length === 0 ? "none" : undefined,
-
-                               // default options for the changPage calls made after examining the current state
-                               // of the page and the hash, NOTE that the transition is derived from the previous
-                               // history entry
-                               changePageOptions = {
-                                       changeHash: false,
-                                       fromHashChange: true,
-                                       reverse: data.direction === "back"
-                               };
-
-                       $.extend( changePageOptions, data, {
-                               transition: (urlHistory.getLast() || {}).transition || transition
-                       });
-
-                       // special case for dialogs
-                       if ( urlHistory.activeIndex > 0 && to.indexOf( dialogHashKey ) > -1 && urlHistory.initialDst !== to ) {
-
-                               // If current active page is not a dialog skip the dialog and continue
-                               // in the same direction
-                               if ( $.mobile.activePage && !$.mobile.activePage.is( ".ui-dialog" ) ) {
-                                       //determine if we're heading forward or backward and continue accordingly past
-                                       //the current dialog
-                                       if( data.direction === "back" ) {
-                                               $.mobile.back();
-                                       } else {
-                                               window.history.forward();
-                                       }
-
-                                       // prevent changePage call
-                                       return;
-                               } else {
-                                       // if the current active page is a dialog and we're navigating
-                                       // to a dialog use the dialog objected saved in the stack
-                                       to = data.pageUrl;
-                                       var active = $.mobile.urlHistory.getActive();
-
-                                       // make sure to set the role, transition and reversal
-                                       // as most of this is lost by the domCache cleaning
-                                       $.extend( changePageOptions, {
-                                               role: active.role,
-                                               transition: active.transition,
-                                               reverse: data.direction === "back"
-                                       });
-                               }
-                       }
-
-                       //if to is defined, load it
-                       if ( to ) {
-                               // At this point, 'to' can be one of 3 things, a cached page element from
-                               // a history stack entry, an id, or site-relative/absolute URL. If 'to' is
-                               // an id, we need to resolve it against the documentBase, not the location.href,
-                               // since the hashchange could've been the result of a forward/backward navigation
-                               // that crosses from an external page/dialog to an internal page/dialog.
-                               to = !path.isPath( to ) ? ( path.makeUrlAbsolute( '#' + to, documentBase ) ) : to;
-
-                               // If we're about to go to an initial URL that contains a reference to a non-existent
-                               // internal page, go to the first page instead. We know that the initial hash refers to a
-                               // non-existent page, because the initial hash did not end up in the initial urlHistory entry
-                               if ( to === path.makeUrlAbsolute( '#' + urlHistory.initialDst, documentBase ) &&
-                                       urlHistory.stack.length && urlHistory.stack[0].url !== urlHistory.initialDst.replace( dialogHashKey, "" ) ) {
-                                       to = $.mobile.firstPage;
-                               }
-
-                               $.mobile.changePage( to, changePageOptions );
-                       }       else {
-
-                               //there's no hash, go to the first page in the dom
-                               $.mobile.changePage( $.mobile.firstPage, changePageOptions );
-                       }
-               };
-
-               // TODO roll the logic here into the handleHashChange method
-               $window.bind( "navigate", function( e, data ) {
-                       var url;
-
-                       if ( e.originalEvent && e.originalEvent.isDefaultPrevented() ) {
-                               return;
-                       }
-
-                       url = $.event.special.navigate.originalEventName.indexOf( "hashchange" ) > -1 ? data.state.hash : data.state.url;
-
-                       if( !url ) {
-                               url = $.mobile.path.parseLocation().hash;
-                       }
-
-                       if( !url || url === "#" || url.indexOf( "#" + $.mobile.path.uiStateKey ) === 0 ){
-                               url = location.href;
-                       }
-
-                       $.mobile._handleHashChange( url, data.state );
-               });
-
-               //set page min-heights to be device specific
-               $.mobile.document.bind( "pageshow", $.mobile.resetActivePageHeight );
-               $.mobile.window.bind( "throttledresize", $.mobile.resetActivePageHeight );
-
-       };//navreadyDeferred done callback
-
-       $( function() { domreadyDeferred.resolve(); } );
-
-       $.when( domreadyDeferred, $.mobile.navreadyDeferred ).done( function() { $.mobile._registerInternalEvents(); } );
-})( jQuery );
-
-/*
-* fallback transition for flip in non-3D supporting browsers (which tend to handle complex transitions poorly in general
-*/
-
-(function( $, window, undefined ) {
-
-$.mobile.transitionFallbacks.flip = "fade";
-
-})( jQuery, this );
-/*
-* fallback transition for flow in non-3D supporting browsers (which tend to handle complex transitions poorly in general
-*/
-
-(function( $, window, undefined ) {
-
-$.mobile.transitionFallbacks.flow = "fade";
-
-})( jQuery, this );
-/*
-* fallback transition for pop in non-3D supporting browsers (which tend to handle complex transitions poorly in general
-*/
-
-(function( $, window, undefined ) {
-
-$.mobile.transitionFallbacks.pop = "fade";
-
-})( jQuery, this );
-/*
-* fallback transition for slide in non-3D supporting browsers (which tend to handle complex transitions poorly in general
-*/
-
-(function( $, window, undefined ) {
-
-// Use the simultaneous transitions handler for slide transitions
-$.mobile.transitionHandlers.slide = $.mobile.transitionHandlers.simultaneous;
-
-// Set the slide transitions's fallback to "fade"
-$.mobile.transitionFallbacks.slide = "fade";
-
-})( jQuery, this );
-/*
-* fallback transition for slidedown in non-3D supporting browsers (which tend to handle complex transitions poorly in general
-*/
-
-(function( $, window, undefined ) {
-
-$.mobile.transitionFallbacks.slidedown = "fade";
-
-})( jQuery, this );
-/*
-* fallback transition for slidefade in non-3D supporting browsers (which tend to handle complex transitions poorly in general
-*/
-
-(function( $, window, undefined ) {
-
-// Set the slide transitions's fallback to "fade"
-$.mobile.transitionFallbacks.slidefade = "fade";
-
-})( jQuery, this );
-/*
-* fallback transition for slideup in non-3D supporting browsers (which tend to handle complex transitions poorly in general
-*/
-
-(function( $, window, undefined ) {
-
-$.mobile.transitionFallbacks.slideup = "fade";
-
-})( jQuery, this );
-/*
-* fallback transition for turn in non-3D supporting browsers (which tend to handle complex transitions poorly in general
-*/
-
-(function( $, window, undefined ) {
-
-$.mobile.transitionFallbacks.turn = "fade";
-
-})( jQuery, this );
-
-(function( $, undefined ) {
-
-$.mobile.page.prototype.options.degradeInputs = {
-       color: false,
-       date: false,
-       datetime: false,
-       "datetime-local": false,
-       email: false,
-       month: false,
-       number: false,
-       range: "number",
-       search: "text",
-       tel: false,
-       time: false,
-       url: false,
-       week: false
-};
-
-
-//auto self-init widgets
-$.mobile.document.bind( "pagecreate create", function( e ) {
-
-       var page = $.mobile.closestPageData( $( e.target ) ), options;
-
-       if ( !page ) {
-               return;
-       }
-
-       options = page.options;
-
-       // degrade inputs to avoid poorly implemented native functionality
-       $( e.target ).find( "input" ).not( page.keepNativeSelector() ).each(function() {
-               var $this = $( this ),
-                       type = this.getAttribute( "type" ),
-                       optType = options.degradeInputs[ type ] || "text";
-
-               if ( options.degradeInputs[ type ] ) {
-                       var html = $( "<div>" ).html( $this.clone() ).html(),
-                               // In IE browsers, the type sometimes doesn't exist in the cloned markup, so we replace the closing tag instead
-                               hasType = html.indexOf( " type=" ) > -1,
-                               findstr = hasType ? /\s+type=["']?\w+['"]?/ : /\/?>/,
-                               repstr = " type=\"" + optType + "\" data-" + $.mobile.ns + "type=\"" + type + "\"" + ( hasType ? "" : ">" );
-
-                       $this.replaceWith( html.replace( findstr, repstr ) );
-               }
-       });
-
-});
-
-})( jQuery );
-
-(function( $, window, undefined ) {
-
-$.widget( "mobile.dialog", $.mobile.widget, {
-       options: {
-               closeBtn: "left",
-               closeBtnText: "Close",
-               overlayTheme: "a",
-               corners: true,
-               initSelector: ":jqmData(role='dialog')"
-       },
-
-       // Override the theme set by the page plugin on pageshow
-       _handlePageBeforeShow: function() {
-               this._isCloseable = true;
-               if ( this.options.overlayTheme ) {
-                       this.element
-                               .page( "removeContainerBackground" )
-                               .page( "setContainerBackground", this.options.overlayTheme );
-               }
-       },
-
-       _create: function() {
-               var self = this,
-                       $el = this.element,
-                       cornerClass = !!this.options.corners ? " ui-corner-all" : "",
-                       dialogWrap = $( "<div/>", {
-                                       "role" : "dialog",
-                                       "class" : "ui-dialog-contain ui-overlay-shadow" + cornerClass
-                               });
-
-               $el.addClass( "ui-dialog ui-overlay-" + this.options.overlayTheme );
-
-               // Class the markup for dialog styling
-               // Set aria role
-               $el.wrapInner( dialogWrap );
-
-               /* bind events
-                       - clicks and submits should use the closing transition that the dialog opened with
-                               unless a data-transition is specified on the link/form
-                       - if the click was on the close button, or the link has a data-rel="back" it'll go back in history naturally
-               */
-               $el.bind( "vclick submit", function( event ) {
-                       var $target = $( event.target ).closest( event.type === "vclick" ? "a" : "form" ),
-                               active;
-
-                       if ( $target.length && !$target.jqmData( "transition" ) ) {
-
-                               active = $.mobile.urlHistory.getActive() || {};
-
-                               $target.attr( "data-" + $.mobile.ns + "transition", ( active.transition || $.mobile.defaultDialogTransition ) )
-                                       .attr( "data-" + $.mobile.ns + "direction", "reverse" );
-                       }
-               });
-
-               this._on( $el, {
-                       pagebeforeshow: "_handlePageBeforeShow"
-               });
-
-               $.extend( this, {
-                       _createComplete: false
-               });
-
-               this._setCloseBtn( this.options.closeBtn );
-       },
-
-       _setCloseBtn: function( value ) {
-               var self = this, btn, location;
-
-               if ( this._headerCloseButton ) {
-                       this._headerCloseButton.remove();
-                       this._headerCloseButton = null;
-               }
-               if ( value !== "none" ) {
-                       // Sanitize value
-                       location = ( value === "left" ? "left" : "right" );
-                       btn = $( "<a href='#' class='ui-btn-" + location + "' data-" + $.mobile.ns + "icon='delete' data-" + $.mobile.ns + "iconpos='notext'>"+ this.options.closeBtnText + "</a>" );
-                       this.element.children().find( ":jqmData(role='header')" ).first().prepend( btn );
-                       if ( this._createComplete && $.fn.buttonMarkup ) {
-                               btn.buttonMarkup();
-                       }
-                       this._createComplete = true;
-
-                       // this must be an anonymous function so that select menu dialogs can replace
-                       // the close method. This is a change from previously just defining data-rel=back
-                       // on the button and letting nav handle it
-                       //
-                       // Use click rather than vclick in order to prevent the possibility of unintentionally
-                       // reopening the dialog if the dialog opening item was directly under the close button.
-                       btn.bind( "click", function() {
-                               self.close();
-                       });
-
-                       this._headerCloseButton = btn;
-               }
-       },
-
-       _setOption: function( key, value ) {
-               if ( key === "closeBtn" ) {
-                       this._setCloseBtn( value );
-               }
-               this._super( key, value );
-       },
-
-       // Close method goes back in history
-       close: function() {
-               var idx, dst, hist = $.mobile.navigate.history;
-
-               if ( this._isCloseable ) {
-                       this._isCloseable = false;
-                       // If the hash listening is enabled and there is at least one preceding history
-                       // entry it's ok to go back. Initial pages with the dialog hash state are an example
-                       // where the stack check is necessary
-                       if ( $.mobile.hashListeningEnabled && hist.activeIndex > 0 ) {
-                               $.mobile.back();
-                       } else {
-                               idx = Math.max( 0, hist.activeIndex - 1 );
-                               dst = hist.stack[ idx ].pageUrl || hist.stack[ idx ].url;
-                               hist.previousIndex = hist.activeIndex;
-                               hist.activeIndex = idx;
-                               if ( !$.mobile.path.isPath( dst ) ) {
-                                       dst = $.mobile.path.makeUrlAbsolute( "#" + dst );
-                               }
-
-                               $.mobile.changePage( dst, { direction: "back", changeHash: false, fromHashChange: true } );
-                       }
-               }
-       }
-});
-
-//auto self-init widgets
-$.mobile.document.delegate( $.mobile.dialog.prototype.options.initSelector, "pagecreate", function() {
-       $.mobile.dialog.prototype.enhance( this );
-});
-
-})( jQuery, this );
-
-(function( $, undefined ) {
-
-$.mobile.page.prototype.options.backBtnText  = "Back";
-$.mobile.page.prototype.options.addBackBtn   = false;
-$.mobile.page.prototype.options.backBtnTheme = null;
-$.mobile.page.prototype.options.headerTheme  = "a";
-$.mobile.page.prototype.options.footerTheme  = "a";
-$.mobile.page.prototype.options.contentTheme = null;
-
-// NOTE bind used to force this binding to run before the buttonMarkup binding
-//      which expects .ui-footer top be applied in its gigantic selector
-// TODO remove the buttonMarkup giant selector and move it to the various modules
-//      on which it depends
-$.mobile.document.bind( "pagecreate", function( e ) {
-       var $page = $( e.target ),
-               o = $page.data( "mobile-page" ).options,
-               pageRole = $page.jqmData( "role" ),
-               pageTheme = o.theme;
-
-       $( ":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')", $page )
-               .jqmEnhanceable()
-               .each(function() {
-
-               var $this = $( this ),
-                       role = $this.jqmData( "role" ),
-                       theme = $this.jqmData( "theme" ),
-                       contentTheme = theme || o.contentTheme || ( pageRole === "dialog" && pageTheme ),
-                       $headeranchors,
-                       leftbtn,
-                       rightbtn,
-                       backBtn;
-
-               $this.addClass( "ui-" + role );
-
-               //apply theming and markup modifications to page,header,content,footer
-               if ( role === "header" || role === "footer" ) {
-
-                       var thisTheme = theme || ( role === "header" ? o.headerTheme : o.footerTheme ) || pageTheme;
-
-                       $this
-                               //add theme class
-                               .addClass( "ui-bar-" + thisTheme )
-                               // Add ARIA role
-                               .attr( "role", role === "header" ? "banner" : "contentinfo" );
-
-                       if ( role === "header") {
-                               // Right,left buttons
-                               $headeranchors  = $this.children( "a, button" );
-                               leftbtn = $headeranchors.hasClass( "ui-btn-left" );
-                               rightbtn = $headeranchors.hasClass( "ui-btn-right" );
-
-                               leftbtn = leftbtn || $headeranchors.eq( 0 ).not( ".ui-btn-right" ).addClass( "ui-btn-left" ).length;
-
-                               rightbtn = rightbtn || $headeranchors.eq( 1 ).addClass( "ui-btn-right" ).length;
-                       }
-
-                       // Auto-add back btn on pages beyond first view
-                       if ( o.addBackBtn &&
-                               role === "header" &&
-                               $( ".ui-page" ).length > 1 &&
-                               $page.jqmData( "url" ) !== $.mobile.path.stripHash( location.hash ) &&
-                               !leftbtn ) {
-
-                               backBtn = $( "<a href='javascript:void(0);' class='ui-btn-left' data-"+ $.mobile.ns +"rel='back' data-"+ $.mobile.ns +"icon='arrow-l'>"+ o.backBtnText +"</a>" )
-                                       // If theme is provided, override default inheritance
-                                       .attr( "data-"+ $.mobile.ns +"theme", o.backBtnTheme || thisTheme )
-                                       .prependTo( $this );
-                       }
-
-                       // Page title
-                       $this.children( "h1, h2, h3, h4, h5, h6" )
-                               .addClass( "ui-title" )
-                               // Regardless of h element number in src, it becomes h1 for the enhanced page
-                               .attr({
-                                       "role": "heading",
-                                       "aria-level": "1"
-                               });
-
-               } else if ( role === "content" ) {
-                       if ( contentTheme ) {
-                               $this.addClass( "ui-body-" + ( contentTheme ) );
-                       }
-
-                       // Add ARIA role
-                       $this.attr( "role", "main" );
-               }
-       });
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-// This function calls getAttribute, which should be safe for data-* attributes
-var getAttrFixed = function( e, key ) {
-       var value = e.getAttribute( key );
-
-       return value === "true" ? true :
-               value === "false" ? false :
-               value === null ? undefined : value;
-};
-
-$.fn.buttonMarkup = function( options ) {
-       var $workingSet = this,
-               nsKey = "data-" + $.mobile.ns,
-               key;
-
-       // Enforce options to be of type string
-       options = ( options && ( $.type( options ) === "object" ) )? options : {};
-       for ( var i = 0; i < $workingSet.length; i++ ) {
-               var el = $workingSet.eq( i ),
-                       e = el[ 0 ],
-                       o = $.extend( {}, $.fn.buttonMarkup.defaults, {
-                               icon:       options.icon       !== undefined ? options.icon       : getAttrFixed( e, nsKey + "icon" ),
-                               iconpos:    options.iconpos    !== undefined ? options.iconpos    : getAttrFixed( e, nsKey + "iconpos" ),
-                               theme:      options.theme      !== undefined ? options.theme      : getAttrFixed( e, nsKey + "theme" ) || $.mobile.getInheritedTheme( el, "c" ),
-                               inline:     options.inline     !== undefined ? options.inline     : getAttrFixed( e, nsKey + "inline" ),
-                               shadow:     options.shadow     !== undefined ? options.shadow     : getAttrFixed( e, nsKey + "shadow" ),
-                               corners:    options.corners    !== undefined ? options.corners    : getAttrFixed( e, nsKey + "corners" ),
-                               iconshadow: options.iconshadow !== undefined ? options.iconshadow : getAttrFixed( e, nsKey + "iconshadow" ),
-                               mini:       options.mini       !== undefined ? options.mini       : getAttrFixed( e, nsKey + "mini" )
-                       }, options ),
-
-                       // Classes Defined
-                       innerClass = "ui-btn-inner",
-                       textClass = "ui-btn-text",
-                       buttonClass, iconClass,
-                       hover = false,
-                       state = "up",
-                       // Button inner markup
-                       buttonInner,
-                       buttonText,
-                       buttonIcon,
-                       buttonElements;
-
-               for ( key in o ) {
-                       if ( o[ key ] === undefined || o[ key ] === null ) {
-                               el.removeAttr( nsKey + key );
-                       } else {
-                               e.setAttribute( nsKey + key, o[ key ] );
-                       }
-               }
-
-               if ( getAttrFixed( e, nsKey + "rel" ) === "popup" && el.attr( "href" ) ) {
-                       e.setAttribute( "aria-haspopup", true );
-                       e.setAttribute( "aria-owns", el.attr( "href" ) );
-               }
-
-               // Check if this element is already enhanced
-               buttonElements = $.data( ( ( e.tagName === "INPUT" || e.tagName === "BUTTON" ) ? e.parentNode : e ), "buttonElements" );
-
-               if ( buttonElements ) {
-                       e = buttonElements.outer;
-                       el = $( e );
-                       buttonInner = buttonElements.inner;
-                       buttonText = buttonElements.text;
-                       // We will recreate this icon below
-                       $( buttonElements.icon ).remove();
-                       buttonElements.icon = null;
-                       hover = buttonElements.hover;
-                       state = buttonElements.state;
-               }
-               else {
-                       buttonInner = document.createElement( o.wrapperEls );
-                       buttonText = document.createElement( o.wrapperEls );
-               }
-               buttonIcon = o.icon ? document.createElement( "span" ) : null;
-
-               if ( attachEvents && !buttonElements ) {
-                       attachEvents();
-               }
-
-               // if not, try to find closest theme container
-               if ( !o.theme ) {
-                       o.theme = $.mobile.getInheritedTheme( el, "c" );
-               }
-
-               buttonClass = "ui-btn ";
-               buttonClass += ( hover ? "ui-btn-hover-" + o.theme : "" );
-               buttonClass += ( state ? " ui-btn-" + state + "-" + o.theme : "" );
-               buttonClass += o.shadow ? " ui-shadow" : "";
-               buttonClass += o.corners ? " ui-btn-corner-all" : "";
-
-               if ( o.mini !== undefined ) {
-                       // Used to control styling in headers/footers, where buttons default to `mini` style.
-                       buttonClass += o.mini === true ? " ui-mini" : " ui-fullsize";
-               }
-
-               if ( o.inline !== undefined ) {
-                       // Used to control styling in headers/footers, where buttons default to `inline` style.
-                       buttonClass += o.inline === true ? " ui-btn-inline" : " ui-btn-block";
-               }
-
-               if ( o.icon ) {
-                       o.icon = "ui-icon-" + o.icon;
-                       o.iconpos = o.iconpos || "left";
-
-                       iconClass = "ui-icon " + o.icon;
-
-                       if ( o.iconshadow ) {
-                               iconClass += " ui-icon-shadow";
-                       }
-               }
-
-               if ( o.iconpos ) {
-                       buttonClass += " ui-btn-icon-" + o.iconpos;
-
-                       if ( o.iconpos === "notext" && !el.attr( "title" ) ) {
-                               el.attr( "title", el.getEncodedText() );
-                       }
-               }
-
-               if ( buttonElements ) {
-                       el.removeClass( buttonElements.bcls || "" );
-               }
-               el.removeClass( "ui-link" ).addClass( buttonClass );
-
-               buttonInner.className = innerClass;
-               buttonText.className = textClass;
-               if ( !buttonElements ) {
-                       buttonInner.appendChild( buttonText );
-               }
-               if ( buttonIcon ) {
-                       buttonIcon.className = iconClass;
-                       if ( !( buttonElements && buttonElements.icon ) ) {
-                               buttonIcon.innerHTML = "&#160;";
-                               buttonInner.appendChild( buttonIcon );
-                       }
-               }
-
-               while ( e.firstChild && !buttonElements ) {
-                       buttonText.appendChild( e.firstChild );
-               }
-
-               if ( !buttonElements ) {
-                       e.appendChild( buttonInner );
-               }
-
-               // Assign a structure containing the elements of this button to the elements of this button. This
-               // will allow us to recognize this as an already-enhanced button in future calls to buttonMarkup().
-               buttonElements = {
-                       hover : hover,
-                       state : state,
-                       bcls  : buttonClass,
-                       outer : e,
-                       inner : buttonInner,
-                       text  : buttonText,
-                       icon  : buttonIcon
-               };
-
-               $.data( e,           'buttonElements', buttonElements );
-               $.data( buttonInner, 'buttonElements', buttonElements );
-               $.data( buttonText,  'buttonElements', buttonElements );
-               if ( buttonIcon ) {
-                       $.data( buttonIcon, 'buttonElements', buttonElements );
-               }
-       }
-
-       return this;
-};
-
-$.fn.buttonMarkup.defaults = {
-       corners: true,
-       shadow: true,
-       iconshadow: true,
-       wrapperEls: "span"
-};
-
-function closestEnabledButton( element ) {
-    var cname;
-
-    while ( element ) {
-               // Note that we check for typeof className below because the element we
-               // handed could be in an SVG DOM where className on SVG elements is defined to
-               // be of a different type (SVGAnimatedString). We only operate on HTML DOM
-               // elements, so we look for plain "string".
-        cname = ( typeof element.className === 'string' ) && ( element.className + ' ' );
-        if ( cname && cname.indexOf( "ui-btn " ) > -1 && cname.indexOf( "ui-disabled " ) < 0 ) {
-            break;
-        }
-
-        element = element.parentNode;
-    }
-
-    return element;
-}
-
-function updateButtonClass( $btn, classToRemove, classToAdd, hover, state ) {
-       var buttonElements = $.data( $btn[ 0 ], "buttonElements" );
-       $btn.removeClass( classToRemove ).addClass( classToAdd );
-       if ( buttonElements ) {
-               buttonElements.bcls = $( document.createElement( "div" ) )
-                       .addClass( buttonElements.bcls + " " + classToAdd )
-                       .removeClass( classToRemove )
-                       .attr( "class" );
-               if ( hover !== undefined ) {
-                       buttonElements.hover = hover;
-               }
-               buttonElements.state = state;
-       }
-}
-
-var attachEvents = function() {
-       var hoverDelay = $.mobile.buttonMarkup.hoverDelay, hov, foc;
-
-       $.mobile.document.bind( {
-               "vmousedown vmousecancel vmouseup vmouseover vmouseout focus blur scrollstart": function( event ) {
-                       var theme,
-                               $btn = $( closestEnabledButton( event.target ) ),
-                               isTouchEvent = event.originalEvent && /^touch/.test( event.originalEvent.type ),
-                               evt = event.type;
-
-                       if ( $btn.length ) {
-                               theme = $btn.attr( "data-" + $.mobile.ns + "theme" );
-
-                               if ( evt === "vmousedown" ) {
-                                       if ( isTouchEvent ) {
-                                               // Use a short delay to determine if the user is scrolling before highlighting
-                                               hov = setTimeout( function() {
-                                                       updateButtonClass( $btn, "ui-btn-up-" + theme, "ui-btn-down-" + theme, undefined, "down" );
-                                               }, hoverDelay );
-                                       } else {
-                                               updateButtonClass( $btn, "ui-btn-up-" + theme, "ui-btn-down-" + theme, undefined, "down" );
-                                       }
-                               } else if ( evt === "vmousecancel" || evt === "vmouseup" ) {
-                                       updateButtonClass( $btn, "ui-btn-down-" + theme, "ui-btn-up-" + theme, undefined, "up" );
-                               } else if ( evt === "vmouseover" || evt === "focus" ) {
-                                       if ( isTouchEvent ) {
-                                               // Use a short delay to determine if the user is scrolling before highlighting
-                                               foc = setTimeout( function() {
-                                                       updateButtonClass( $btn, "ui-btn-up-" + theme, "ui-btn-hover-" + theme, true, "" );
-                                               }, hoverDelay );
-                                       } else {
-                                               updateButtonClass( $btn, "ui-btn-up-" + theme, "ui-btn-hover-" + theme, true, "" );
-                                       }
-                               } else if ( evt === "vmouseout" || evt === "blur" || evt === "scrollstart" ) {
-                                       updateButtonClass( $btn, "ui-btn-hover-" + theme  + " ui-btn-down-" + theme, "ui-btn-up-" + theme, false, "up" );
-                                       if ( hov ) {
-                                               clearTimeout( hov );
-                                       }
-                                       if ( foc ) {
-                                               clearTimeout( foc );
-                                       }
-                               }
-                       }
-               },
-               "focusin focus": function( event ) {
-                       $( closestEnabledButton( event.target ) ).addClass( $.mobile.focusClass );
-               },
-               "focusout blur": function( event ) {
-                       $( closestEnabledButton( event.target ) ).removeClass( $.mobile.focusClass );
-               }
-       });
-
-       attachEvents = null;
-};
-
-//links in bars, or those with  data-role become buttons
-//auto self-init widgets
-$.mobile.document.bind( "pagecreate create", function( e ) {
-
-       $( ":jqmData(role='button'), .ui-bar > a, .ui-header > a, .ui-footer > a, .ui-bar > :jqmData(role='controlgroup') > a", e.target )
-               .jqmEnhanceable()
-               .not( "button, input, .ui-btn, :jqmData(role='none'), :jqmData(role='nojs')" )
-               .buttonMarkup();
-});
-
-})( jQuery );
-
-
-(function( $, undefined ) {
-
-$.widget( "mobile.collapsible", $.mobile.widget, {
-       options: {
-               expandCueText: " click to expand contents",
-               collapseCueText: " click to collapse contents",
-               collapsed: true,
-               heading: "h1,h2,h3,h4,h5,h6,legend",
-               collapsedIcon: "plus",
-               expandedIcon: "minus",
-               iconpos: "left",
-               theme: null,
-               contentTheme: null,
-               inset: true,
-               corners: true,
-               mini: false,
-               initSelector: ":jqmData(role='collapsible')"
-       },
-       _create: function() {
-
-               var $el = this.element,
-                       o = this.options,
-                       collapsible = $el.addClass( "ui-collapsible" ),
-                       collapsibleHeading = $el.children( o.heading ).first(),
-                       collapsibleContent = collapsible.wrapInner( "<div class='ui-collapsible-content'></div>" ).children( ".ui-collapsible-content" ),
-                       collapsibleSet = $el.closest( ":jqmData(role='collapsible-set')" ).addClass( "ui-collapsible-set" ),
-                       collapsibleClasses = "";
-
-               // Replace collapsibleHeading if it's a legend
-               if ( collapsibleHeading.is( "legend" ) ) {
-                       collapsibleHeading = $( "<div role='heading'>"+ collapsibleHeading.html() +"</div>" ).insertBefore( collapsibleHeading );
-                       collapsibleHeading.next().remove();
-               }
-
-               // If we are in a collapsible set
-               if ( collapsibleSet.length ) {
-                       // Inherit the theme from collapsible-set
-                       if ( !o.theme ) {
-                               o.theme = collapsibleSet.jqmData( "theme" ) || $.mobile.getInheritedTheme( collapsibleSet, "c" );
-                       }
-                       // Inherit the content-theme from collapsible-set
-                       if ( !o.contentTheme ) {
-                               o.contentTheme = collapsibleSet.jqmData( "content-theme" );
-                       }
-
-                       // Get the preference for collapsed icon in the set, but override with data- attribute on the individual collapsible
-                       o.collapsedIcon = $el.jqmData( "collapsed-icon" ) || collapsibleSet.jqmData( "collapsed-icon" ) || o.collapsedIcon;
-
-                       // Get the preference for expanded icon in the set, but override with data- attribute on the individual collapsible
-                       o.expandedIcon = $el.jqmData( "expanded-icon" ) || collapsibleSet.jqmData( "expanded-icon" ) || o.expandedIcon;
-
-                       // Gets the preference icon position in the set, but override with data- attribute on the individual collapsible
-                       o.iconpos = $el.jqmData( "iconpos" ) || collapsibleSet.jqmData( "iconpos" ) || o.iconpos;
-
-                       // Inherit the preference for inset from collapsible-set or set the default value to ensure equalty within a set
-                       if ( collapsibleSet.jqmData( "inset" ) !== undefined ) {
-                               o.inset = collapsibleSet.jqmData( "inset" );
-                       } else {
-                               o.inset = true;
-                       }
-                       // Set corners for individual collapsibles to false when in a collapsible-set
-                       o.corners = false;
-                       // Gets the preference for mini in the set
-                       if ( !o.mini ) {
-                               o.mini = collapsibleSet.jqmData( "mini" );
-                       }
-               } else {
-                       // get inherited theme if not a set and no theme has been set
-                       if ( !o.theme ) {
-                               o.theme = $.mobile.getInheritedTheme( $el, "c" );
-                       }
-               }
-
-               if ( !!o.inset ) {
-                       collapsibleClasses += " ui-collapsible-inset";
-                       if ( !!o.corners ) {
-                               collapsibleClasses += " ui-corner-all" ;
-                       }
-               }
-               if ( o.contentTheme ) {
-                       collapsibleClasses += " ui-collapsible-themed-content";
-                       collapsibleContent.addClass( "ui-body-" + o.contentTheme );
-               }
-               if ( collapsibleClasses !== "" ) {
-                       collapsible.addClass( collapsibleClasses );
-               }
-               
-               collapsibleHeading
-                       //drop heading in before content
-                       .insertBefore( collapsibleContent )
-                       //modify markup & attributes
-                       .addClass( "ui-collapsible-heading" )
-                       .append( "<span class='ui-collapsible-heading-status'></span>" )
-                       .wrapInner( "<a href='#' class='ui-collapsible-heading-toggle'></a>" )
-                       .find( "a" )
-                               .first()
-                               .buttonMarkup({
-                                       shadow: false,
-                                       corners: false,
-                                       iconpos: o.iconpos,
-                                       icon: o.collapsedIcon,
-                                       mini: o.mini,
-                                       theme: o.theme
-                               });
-
-               //events
-               collapsible
-                       .bind( "expand collapse", function( event ) {
-                               if ( !event.isDefaultPrevented() ) {
-                                       var $this = $( this ),
-                                               isCollapse = ( event.type === "collapse" );
-
-                                       event.preventDefault();
-
-                                       collapsibleHeading
-                                               .toggleClass( "ui-collapsible-heading-collapsed", isCollapse )
-                                               .find( ".ui-collapsible-heading-status" )
-                                                       .text( isCollapse ? o.expandCueText : o.collapseCueText )
-                                               .end()
-                                               .find( ".ui-icon" )
-                                                       .toggleClass( "ui-icon-" + o.expandedIcon, !isCollapse )
-                                                       // logic or cause same icon for expanded/collapsed state would remove the ui-icon-class
-                                                       .toggleClass( "ui-icon-" + o.collapsedIcon, ( isCollapse || o.expandedIcon === o.collapsedIcon ) )
-                                               .end()
-                                               .find( "a" ).first().removeClass( $.mobile.activeBtnClass );
-
-                                       $this.toggleClass( "ui-collapsible-collapsed", isCollapse );
-                                       collapsibleContent.toggleClass( "ui-collapsible-content-collapsed", isCollapse ).attr( "aria-hidden", isCollapse );
-
-                                       collapsibleContent.trigger( "updatelayout" );
-                               }
-                       })
-                       .trigger( o.collapsed ? "collapse" : "expand" );
-
-               collapsibleHeading
-                       .bind( "tap", function( event ) {
-                               collapsibleHeading.find( "a" ).first().addClass( $.mobile.activeBtnClass );
-                       })
-                       .bind( "click", function( event ) {
-
-                               var type = collapsibleHeading.is( ".ui-collapsible-heading-collapsed" ) ? "expand" : "collapse";
-
-                               collapsible.trigger( type );
-
-                               event.preventDefault();
-                               event.stopPropagation();
-                       });
-       }
-});
-
-//auto self-init widgets
-$.mobile.document.bind( "pagecreate create", function( e ) {
-       $.mobile.collapsible.prototype.enhanceWithin( e.target );
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-$.mobile.behaviors.addFirstLastClasses = {
-       _getVisibles: function( $els, create ) {
-               var visibles;
-
-               if ( create ) {
-                       visibles = $els.not( ".ui-screen-hidden" );
-               } else {
-                       visibles = $els.filter( ":visible" );
-                       if ( visibles.length === 0 ) {
-                               visibles = $els.not( ".ui-screen-hidden" );
-                       }
-               }
-
-               return visibles;
-       },
-
-       _addFirstLastClasses: function( $els, $visibles, create ) {
-               $els.removeClass( "ui-first-child ui-last-child" );
-               $visibles.eq( 0 ).addClass( "ui-first-child" ).end().last().addClass( "ui-last-child" );
-               if ( !create ) {
-                       this.element.trigger( "updatelayout" );
-               }
-       }
-};
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-$.widget( "mobile.collapsibleset", $.mobile.widget, $.extend( {
-       options: {
-               initSelector: ":jqmData(role='collapsible-set')"
-       },
-       _create: function() {
-               var $el = this.element.addClass( "ui-collapsible-set" ),
-                       o = this.options;
-
-               // Inherit the theme from collapsible-set
-               if ( !o.theme ) {
-                       o.theme = $.mobile.getInheritedTheme( $el, "c" );
-               }
-               // Inherit the content-theme from collapsible-set
-               if ( !o.contentTheme ) {
-                       o.contentTheme = $el.jqmData( "content-theme" );
-               }
-               // Inherit the corner styling from collapsible-set
-               if ( !o.corners ) {
-                       o.corners = $el.jqmData( "corners" );
-               }
-               
-               if ( $el.jqmData( "inset" ) !== undefined ) {
-                       o.inset = $el.jqmData( "inset" );
-               }
-               o.inset = o.inset !== undefined ? o.inset : true;
-               o.corners = o.corners !== undefined ? o.corners : true;
-               
-               if ( !!o.corners && !!o.inset ) {
-                       $el.addClass( "ui-corner-all" );
-               }
-
-               // Initialize the collapsible set if it's not already initialized
-               if ( !$el.jqmData( "collapsiblebound" ) ) {
-                       $el
-                               .jqmData( "collapsiblebound", true )
-                               .bind( "expand", function( event ) {
-                                       var closestCollapsible = $( event.target )
-                                               .closest( ".ui-collapsible" );
-                                       if ( closestCollapsible.parent().is( ":jqmData(role='collapsible-set')" ) ) {
-                                               closestCollapsible
-                                                       .siblings( ".ui-collapsible" )
-                                                       .trigger( "collapse" );
-                                       }
-                               });
-               }
-       },
-
-       _init: function() {
-               var $el = this.element,
-                       collapsiblesInSet = $el.children( ":jqmData(role='collapsible')" ),
-                       expanded = collapsiblesInSet.filter( ":jqmData(collapsed='false')" );
-               this._refresh( "true" );
-
-               // Because the corners are handled by the collapsible itself and the default state is collapsed
-               // That was causing https://github.com/jquery/jquery-mobile/issues/4116
-               expanded.trigger( "expand" );
-       },
-
-       _refresh: function( create ) {
-               var collapsiblesInSet = this.element.children( ":jqmData(role='collapsible')" );
-
-               $.mobile.collapsible.prototype.enhance( collapsiblesInSet.not( ".ui-collapsible" ) );
-
-               this._addFirstLastClasses( collapsiblesInSet, this._getVisibles( collapsiblesInSet, create ), create );
-       },
-
-       refresh: function() {
-               this._refresh( false );
-       }
-}, $.mobile.behaviors.addFirstLastClasses ) );
-
-//auto self-init widgets
-$.mobile.document.bind( "pagecreate create", function( e ) {
-       $.mobile.collapsibleset.prototype.enhanceWithin( e.target );
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-// filter function removes whitespace between label and form element so we can use inline-block (nodeType 3 = text)
-$.fn.fieldcontain = function( options ) {
-       return this
-               .addClass( "ui-field-contain ui-body ui-br" )
-               .contents().filter( function() {
-                       return ( this.nodeType === 3 && !/\S/.test( this.nodeValue ) );
-               }).remove();
-};
-
-//auto self-init widgets
-$( document ).bind( "pagecreate create", function( e ) {
-       $( ":jqmData(role='fieldcontain')", e.target ).jqmEnhanceable().fieldcontain();
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-$.fn.grid = function( options ) {
-       return this.each(function() {
-
-               var $this = $( this ),
-                       o = $.extend({
-                               grid: null
-                       }, options ),
-                       $kids = $this.children(),
-                       gridCols = { solo:1, a:2, b:3, c:4, d:5 },
-                       grid = o.grid,
-                       iterator;
-
-                       if ( !grid ) {
-                               if ( $kids.length <= 5 ) {
-                                       for ( var letter in gridCols ) {
-                                               if ( gridCols[ letter ] === $kids.length ) {
-                                                       grid = letter;
-                                               }
-                                       }
-                               } else {
-                                       grid = "a";
-                                       $this.addClass( "ui-grid-duo" );
-                               }
-                       }
-                       iterator = gridCols[grid];
-
-               $this.addClass( "ui-grid-" + grid );
-
-               $kids.filter( ":nth-child(" + iterator + "n+1)" ).addClass( "ui-block-a" );
-
-               if ( iterator > 1 ) {
-                       $kids.filter( ":nth-child(" + iterator + "n+2)" ).addClass( "ui-block-b" );
-               }
-               if ( iterator > 2 ) {
-                       $kids.filter( ":nth-child(" + iterator + "n+3)" ).addClass( "ui-block-c" );
-               }
-               if ( iterator > 3 ) {
-                       $kids.filter( ":nth-child(" + iterator + "n+4)" ).addClass( "ui-block-d" );
-               }
-               if ( iterator > 4 ) {
-                       $kids.filter( ":nth-child(" + iterator + "n+5)" ).addClass( "ui-block-e" );
-               }
-       });
-};
-})( jQuery );
-
-(function( $, undefined ) {
-
-$.widget( "mobile.navbar", $.mobile.widget, {
-       options: {
-               iconpos: "top",
-               grid: null,
-               initSelector: ":jqmData(role='navbar')"
-       },
-
-       _create: function() {
-
-               var $navbar = this.element,
-                       $navbtns = $navbar.find( "a" ),
-                       iconpos = $navbtns.filter( ":jqmData(icon)" ).length ?
-                                                                       this.options.iconpos : undefined;
-
-               $navbar.addClass( "ui-navbar ui-mini" )
-                       .attr( "role", "navigation" )
-                       .find( "ul" )
-                       .jqmEnhanceable()
-                       .grid({ grid: this.options.grid });
-
-               $navbtns.buttonMarkup({
-                       corners:        false,
-                       shadow:         false,
-                       inline:     true,
-                       iconpos:        iconpos
-               });
-
-               $navbar.delegate( "a", "vclick", function( event ) {
-                       // ui-btn-inner is returned as target
-                       var target = $( event.target ).is( "a" ) ? $( this ) : $( this ).parent( "a" );
-                       
-                       if ( !target.is( ".ui-disabled, .ui-btn-active" ) ) {
-                               $navbtns.removeClass( $.mobile.activeBtnClass );
-                               $( this ).addClass( $.mobile.activeBtnClass );
-                               
-                               // The code below is a workaround to fix #1181
-                               var activeBtn = $( this );
-                               
-                               $( document ).one( "pagehide", function() {
-                                       activeBtn.removeClass( $.mobile.activeBtnClass );
-                               });
-                       }
-               });
-
-               // Buttons in the navbar with ui-state-persist class should regain their active state before page show
-               $navbar.closest( ".ui-page" ).bind( "pagebeforeshow", function() {
-                       $navbtns.filter( ".ui-state-persist" ).addClass( $.mobile.activeBtnClass );
-               });
-       }
-});
-
-//auto self-init widgets
-$.mobile.document.bind( "pagecreate create", function( e ) {
-       $.mobile.navbar.prototype.enhanceWithin( e.target );
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-//Keeps track of the number of lists per page UID
-//This allows support for multiple nested list in the same page
-//https://github.com/jquery/jquery-mobile/issues/1617
-var listCountPerPage = {};
-
-$.widget( "mobile.listview", $.mobile.widget, $.extend( {
-
-       options: {
-               theme: null,
-               countTheme: "c",
-               headerTheme: "b",
-               dividerTheme: "b",
-               icon: "arrow-r",
-               splitIcon: "arrow-r",
-               splitTheme: "b",
-               corners: true,
-               shadow: true,
-               inset: false,
-               initSelector: ":jqmData(role='listview')"
-       },
-
-       _create: function() {
-               var t = this,
-                       listviewClasses = "";
-
-               listviewClasses += t.options.inset ? " ui-listview-inset" : "";
-
-               if ( !!t.options.inset ) {
-                       listviewClasses += t.options.corners ? " ui-corner-all" : "";
-                       listviewClasses += t.options.shadow ? " ui-shadow" : "";
-               }
-
-               // create listview markup
-               t.element.addClass(function( i, orig ) {
-                       return orig + " ui-listview" + listviewClasses;
-               });
-
-               t.refresh( true );
-       },
-
-       // This is a generic utility method for finding the first
-       // node with a given nodeName. It uses basic DOM traversal
-       // to be fast and is meant to be a substitute for simple
-       // $.fn.closest() and $.fn.children() calls on a single
-       // element. Note that callers must pass both the lowerCase
-       // and upperCase version of the nodeName they are looking for.
-       // The main reason for this is that this function will be
-       // called many times and we want to avoid having to lowercase
-       // the nodeName from the element every time to ensure we have
-       // a match. Note that this function lives here for now, but may
-       // be moved into $.mobile if other components need a similar method.
-       _findFirstElementByTagName: function( ele, nextProp, lcName, ucName ) {
-               var dict = {};
-               dict[ lcName ] = dict[ ucName ] = true;
-               while ( ele ) {
-                       if ( dict[ ele.nodeName ] ) {
-                               return ele;
-                       }
-                       ele = ele[ nextProp ];
-               }
-               return null;
-       },
-       _getChildrenByTagName: function( ele, lcName, ucName ) {
-               var results = [],
-                       dict = {};
-               dict[ lcName ] = dict[ ucName ] = true;
-               ele = ele.firstChild;
-               while ( ele ) {
-                       if ( dict[ ele.nodeName ] ) {
-                               results.push( ele );
-                       }
-                       ele = ele.nextSibling;
-               }
-               return $( results );
-       },
-
-       _addThumbClasses: function( containers ) {
-               var i, img, len = containers.length;
-               for ( i = 0; i < len; i++ ) {
-                       img = $( this._findFirstElementByTagName( containers[ i ].firstChild, "nextSibling", "img", "IMG" ) );
-                       if ( img.length ) {
-                               img.addClass( "ui-li-thumb" );
-                               $( this._findFirstElementByTagName( img[ 0 ].parentNode, "parentNode", "li", "LI" ) ).addClass( img.is( ".ui-li-icon" ) ? "ui-li-has-icon" : "ui-li-has-thumb" );
-                       }
-               }
-       },
-
-       refresh: function( create ) {
-               this.parentPage = this.element.closest( ".ui-page" );
-               this._createSubPages();
-
-               var o = this.options,
-                       $list = this.element,
-                       self = this,
-                       dividertheme = $list.jqmData( "dividertheme" ) || o.dividerTheme,
-                       listsplittheme = $list.jqmData( "splittheme" ),
-                       listspliticon = $list.jqmData( "spliticon" ),
-                       listicon = $list.jqmData( "icon" ),
-                       li = this._getChildrenByTagName( $list[ 0 ], "li", "LI" ),
-                       ol = !!$.nodeName( $list[ 0 ], "ol" ),
-                       jsCount = !$.support.cssPseudoElement,
-                       start = $list.attr( "start" ),
-                       itemClassDict = {},
-                       item, itemClass, itemTheme,
-                       a, last, splittheme, counter, startCount, newStartCount, countParent, icon, imgParents, img, linkIcon;
-
-               if ( ol && jsCount ) {
-                       $list.find( ".ui-li-dec" ).remove();
-               }
-
-               if ( ol ) {
-                       // Check if a start attribute has been set while taking a value of 0 into account
-                       if ( start || start === 0 ) {
-                               if ( !jsCount ) {
-                                       startCount = parseInt( start , 10 ) - 1;
-                                       $list.css( "counter-reset", "listnumbering " + startCount );
-                               } else {
-                                       counter = parseInt( start , 10 );
-                               }
-                       } else if ( jsCount ) {
-                                       counter = 1;
-                       }
-               }
-
-               if ( !o.theme ) {
-                       o.theme = $.mobile.getInheritedTheme( this.element, "c" );
-               }
-
-               for ( var pos = 0, numli = li.length; pos < numli; pos++ ) {
-                       item = li.eq( pos );
-                       itemClass = "ui-li";
-
-                       // If we're creating the element, we update it regardless
-                       if ( create || !item.hasClass( "ui-li" ) ) {
-                               itemTheme = item.jqmData( "theme" ) || o.theme;
-                               a = this._getChildrenByTagName( item[ 0 ], "a", "A" );
-                               var isDivider = ( item.jqmData( "role" ) === "list-divider" );
-
-                               if ( a.length && !isDivider ) {
-                                       icon = item.jqmData( "icon" );
-
-                                       item.buttonMarkup({
-                                               wrapperEls: "div",
-                                               shadow: false,
-                                               corners: false,
-                                               iconpos: "right",
-                                               icon: a.length > 1 || icon === false ? false : icon || listicon || o.icon,
-                                               theme: itemTheme
-                                       });
-
-                                       if ( ( icon !== false ) && ( a.length === 1 ) ) {
-                                               item.addClass( "ui-li-has-arrow" );
-                                       }
-
-                                       a.first().removeClass( "ui-link" ).addClass( "ui-link-inherit" );
-
-                                       if ( a.length > 1 ) {
-                                               itemClass += " ui-li-has-alt";
-
-                                               last = a.last();
-                                               splittheme = listsplittheme || last.jqmData( "theme" ) || o.splitTheme;
-                                               linkIcon = last.jqmData( "icon" );
-
-                                               last.appendTo( item )
-                                                       .attr( "title", $.trim(last.getEncodedText()) )
-                                                       .addClass( "ui-li-link-alt" )
-                                                       .empty()
-                                                       .buttonMarkup({
-                                                               shadow: false,
-                                                               corners: false,
-                                                               theme: itemTheme,
-                                                               icon: false,
-                                                               iconpos: "notext"
-                                                       })
-                                                       .find( ".ui-btn-inner" )
-                                                               .append(
-                                                                       $( document.createElement( "span" ) ).buttonMarkup({
-                                                                               shadow: true,
-                                                                               corners: true,
-                                                                               theme: splittheme,
-                                                                               iconpos: "notext",
-                                                                               // link icon overrides list item icon overrides ul element overrides options
-                                                                               icon: linkIcon || icon || listspliticon || o.splitIcon
-                                                                       })
-                                                               );
-                                       }
-                               } else if ( isDivider ) {
-
-                                       itemClass += " ui-li-divider ui-bar-" + ( item.jqmData( "theme" ) || dividertheme );
-                                       item.attr( "role", "heading" );
-
-                                       if ( ol ) {
-                                               //reset counter when a divider heading is encountered
-                                               if ( start || start === 0 ) {
-                                                       if ( !jsCount ) {
-                                                               newStartCount = parseInt( start , 10 ) - 1;
-                                                               item.css( "counter-reset", "listnumbering " + newStartCount );
-                                                       } else {
-                                                               counter = parseInt( start , 10 );
-                                                       }
-                                               } else if ( jsCount ) {
-                                                               counter = 1;
-                                               }
-                                       }
-
-                               } else {
-                                       itemClass += " ui-li-static ui-btn-up-" + itemTheme;
-                               }
-                       }
-
-                       if ( ol && jsCount && itemClass.indexOf( "ui-li-divider" ) < 0 ) {
-                               countParent = itemClass.indexOf( "ui-li-static" ) > 0 ? item : item.find( ".ui-link-inherit" );
-
-                               countParent.addClass( "ui-li-jsnumbering" )
-                                       .prepend( "<span class='ui-li-dec'>" + ( counter++ ) + ". </span>" );
-                       }
-
-                       // Instead of setting item class directly on the list item and its
-                       // btn-inner at this point in time, push the item into a dictionary
-                       // that tells us what class to set on it so we can do this after this
-                       // processing loop is finished.
-
-                       if ( !itemClassDict[ itemClass ] ) {
-                               itemClassDict[ itemClass ] = [];
-                       }
-
-                       itemClassDict[ itemClass ].push( item[ 0 ] );
-               }
-
-               // Set the appropriate listview item classes on each list item
-               // and their btn-inner elements. The main reason we didn't do this
-               // in the for-loop above is because we can eliminate per-item function overhead
-               // by calling addClass() and children() once or twice afterwards. This
-               // can give us a significant boost on platforms like WP7.5.
-
-               for ( itemClass in itemClassDict ) {
-                       $( itemClassDict[ itemClass ] ).addClass( itemClass ).children( ".ui-btn-inner" ).addClass( itemClass );
-               }
-
-               $list.find( "h1, h2, h3, h4, h5, h6" ).addClass( "ui-li-heading" )
-                       .end()
-
-                       .find( "p, dl" ).addClass( "ui-li-desc" )
-                       .end()
-
-                       .find( ".ui-li-aside" ).each(function() {
-                                       var $this = $( this );
-                                       $this.prependTo( $this.parent() ); //shift aside to front for css float
-                               })
-                       .end()
-
-                       .find( ".ui-li-count" ).each(function() {
-                                       $( this ).closest( "li" ).addClass( "ui-li-has-count" );
-                               }).addClass( "ui-btn-up-" + ( $list.jqmData( "counttheme" ) || this.options.countTheme) + " ui-btn-corner-all" );
-
-               // The idea here is to look at the first image in the list item
-               // itself, and any .ui-link-inherit element it may contain, so we
-               // can place the appropriate classes on the image and list item.
-               // Note that we used to use something like:
-               //
-               //    li.find(">img:eq(0), .ui-link-inherit>img:eq(0)").each( ... );
-               //
-               // But executing a find() like that on Windows Phone 7.5 took a
-               // really long time. Walking things manually with the code below
-               // allows the 400 listview item page to load in about 3 seconds as
-               // opposed to 30 seconds.
-
-               this._addThumbClasses( li );
-               this._addThumbClasses( $list.find( ".ui-link-inherit" ) );
-
-               this._addFirstLastClasses( li, this._getVisibles( li, create ), create );
-               // autodividers binds to this to redraw dividers after the listview refresh
-               this._trigger( "afterrefresh" );
-       },
-
-       //create a string for ID/subpage url creation
-       _idStringEscape: function( str ) {
-               return str.replace(/[^a-zA-Z0-9]/g, '-');
-       },
-
-       _createSubPages: function() {
-               var parentList = this.element,
-                       parentPage = parentList.closest( ".ui-page" ),
-                       parentUrl = parentPage.jqmData( "url" ),
-                       parentId = parentUrl || parentPage[ 0 ][ $.expando ],
-                       parentListId = parentList.attr( "id" ),
-                       o = this.options,
-                       dns = "data-" + $.mobile.ns,
-                       self = this,
-                       persistentFooterID = parentPage.find( ":jqmData(role='footer')" ).jqmData( "id" ),
-                       hasSubPages;
-
-               if ( typeof listCountPerPage[ parentId ] === "undefined" ) {
-                       listCountPerPage[ parentId ] = -1;
-               }
-
-               parentListId = parentListId || ++listCountPerPage[ parentId ];
-
-               $( parentList.find( "li>ul, li>ol" ).toArray().reverse() ).each(function( i ) {
-                       var self = this,
-                               list = $( this ),
-                               listId = list.attr( "id" ) || parentListId + "-" + i,
-                               parent = list.parent(),
-                               nodeElsFull = $( list.prevAll().toArray().reverse() ),
-                               nodeEls = nodeElsFull.length ? nodeElsFull : $( "<span>" + $.trim(parent.contents()[ 0 ].nodeValue) + "</span>" ),
-                               title = nodeEls.first().getEncodedText(),//url limits to first 30 chars of text
-                               id = ( parentUrl || "" ) + "&" + $.mobile.subPageUrlKey + "=" + listId,
-                               theme = list.jqmData( "theme" ) || o.theme,
-                               countTheme = list.jqmData( "counttheme" ) || parentList.jqmData( "counttheme" ) || o.countTheme,
-                               newPage, anchor;
-
-                       //define hasSubPages for use in later removal
-                       hasSubPages = true;
-
-                       newPage = list.detach()
-                                               .wrap( "<div " + dns + "role='page' " + dns + "url='" + id + "' " + dns + "theme='" + theme + "' " + dns + "count-theme='" + countTheme + "'><div " + dns + "role='content'></div></div>" )
-                                               .parent()
-                                                       .before( "<div " + dns + "role='header' " + dns + "theme='" + o.headerTheme + "'><div class='ui-title'>" + title + "</div></div>" )
-                                                       .after( persistentFooterID ? $( "<div " + dns + "role='footer' " + dns + "id='"+ persistentFooterID +"'>" ) : "" )
-                                                       .parent()
-                                                               .appendTo( $.mobile.pageContainer );
-
-                       newPage.page();
-
-                       anchor = parent.find( 'a:first' );
-
-                       if ( !anchor.length ) {
-                               anchor = $( "<a/>" ).html( nodeEls || title ).prependTo( parent.empty() );
-                       }
-
-                       anchor.attr( "href", "#" + id );
-
-               }).listview();
-
-               // on pagehide, remove any nested pages along with the parent page, as long as they aren't active
-               // and aren't embedded
-               if ( hasSubPages &&
-                       parentPage.is( ":jqmData(external-page='true')" ) &&
-                       parentPage.data( "mobile-page" ).options.domCache === false ) {
-
-                       var newRemove = function( e, ui ) {
-                               var nextPage = ui.nextPage, npURL,
-                                       prEvent = new $.Event( "pageremove" );
-
-                               if ( ui.nextPage ) {
-                                       npURL = nextPage.jqmData( "url" );
-                                       if ( npURL.indexOf( parentUrl + "&" + $.mobile.subPageUrlKey ) !== 0 ) {
-                                               self.childPages().remove();
-                                               parentPage.trigger( prEvent );
-                                               if ( !prEvent.isDefaultPrevented() ) {
-                                                       parentPage.removeWithDependents();
-                                               }
-                                       }
-                               }
-                       };
-
-                       // unbind the original page remove and replace with our specialized version
-                       parentPage
-                               .unbind( "pagehide.remove" )
-                               .bind( "pagehide.remove", newRemove);
-               }
-       },
-
-       // TODO sort out a better way to track sub pages of the listview this is brittle
-       childPages: function() {
-               var parentUrl = this.parentPage.jqmData( "url" );
-
-               return $( ":jqmData(url^='"+  parentUrl + "&" + $.mobile.subPageUrlKey + "')" );
-       }
-}, $.mobile.behaviors.addFirstLastClasses ) );
-
-//auto self-init widgets
-$.mobile.document.bind( "pagecreate create", function( e ) {
-       $.mobile.listview.prototype.enhanceWithin( e.target );
-});
-
-})( jQuery );
-
-(function( $ ) {
-       var     meta = $( "meta[name=viewport]" ),
-               initialContent = meta.attr( "content" ),
-               disabledZoom = initialContent + ",maximum-scale=1, user-scalable=no",
-               enabledZoom = initialContent + ",maximum-scale=10, user-scalable=yes",
-               disabledInitially = /(user-scalable[\s]*=[\s]*no)|(maximum-scale[\s]*=[\s]*1)[$,\s]/.test( initialContent );
-
-       $.mobile.zoom = $.extend( {}, {
-               enabled: !disabledInitially,
-               locked: false,
-               disable: function( lock ) {
-                       if ( !disabledInitially && !$.mobile.zoom.locked ) {
-                               meta.attr( "content", disabledZoom );
-                               $.mobile.zoom.enabled = false;
-                               $.mobile.zoom.locked = lock || false;
-                       }
-               },
-               enable: function( unlock ) {
-                       if ( !disabledInitially && ( !$.mobile.zoom.locked || unlock === true ) ) {
-                               meta.attr( "content", enabledZoom );
-                               $.mobile.zoom.enabled = true;
-                               $.mobile.zoom.locked = false;
-                       }
-               },
-               restore: function() {
-                       if ( !disabledInitially ) {
-                               meta.attr( "content", initialContent );
-                               $.mobile.zoom.enabled = true;
-                       }
-               }
-       });
-
-}( jQuery ));
-
-(function( $, undefined ) {
-
-$.widget( "mobile.textinput", $.mobile.widget, {
-       options: {
-               theme: null,
-               mini: false,
-               // This option defaults to true on iOS devices.
-               preventFocusZoom: /iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1,
-               initSelector: "input[type='text'], input[type='search'], :jqmData(type='search'), input[type='number'], :jqmData(type='number'), input[type='password'], input[type='email'], input[type='url'], input[type='tel'], textarea, input[type='time'], input[type='date'], input[type='month'], input[type='week'], input[type='datetime'], input[type='datetime-local'], input[type='color'], input:not([type]), input[type='file']",
-               clearBtn: false,
-               clearSearchButtonText: null, //deprecating for 1.3...
-               clearBtnText: "clear text",
-               disabled: false
-       },
-
-       _create: function() {
-
-               var self = this,
-                       input = this.element,
-                       o = this.options,
-                       theme = o.theme || $.mobile.getInheritedTheme( this.element, "c" ),
-                       themeclass  = " ui-body-" + theme,
-                       miniclass = o.mini ? " ui-mini" : "",
-                       isSearch = input.is( "[type='search'], :jqmData(type='search')" ),
-                       focusedEl,
-                       clearbtn,
-                       clearBtnText = o.clearSearchButtonText || o.clearBtnText,
-                       clearBtnBlacklist = input.is( "textarea, :jqmData(type='range')" ),
-                       inputNeedsClearBtn = !!o.clearBtn && !clearBtnBlacklist,
-                       inputNeedsWrap = input.is( "input" ) && !input.is( ":jqmData(type='range')" );
-
-               function toggleClear() {
-                       setTimeout( function() {
-                               clearbtn.toggleClass( "ui-input-clear-hidden", !input.val() );
-                       }, 0 );
-               }
-
-               $( "label[for='" + input.attr( "id" ) + "']" ).addClass( "ui-input-text" );
-
-               focusedEl = input.addClass( "ui-input-text ui-body-"+ theme );
-
-               // XXX: Temporary workaround for issue 785 (Apple bug 8910589).
-               //      Turn off autocorrect and autocomplete on non-iOS 5 devices
-               //      since the popup they use can't be dismissed by the user. Note
-               //      that we test for the presence of the feature by looking for
-               //      the autocorrect property on the input element. We currently
-               //      have no test for iOS 5 or newer so we're temporarily using
-               //      the touchOverflow support flag for jQM 1.0. Yes, I feel dirty. - jblas
-               if ( typeof input[0].autocorrect !== "undefined" && !$.support.touchOverflow ) {
-                       // Set the attribute instead of the property just in case there
-                       // is code that attempts to make modifications via HTML.
-                       input[0].setAttribute( "autocorrect", "off" );
-                       input[0].setAttribute( "autocomplete", "off" );
-               }
-
-               //"search" and "text" input widgets
-               if ( isSearch ) {
-                       focusedEl = input.wrap( "<div class='ui-input-search ui-shadow-inset ui-btn-corner-all ui-btn-shadow ui-icon-searchfield" + themeclass + miniclass + "'></div>" ).parent();
-               } else if ( inputNeedsWrap ) {
-                       focusedEl = input.wrap( "<div class='ui-input-text ui-shadow-inset ui-corner-all ui-btn-shadow" + themeclass + miniclass + "'></div>" ).parent();
-               }
-
-               if( inputNeedsClearBtn || isSearch ) {
-                       clearbtn = $( "<a href='#' class='ui-input-clear' title='" + clearBtnText + "'>" + clearBtnText + "</a>" )
-                               .bind( "click", function( event ) {
-                                       input
-                                               .val( "" )
-                                               .focus()
-                                               .trigger( "change" );
-                                       clearbtn.addClass( "ui-input-clear-hidden" );
-                                       event.preventDefault();
-                               })
-                               .appendTo( focusedEl )
-                               .buttonMarkup({
-                                       icon: "delete",
-                                       iconpos: "notext",
-                                       corners: true,
-                                       shadow: true,
-                                       mini: o.mini
-                               });
-                               
-                       if ( !isSearch ) {
-                               focusedEl.addClass( "ui-input-has-clear" );
-                       }
-
-                       toggleClear();
-
-                       input.bind( "paste cut keyup input focus change blur", toggleClear );
-               }
-               else if ( !inputNeedsWrap && !isSearch ) {
-                       input.addClass( "ui-corner-all ui-shadow-inset" + themeclass + miniclass );
-               }
-
-               input.focus(function() {
-                               // In many situations, iOS will zoom into the input upon tap, this prevents that from happening
-                               if ( o.preventFocusZoom ) {
-                                       $.mobile.zoom.disable( true );
-                               }                       
-                               focusedEl.addClass( $.mobile.focusClass );
-                       })
-                       .blur(function() {
-                               focusedEl.removeClass( $.mobile.focusClass );
-                               if ( o.preventFocusZoom ) {
-                                       $.mobile.zoom.enable( true );
-                               }                               
-                       });
-
-               // Autogrow
-               if ( input.is( "textarea" ) ) {
-                       var extraLineHeight = 15,
-                               keyupTimeoutBuffer = 100,
-                               keyupTimeout;
-
-                       this._keyup = function() {
-                               var scrollHeight = input[ 0 ].scrollHeight,
-                                       clientHeight = input[ 0 ].clientHeight;
-
-                               if ( clientHeight < scrollHeight ) {
-                                       var paddingTop = parseFloat( input.css( "padding-top" ) ),
-                                               paddingBottom = parseFloat( input.css( "padding-bottom" ) ),
-                                               paddingHeight = paddingTop + paddingBottom;
-                                       
-                                       input.height( scrollHeight - paddingHeight + extraLineHeight );
-                               }
-                       };
-
-                       input.on( "keyup change input paste", function() {
-                               clearTimeout( keyupTimeout );
-                               keyupTimeout = setTimeout( self._keyup, keyupTimeoutBuffer );
-                       });
-
-                       // binding to pagechange here ensures that for pages loaded via
-                       // ajax the height is recalculated without user input
-                       this._on( true, $.mobile.document, { "pagechange": "_keyup" });
-
-                       // Issue 509: the browser is not providing scrollHeight properly until the styles load
-                       if ( $.trim( input.val() ) ) {
-                               // bind to the window load to make sure the height is calculated based on BOTH
-                               // the DOM and CSS
-                               this._on( true, $.mobile.window, {"load": "_keyup"});
-                       }
-               }
-               if ( input.attr( "disabled" ) ) {
-                       this.disable();
-               }
-       },
-
-       disable: function() {
-               var $el,
-                       isSearch = this.element.is( "[type='search'], :jqmData(type='search')" ),
-                       inputNeedsWrap = this.element.is( "input" ) && !this.element.is( ":jqmData(type='range')" ),
-                       parentNeedsDisabled = this.element.attr( "disabled", true )     && ( inputNeedsWrap || isSearch );
-                       
-               if ( parentNeedsDisabled ) {
-                       $el = this.element.parent();
-               } else {
-                       $el = this.element;
-               }
-               $el.addClass( "ui-disabled" );
-               return this._setOption( "disabled", true );
-       },
-
-       enable: function() {
-               var $el,
-                       isSearch = this.element.is( "[type='search'], :jqmData(type='search')" ),
-                       inputNeedsWrap = this.element.is( "input" ) && !this.element.is( ":jqmData(type='range')" ),
-                       parentNeedsEnabled = this.element.attr( "disabled", false )     && ( inputNeedsWrap || isSearch );
-
-               if ( parentNeedsEnabled ) {
-                       $el = this.element.parent();
-               } else {
-                       $el = this.element;
-               }
-               $el.removeClass( "ui-disabled" );
-               return this._setOption( "disabled", false );
-       }
-});
-
-//auto self-init widgets
-$.mobile.document.bind( "pagecreate create", function( e ) {
-       $.mobile.textinput.prototype.enhanceWithin( e.target, true );
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-$.mobile.listview.prototype.options.filter = false;
-$.mobile.listview.prototype.options.filterPlaceholder = "Filter items...";
-$.mobile.listview.prototype.options.filterTheme = "c";
-$.mobile.listview.prototype.options.filterReveal = false;
-// TODO rename callback/deprecate and default to the item itself as the first argument
-var defaultFilterCallback = function( text, searchValue, item ) {
-               return text.toString().toLowerCase().indexOf( searchValue ) === -1;
-       };
-
-$.mobile.listview.prototype.options.filterCallback = defaultFilterCallback;
-
-$.mobile.document.delegate( "ul, ol", "listviewcreate", function() {
-       var list = $( this ),
-               listview = list.data( "mobile-listview" );
-
-       if ( !listview || !listview.options.filter ) {
-               return;
-       }
-
-       if ( listview.options.filterReveal ) {
-               list.children().addClass( "ui-screen-hidden" );
-       }
-
-       var wrapper = $( "<form>", {
-                       "class": "ui-listview-filter ui-bar-" + listview.options.filterTheme,
-                       "role": "search"
-               }).submit( function( e ) {
-                       e.preventDefault();
-                       search.blur();
-               }),
-               onKeyUp = function( e ) {
-                       var $this = $( this ),
-                               val = this.value.toLowerCase(),
-                               listItems = null,
-                               li = list.children(),
-                               lastval = $this.jqmData( "lastval" ) + "",
-                               childItems = false,
-                               itemtext = "",
-                               item,
-                               // Check if a custom filter callback applies
-                               isCustomFilterCallback = listview.options.filterCallback !== defaultFilterCallback;
-
-                       if ( lastval && lastval === val ) {
-                               // Execute the handler only once per value change
-                               return;
-                       }
-
-                       listview._trigger( "beforefilter", "beforefilter", { input: this } );
-
-                       // Change val as lastval for next execution
-                       $this.jqmData( "lastval" , val );
-                       if ( isCustomFilterCallback || val.length < lastval.length || val.indexOf( lastval ) !== 0 ) {
-
-                               // Custom filter callback applies or removed chars or pasted something totally different, check all items
-                               listItems = list.children();
-                       } else {
-
-                               // Only chars added, not removed, only use visible subset
-                               listItems = list.children( ":not(.ui-screen-hidden)" );
-
-                               if ( !listItems.length && listview.options.filterReveal ) {
-                                       listItems = list.children( ".ui-screen-hidden" );
-                               }
-                       }
-
-                       if ( val ) {
-
-                               // This handles hiding regular rows without the text we search for
-                               // and any list dividers without regular rows shown under it
-
-                               for ( var i = listItems.length - 1; i >= 0; i-- ) {
-                                       item = $( listItems[ i ] );
-                                       itemtext = item.jqmData( "filtertext" ) || item.text();
-
-                                       if ( item.is( "li:jqmData(role=list-divider)" ) ) {
-
-                                               item.toggleClass( "ui-filter-hidequeue" , !childItems );
-
-                                               // New bucket!
-                                               childItems = false;
-
-                                       } else if ( listview.options.filterCallback( itemtext, val, item ) ) {
-
-                                               //mark to be hidden
-                                               item.toggleClass( "ui-filter-hidequeue" , true );
-                                       } else {
-
-                                               // There's a shown item in the bucket
-                                               childItems = true;
-                                       }
-                               }
-
-                               // Show items, not marked to be hidden
-                               listItems
-                                       .filter( ":not(.ui-filter-hidequeue)" )
-                                       .toggleClass( "ui-screen-hidden", false );
-
-                               // Hide items, marked to be hidden
-                               listItems
-                                       .filter( ".ui-filter-hidequeue" )
-                                       .toggleClass( "ui-screen-hidden", true )
-                                       .toggleClass( "ui-filter-hidequeue", false );
-
-                       } else {
-
-                               //filtervalue is empty => show all
-                               listItems.toggleClass( "ui-screen-hidden", !!listview.options.filterReveal );
-                       }
-                       listview._addFirstLastClasses( li, listview._getVisibles( li, false ), false );
-               },
-               search = $( "<input>", {
-                       placeholder: listview.options.filterPlaceholder
-               })
-               .attr( "data-" + $.mobile.ns + "type", "search" )
-               .jqmData( "lastval", "" )
-               .bind( "keyup change input", onKeyUp )
-               .appendTo( wrapper )
-               .textinput();
-
-       if ( listview.options.inset ) {
-               wrapper.addClass( "ui-listview-filter-inset" );
-       }
-
-       wrapper.bind( "submit", function() {
-               return false;
-       })
-       .insertBefore( list );
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-$.mobile.listview.prototype.options.autodividers = false;
-$.mobile.listview.prototype.options.autodividersSelector = function( elt ) {
-       // look for the text in the given element
-       var text = $.trim( elt.text() ) || null;
-
-       if ( !text ) {
-               return null;
-       }
-
-       // create the text for the divider (first uppercased letter)
-       text = text.slice( 0, 1 ).toUpperCase();
-
-       return text;
-};
-
-$.mobile.document.delegate( "ul,ol", "listviewcreate", function() {
-
-       var list = $( this ),
-                       listview = list.data( "mobile-listview" );
-
-       if ( !listview || !listview.options.autodividers ) {
-               return;
-       }
-
-       var replaceDividers = function () {
-               list.find( "li:jqmData(role='list-divider')" ).remove();
-
-               var lis = list.find( 'li' ),
-                       lastDividerText = null, li, dividerText;
-
-               for ( var i = 0; i < lis.length ; i++ ) {
-                       li = lis[i];
-                       dividerText = listview.options.autodividersSelector( $( li ) );
-
-                       if ( dividerText && lastDividerText !== dividerText ) {
-                               var divider = document.createElement( 'li' );
-                               divider.appendChild( document.createTextNode( dividerText ) );
-                               divider.setAttribute( 'data-' + $.mobile.ns + 'role', 'list-divider' );
-                               li.parentNode.insertBefore( divider, li );
-                       }
-
-                       lastDividerText = dividerText;
-               }
-       };
-
-       var afterListviewRefresh = function () {
-               list.unbind( 'listviewafterrefresh', afterListviewRefresh );
-               replaceDividers();
-               listview.refresh();
-               list.bind( 'listviewafterrefresh', afterListviewRefresh );
-       };
-
-       afterListviewRefresh();
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-$( document ).bind( "pagecreate create", function( e ) {
-       $( ":jqmData(role='nojs')", e.target ).addClass( "ui-nojs" );
-       
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-$.mobile.behaviors.formReset = {
-       _handleFormReset: function() {
-               this._on( this.element.closest( "form" ), {
-                       reset: function() {
-                               this._delay( "_reset" );
-                       }
-               });
-       }
-};
-
-})( jQuery );
-
-/*
-* "checkboxradio" plugin
-*/
-
-(function( $, undefined ) {
-
-$.widget( "mobile.checkboxradio", $.mobile.widget, $.extend( {
-       options: {
-               theme: null,
-               mini: false,
-               initSelector: "input[type='checkbox'],input[type='radio']"
-       },
-       _create: function() {
-               var self = this,
-                       input = this.element,
-                       o = this.options,
-                       inheritAttr = function( input, dataAttr ) {
-                               return input.jqmData( dataAttr ) || input.closest( "form, fieldset" ).jqmData( dataAttr );
-                       },
-                       // NOTE: Windows Phone could not find the label through a selector
-                       // filter works though.
-                       parentLabel = $( input ).closest( "label" ),
-                       label = parentLabel.length ? parentLabel : $( input ).closest( "form, fieldset, :jqmData(role='page'), :jqmData(role='dialog')" ).find( "label" ).filter( "[for='" + input[0].id + "']" ).first(),
-                       inputtype = input[0].type,
-                       mini = inheritAttr( input, "mini" ) || o.mini,
-                       checkedState = inputtype + "-on",
-                       uncheckedState = inputtype + "-off",
-                       iconpos = inheritAttr( input, "iconpos" ),
-                       checkedClass = "ui-" + checkedState,
-                       uncheckedClass = "ui-" + uncheckedState;
-
-               if ( inputtype !== "checkbox" && inputtype !== "radio" ) {
-                       return;
-               }
-
-               // Expose for other methods
-               $.extend( this, {
-                       label: label,
-                       inputtype: inputtype,
-                       checkedClass: checkedClass,
-                       uncheckedClass: uncheckedClass,
-                       checkedicon: checkedState,
-                       uncheckedicon: uncheckedState
-               });
-
-               // If there's no selected theme check the data attr
-               if ( !o.theme ) {
-                       o.theme = $.mobile.getInheritedTheme( this.element, "c" );
-               }
-
-               label.buttonMarkup({
-                       theme: o.theme,
-                       icon: uncheckedState,
-                       shadow: false,
-                       mini: mini,
-                       iconpos: iconpos
-               });
-
-               // Wrap the input + label in a div
-               var wrapper = document.createElement('div');
-               wrapper.className = 'ui-' + inputtype;
-
-               input.add( label ).wrapAll( wrapper );
-
-               label.bind({
-                       vmouseover: function( event ) {
-                               if ( $( this ).parent().is( ".ui-disabled" ) ) {
-                                       event.stopPropagation();
-                               }
-                       },
-
-                       vclick: function( event ) {
-                               if ( input.is( ":disabled" ) ) {
-                                       event.preventDefault();
-                                       return;
-                               }
-
-                               self._cacheVals();
-
-                               input.prop( "checked", inputtype === "radio" && true || !input.prop( "checked" ) );
-
-                               // trigger click handler's bound directly to the input as a substitute for
-                               // how label clicks behave normally in the browsers
-                               // TODO: it would be nice to let the browser's handle the clicks and pass them
-                               //       through to the associate input. we can swallow that click at the parent
-                               //       wrapper element level
-                               input.triggerHandler( 'click' );
-
-                               // Input set for common radio buttons will contain all the radio
-                               // buttons, but will not for checkboxes. clearing the checked status
-                               // of other radios ensures the active button state is applied properly
-                               self._getInputSet().not( input ).prop( "checked", false );
-
-                               self._updateAll();
-                               return false;
-                       }
-               });
-
-               input
-                       .bind({
-                               vmousedown: function() {
-                                       self._cacheVals();
-                               },
-
-                               vclick: function() {
-                                       var $this = $( this );
-
-                                       // Adds checked attribute to checked input when keyboard is used
-                                       if ( $this.is( ":checked" ) ) {
-
-                                               $this.prop( "checked", true);
-                                               self._getInputSet().not( $this ).prop( "checked", false );
-                                       } else {
-
-                                               $this.prop( "checked", false );
-                                       }
-
-                                       self._updateAll();
-                               },
-
-                               focus: function() {
-                                       label.addClass( $.mobile.focusClass );
-                               },
-
-                               blur: function() {
-                                       label.removeClass( $.mobile.focusClass );
-                               }
-                       });
-
-               this._handleFormReset();
-               this.refresh();
-       },
-
-       _cacheVals: function() {
-               this._getInputSet().each(function() {
-                       $( this ).jqmData( "cacheVal", this.checked );
-               });
-       },
-
-       //returns either a set of radios with the same name attribute, or a single checkbox
-       _getInputSet: function() {
-               if ( this.inputtype === "checkbox" ) {
-                       return this.element;
-               }
-
-               return this.element.closest( "form, :jqmData(role='page'), :jqmData(role='dialog')" )
-                       .find( "input[name='" + this.element[0].name + "'][type='" + this.inputtype + "']" );
-       },
-
-       _updateAll: function() {
-               var self = this;
-
-               this._getInputSet().each(function() {
-                       var $this = $( this );
-
-                       if ( this.checked || self.inputtype === "checkbox" ) {
-                               $this.trigger( "change" );
-                       }
-               })
-               .checkboxradio( "refresh" );
-       },
-
-       _reset: function() {
-               this.refresh();
-       },
-
-       refresh: function() {
-               var input = this.element[ 0 ],
-                       active = " " + $.mobile.activeBtnClass,
-                       checkedClass = this.checkedClass + ( this.element.parents( ".ui-controlgroup-horizontal" ).length ? active : "" ),
-                       label = this.label;
-
-               if ( input.checked ) {
-                       label.removeClass( this.uncheckedClass + active ).addClass( checkedClass ).buttonMarkup( { icon: this.checkedicon } );
-               } else {
-                       label.removeClass( checkedClass ).addClass( this.uncheckedClass ).buttonMarkup( { icon: this.uncheckedicon } );
-               }
-
-               if ( input.disabled ) {
-                       this.disable();
-               } else {
-                       this.enable();
-               }
-       },
-
-       disable: function() {
-               this.element.prop( "disabled", true ).parent().addClass( "ui-disabled" );
-       },
-
-       enable: function() {
-               this.element.prop( "disabled", false ).parent().removeClass( "ui-disabled" );
-       }
-}, $.mobile.behaviors.formReset ) );
-
-//auto self-init widgets
-$.mobile.document.bind( "pagecreate create", function( e ) {
-       $.mobile.checkboxradio.prototype.enhanceWithin( e.target, true );
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-$.widget( "mobile.button", $.mobile.widget, {
-       options: {
-               theme: null,
-               icon: null,
-               iconpos: null,
-               corners: true,
-               shadow: true,
-               iconshadow: true,
-               inline: null,
-               mini: null,
-               initSelector: "button, [type='button'], [type='submit'], [type='reset']"
-       },
-       _create: function() {
-               var $el = this.element,
-                       $button,
-                       // create a copy of this.options we can pass to buttonMarkup
-                       o = ( function( tdo ) {
-                               var key, ret = {};
-
-                               for ( key in tdo ) {
-                                       if ( tdo[ key ] !== null && key !== "initSelector" ) {
-                                               ret[ key ] = tdo[ key ];
-                                       }
-                               }
-
-                               return ret;
-                       } )( this.options ),
-                       classes = "",
-                       $buttonPlaceholder;
-
-               // if this is a link, check if it's been enhanced and, if not, use the right function
-               if ( $el[ 0 ].tagName === "A" ) {
-                       if ( !$el.hasClass( "ui-btn" ) ) {
-                               $el.buttonMarkup();
-                       }
-                       return;
-               }
-
-               // get the inherited theme
-               // TODO centralize for all widgets
-               if ( !this.options.theme ) {
-                       this.options.theme = $.mobile.getInheritedTheme( this.element, "c" );
-               }
-
-               // TODO: Post 1.1--once we have time to test thoroughly--any classes manually applied to the original element should be carried over to the enhanced element, with an `-enhanced` suffix. See https://github.com/jquery/jquery-mobile/issues/3577
-               /* if ( $el[0].className.length ) {
-                       classes = $el[0].className;
-               } */
-               if ( !!~$el[0].className.indexOf( "ui-btn-left" ) ) {
-                       classes = "ui-btn-left";
-               }
-
-               if (  !!~$el[0].className.indexOf( "ui-btn-right" ) ) {
-                       classes = "ui-btn-right";
-               }
-
-               if (  $el.attr( "type" ) === "submit" || $el.attr( "type" ) === "reset" ) {
-                       if ( classes ) {
-                               classes += " ui-submit";
-                       } else {
-                               classes = "ui-submit";
-                       }
-               }
-               $( "label[for='" + $el.attr( "id" ) + "']" ).addClass( "ui-submit" );
-
-               // Add ARIA role
-               this.button = $( "<div></div>" )
-                       [ $el.html() ? "html" : "text" ]( $el.html() || $el.val() )
-                       .insertBefore( $el )
-                       .buttonMarkup( o )
-                       .addClass( classes )
-                       .append( $el.addClass( "ui-btn-hidden" ) );
-
-        $button = this.button;
-
-               $el.bind({
-                       focus: function() {
-                               $button.addClass( $.mobile.focusClass );
-                       },
-
-                       blur: function() {
-                               $button.removeClass( $.mobile.focusClass );
-                       }
-               });
-
-               this.refresh();
-       },
-
-       _setOption: function( key, value ) {
-               var op = {};
-
-               op[ key ] = value;
-               if ( key !== "initSelector" ) {
-                       this.button.buttonMarkup( op );
-                       // Record the option change in the options and in the DOM data-* attributes
-                       this.element.attr( "data-" + ( $.mobile.ns || "" ) + ( key.replace( /([A-Z])/, "-$1" ).toLowerCase() ), value );
-               }
-               this._super( "_setOption", key, value );
-       },
-
-       enable: function() {
-               this.element.attr( "disabled", false );
-               this.button.removeClass( "ui-disabled" ).attr( "aria-disabled", false );
-               return this._setOption( "disabled", false );
-       },
-
-       disable: function() {
-               this.element.attr( "disabled", true );
-               this.button.addClass( "ui-disabled" ).attr( "aria-disabled", true );
-               return this._setOption( "disabled", true );
-       },
-
-       refresh: function() {
-               var $el = this.element;
-
-               if ( $el.prop("disabled") ) {
-                       this.disable();
-               } else {
-                       this.enable();
-               }
-
-               // Grab the button's text element from its implementation-independent data item
-               $( this.button.data( 'buttonElements' ).text )[ $el.html() ? "html" : "text" ]( $el.html() || $el.val() );
-       }
-});
-
-//auto self-init widgets
-$.mobile.document.bind( "pagecreate create", function( e ) {
-       $.mobile.button.prototype.enhanceWithin( e.target, true );
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-$.widget( "mobile.slider", $.mobile.widget, $.extend( {
-       widgetEventPrefix: "slide",
-
-       options: {
-               theme: null,
-               trackTheme: null,
-               disabled: false,
-               initSelector: "input[type='range'], :jqmData(type='range'), :jqmData(role='slider')",
-               mini: false,
-               highlight: false
-       },
-
-       _create: function() {
-
-               // TODO: Each of these should have comments explain what they're for
-               var self = this,
-                       control = this.element,
-                       parentTheme = $.mobile.getInheritedTheme( control, "c" ),
-                       theme = this.options.theme || parentTheme,
-                       trackTheme = this.options.trackTheme || parentTheme,
-                       cType = control[ 0 ].nodeName.toLowerCase(),
-                       isSelect = this.isToggleSwitch = cType === "select",
-                       isRangeslider = control.parent().is( ":jqmData(role='rangeslider')" ),
-                       selectClass = ( this.isToggleSwitch ) ? "ui-slider-switch" : "",
-                       controlID = control.attr( "id" ),
-                       $label = $( "[for='" + controlID + "']" ),
-                       labelID = $label.attr( "id" ) || controlID + "-label",
-                       label = $label.attr( "id", labelID ),
-                       min = !this.isToggleSwitch ? parseFloat( control.attr( "min" ) ) : 0,
-                       max =  !this.isToggleSwitch ? parseFloat( control.attr( "max" ) ) : control.find( "option" ).length-1,
-                       step = window.parseFloat( control.attr( "step" ) || 1 ),
-                       miniClass = ( this.options.mini || control.jqmData( "mini" ) ) ? " ui-mini" : "",
-                       domHandle = document.createElement( "a" ),
-                       handle = $( domHandle ),
-                       domSlider = document.createElement( "div" ),
-                       slider = $( domSlider ),
-                       valuebg = this.options.highlight && !this.isToggleSwitch ? (function() {
-                               var bg = document.createElement( "div" );
-                               bg.className = "ui-slider-bg " + $.mobile.activeBtnClass + " ui-btn-corner-all";
-                               return $( bg ).prependTo( slider );
-                       })() : false,
-                       options,
-                       wrapper;
-                       
-               domHandle.setAttribute( "href", "#" );
-               domSlider.setAttribute( "role", "application" );
-               domSlider.className = [this.isToggleSwitch ? "ui-slider " : "ui-slider-track ",selectClass," ui-btn-down-",trackTheme," ui-btn-corner-all", miniClass].join( "" );
-               domHandle.className = "ui-slider-handle";
-               domSlider.appendChild( domHandle );
-
-               handle.buttonMarkup({ corners: true, theme: theme, shadow: true })
-                               .attr({
-                                       "role": "slider",
-                                       "aria-valuemin": min,
-                                       "aria-valuemax": max,
-                                       "aria-valuenow": this._value(),
-                                       "aria-valuetext": this._value(),
-                                       "title": this._value(),
-                                       "aria-labelledby": labelID
-                               });
-
-               $.extend( this, {
-                       slider: slider,
-                       handle: handle,
-                       type: cType,
-                       step: step,
-                       max: max,
-                       min: min,
-                       valuebg: valuebg,
-                       isRangeslider: isRangeslider,
-                       dragging: false,
-                       beforeStart: null,
-                       userModified: false,
-                       mouseMoved: false
-               });
-
-               if ( this.isToggleSwitch ) {
-                       wrapper = document.createElement( "div" );
-                       wrapper.className = "ui-slider-inneroffset";
-
-                       for ( var j = 0, length = domSlider.childNodes.length; j < length; j++ ) {
-                               wrapper.appendChild( domSlider.childNodes[j] );
-                       }
-
-                       domSlider.appendChild( wrapper );
-
-                       // slider.wrapInner( "<div class='ui-slider-inneroffset'></div>" );
-
-                       // make the handle move with a smooth transition
-                       handle.addClass( "ui-slider-handle-snapping" );
-
-                       options = control.find( "option" );
-
-                       for ( var i = 0, optionsCount = options.length; i < optionsCount; i++ ) {
-                               var side = !i ? "b" : "a",
-                                       sliderTheme = !i ? " ui-btn-down-" + trackTheme : ( " " + $.mobile.activeBtnClass ),
-                                       sliderLabel = document.createElement( "div" ),
-                                       sliderImg = document.createElement( "span" );
-
-                               sliderImg.className = ["ui-slider-label ui-slider-label-", side, sliderTheme, " ui-btn-corner-all"].join( "" );
-                               sliderImg.setAttribute( "role", "img" );
-                               sliderImg.appendChild( document.createTextNode( options[i].innerHTML ) );
-                               $( sliderImg ).prependTo( slider );
-                       }
-
-                       self._labels = $( ".ui-slider-label", slider );
-
-               }
-
-               label.addClass( "ui-slider" );
-               
-               // monitor the input for updated values
-               control.addClass( this.isToggleSwitch ? "ui-slider-switch" : "ui-slider-input" );
-
-               this._on( control, {
-                       "change": "_controlChange",
-                       "keyup": "_controlKeyup",
-                       "blur": "_controlBlur",
-                       "vmouseup": "_controlVMouseUp"
-               });
-
-               slider.bind( "vmousedown", $.proxy( this._sliderVMouseDown, this ) )
-                       .bind( "vclick", false );
-
-               // We have to instantiate a new function object for the unbind to work properly
-               // since the method itself is defined in the prototype (causing it to unbind everything)
-               this._on( document, { "vmousemove": "_preventDocumentDrag" });
-               this._on( slider.add( document ), { "vmouseup": "_sliderVMouseUp" });
-
-               slider.insertAfter( control );
-
-               // wrap in a div for styling purposes
-               if ( !this.isToggleSwitch && !isRangeslider ) {
-                       wrapper = this.options.mini ? "<div class='ui-slider ui-mini'>" : "<div class='ui-slider'>";
-                       
-                       control.add( slider ).wrapAll( wrapper );
-               }
-
-               // Only add focus class to toggle switch, sliders get it automatically from ui-btn
-               if ( this.isToggleSwitch ) {
-                       this.handle.bind({
-                               focus: function() {
-                                       slider.addClass( $.mobile.focusClass );
-                               },
-
-                               blur: function() {
-                                       slider.removeClass( $.mobile.focusClass );
-                               }
-                       });
-               }
-
-               // bind the handle event callbacks and set the context to the widget instance
-               this._on( this.handle, {
-                       "vmousedown": "_handleVMouseDown",
-                       "keydown": "_handleKeydown",
-                       "keyup": "_handleKeyup"
-               });
-
-               this.handle.bind( "vclick", false );
-
-               this._handleFormReset();
-
-               this.refresh( undefined, undefined, true );
-       },
-
-       _controlChange: function( event ) {
-               // if the user dragged the handle, the "change" event was triggered from inside refresh(); don't call refresh() again
-               if ( this._trigger( "controlchange", event ) === false ) {
-                       return false;
-               }
-               if ( !this.mouseMoved ) {
-                       this.refresh( this._value(), true );
-               }
-       },
-
-       _controlKeyup: function( event ) { // necessary?
-               this.refresh( this._value(), true, true );
-       },
-
-       _controlBlur: function( event ) {
-               this.refresh( this._value(), true );
-       },
-
-       // it appears the clicking the up and down buttons in chrome on
-       // range/number inputs doesn't trigger a change until the field is
-       // blurred. Here we check thif the value has changed and refresh
-       _controlVMouseUp: function( event ) {
-               this._checkedRefresh();
-       },
-
-       // NOTE force focus on handle
-       _handleVMouseDown: function( event ) {
-               this.handle.focus();
-       },
-
-       _handleKeydown: function( event ) {
-               var index = this._value();
-               if ( this.options.disabled ) {
-                       return;
-               }
-
-               // In all cases prevent the default and mark the handle as active
-               switch ( event.keyCode ) {
-                       case $.mobile.keyCode.HOME:
-                       case $.mobile.keyCode.END:
-                       case $.mobile.keyCode.PAGE_UP:
-                       case $.mobile.keyCode.PAGE_DOWN:
-                       case $.mobile.keyCode.UP:
-                       case $.mobile.keyCode.RIGHT:
-                       case $.mobile.keyCode.DOWN:
-                       case $.mobile.keyCode.LEFT:
-                               event.preventDefault();
-
-                               if ( !this._keySliding ) {
-                                       this._keySliding = true;
-                                       this.handle.addClass( "ui-state-active" );
-                               }
-
-                               break;
-               }
-
-               // move the slider according to the keypress
-               switch ( event.keyCode ) {
-                       case $.mobile.keyCode.HOME:
-                               this.refresh( this.min );
-                               break;
-                       case $.mobile.keyCode.END:
-                               this.refresh( this.max );
-                               break;
-                       case $.mobile.keyCode.PAGE_UP:
-                       case $.mobile.keyCode.UP:
-                       case $.mobile.keyCode.RIGHT:
-                               this.refresh( index + this.step );
-                               break;
-                       case $.mobile.keyCode.PAGE_DOWN:
-                       case $.mobile.keyCode.DOWN:
-                       case $.mobile.keyCode.LEFT:
-                               this.refresh( index - this.step );
-                               break;
-               }
-       }, // remove active mark
-
-       _handleKeyup: function( event ) {
-               if ( this._keySliding ) {
-                       this._keySliding = false;
-                       this.handle.removeClass( "ui-state-active" );
-               }
-       },
-
-       _sliderVMouseDown: function( event ) {
-               // NOTE: we don't do this in refresh because we still want to
-               //       support programmatic alteration of disabled inputs
-               if ( this.options.disabled || !( event.which === 1 || event.which === 0 ) ) {
-                       return false;
-               }
-               if ( this._trigger( "beforestart", event ) === false ) {
-                       return false;
-               }
-               this.dragging = true;
-               this.userModified = false;
-               this.mouseMoved = false;
-
-               if ( this.isToggleSwitch ) {
-                       this.beforeStart = this.element[0].selectedIndex;
-               }
-
-               
-               this.refresh( event );
-               this._trigger( "start" );
-               return false;
-       },
-
-       _sliderVMouseUp: function() {
-               if ( this.dragging ) {
-                       this.dragging = false;
-
-                       if ( this.isToggleSwitch ) {
-                               // make the handle move with a smooth transition
-                               this.handle.addClass( "ui-slider-handle-snapping" );
-
-                               if ( this.mouseMoved ) {
-                                       // this is a drag, change the value only if user dragged enough
-                                       if ( this.userModified ) {
-                                               this.refresh( this.beforeStart === 0 ? 1 : 0 );
-                                       } else {
-                                               this.refresh( this.beforeStart );
-                                       }
-                               } else {
-                                       // this is just a click, change the value
-                                       this.refresh( this.beforeStart === 0 ? 1 : 0 );
-                               }
-                       }
-
-                       this.mouseMoved = false;
-                       this._trigger( "stop" );
-                       return false;
-               }
-       },
-
-       _preventDocumentDrag: function( event ) {
-                       // NOTE: we don't do this in refresh because we still want to
-                       //       support programmatic alteration of disabled inputs
-                       if ( this._trigger( "drag", event ) === false) {
-                               return false;
-                       }
-                       if ( this.dragging && !this.options.disabled ) {
-                               
-                               // this.mouseMoved must be updated before refresh() because it will be used in the control "change" event
-                               this.mouseMoved = true;
-
-                               if ( this.isToggleSwitch ) {
-                                       // make the handle move in sync with the mouse
-                                       this.handle.removeClass( "ui-slider-handle-snapping" );
-                               }
-                               
-                               this.refresh( event );
-
-                               // only after refresh() you can calculate this.userModified
-                               this.userModified = this.beforeStart !== this.element[0].selectedIndex;
-                               return false;
-                       }
-               },
-
-       _checkedRefresh: function() {
-               if ( this.value !== this._value() ) {
-                       this.refresh( this._value() );
-               }
-       },
-
-       _value: function() {
-               return  this.isToggleSwitch ? this.element[0].selectedIndex : parseFloat( this.element.val() ) ;
-       },
-
-
-       _reset: function() {
-               this.refresh( undefined, false, true );
-       },
-
-       refresh: function( val, isfromControl, preventInputUpdate ) {
-               // NOTE: we don't return here because we want to support programmatic
-               //       alteration of the input value, which should still update the slider
-               
-               var self = this,
-                       parentTheme = $.mobile.getInheritedTheme( this.element, "c" ),
-                       theme = this.options.theme || parentTheme,
-                       trackTheme = this.options.trackTheme || parentTheme,
-                       left, width, data, tol;
-
-               self.slider[0].className = [ this.isToggleSwitch ? "ui-slider ui-slider-switch" : "ui-slider-track"," ui-btn-down-" + trackTheme,' ui-btn-corner-all', ( this.options.mini ) ? " ui-mini":""].join( "" );
-               if ( this.options.disabled || this.element.attr( "disabled" ) ) {
-                       this.disable();
-               }
-
-               // set the stored value for comparison later
-               this.value = this._value();
-               if ( this.options.highlight && !this.isToggleSwitch && this.slider.find( ".ui-slider-bg" ).length === 0 ) {
-                       this.valuebg = (function() {
-                               var bg = document.createElement( "div" );
-                               bg.className = "ui-slider-bg " + $.mobile.activeBtnClass + " ui-btn-corner-all";
-                               return $( bg ).prependTo( self.slider );
-                       })();
-               }
-               this.handle.buttonMarkup({ corners: true, theme: theme, shadow: true });
-
-               var pxStep, percent,
-                       control = this.element,
-                       isInput = !this.isToggleSwitch,
-                       optionElements = isInput ? [] : control.find( "option" ),
-                       min =  isInput ? parseFloat( control.attr( "min" ) ) : 0,
-                       max = isInput ? parseFloat( control.attr( "max" ) ) : optionElements.length - 1,
-                       step = ( isInput && parseFloat( control.attr( "step" ) ) > 0 ) ? parseFloat( control.attr( "step" ) ) : 1;
-                       
-               if ( typeof val === "object" ) {
-                       data = val;
-                       // a slight tolerance helped get to the ends of the slider
-                       tol = 8;
-
-                       left = this.slider.offset().left;
-                       width = this.slider.width();
-                       pxStep = width/((max-min)/step);
-                       if ( !this.dragging ||
-                                       data.pageX < left - tol ||
-                                       data.pageX > left + width + tol ) {
-                               return;
-                       }
-                       if ( pxStep > 1 ) {
-                               percent = ( ( data.pageX - left ) / width ) * 100;
-                       } else {
-                               percent = Math.round( ( ( data.pageX - left ) / width ) * 100 );
-                       }
-               } else {
-                       if ( val == null ) {
-                               val = isInput ? parseFloat( control.val() || 0 ) : control[0].selectedIndex;
-                       }
-                       percent = ( parseFloat( val ) - min ) / ( max - min ) * 100;
-               }
-
-               if ( isNaN( percent ) ) {
-                       return;
-               }
-
-               var newval = ( percent / 100 ) * ( max - min ) + min;
-
-               //from jQuery UI slider, the following source will round to the nearest step
-               var valModStep = ( newval - min ) % step;
-               var alignValue = newval - valModStep;
-
-               if ( Math.abs( valModStep ) * 2 >= step ) {
-                       alignValue += ( valModStep > 0 ) ? step : ( -step );
-               }
-
-               var percentPerStep = 100/((max-min)/step);
-               // Since JavaScript has problems with large floats, round
-               // the final value to 5 digits after the decimal point (see jQueryUI: #4124)
-               newval = parseFloat( alignValue.toFixed(5) );
-
-               if ( typeof pxStep === "undefined" ) {
-                       pxStep = width / ( (max-min) / step );
-               }
-               if ( pxStep > 1 && isInput ) {
-                       percent = ( newval - min ) * percentPerStep * ( 1 / step );
-               }
-               if ( percent < 0 ) {
-                       percent = 0;
-               }
-
-               if ( percent > 100 ) {
-                       percent = 100;
-               }
-
-               if ( newval < min ) {
-                       newval = min;
-               }
-
-               if ( newval > max ) {
-                       newval = max;
-               }
-
-               this.handle.css( "left", percent + "%" );
-
-               this.handle[0].setAttribute( "aria-valuenow", isInput ? newval : optionElements.eq( newval ).attr( "value" ) );
-
-               this.handle[0].setAttribute( "aria-valuetext", isInput ? newval : optionElements.eq( newval ).getEncodedText() );
-
-               this.handle[0].setAttribute( "title", isInput ? newval : optionElements.eq( newval ).getEncodedText() );
-
-               if ( this.valuebg ) {
-                       this.valuebg.css( "width", percent + "%" );
-               }
-
-               // drag the label widths
-               if ( this._labels ) {
-                       var handlePercent = this.handle.width() / this.slider.width() * 100,
-                               aPercent = percent && handlePercent + ( 100 - handlePercent ) * percent / 100,
-                               bPercent = percent === 100 ? 0 : Math.min( handlePercent + 100 - aPercent, 100 );
-
-                       this._labels.each(function() {
-                               var ab = $( this ).is( ".ui-slider-label-a" );
-                               $( this ).width( ( ab ? aPercent : bPercent  ) + "%" );
-                       });
-               }
-
-               if ( !preventInputUpdate ) {
-                       var valueChanged = false;
-
-                       // update control"s value
-                       if ( isInput ) {
-                               valueChanged = control.val() !== newval;
-                               control.val( newval );
-                       } else {
-                               valueChanged = control[ 0 ].selectedIndex !== newval;
-                               control[ 0 ].selectedIndex = newval;
-                       }
-                       if ( this._trigger( "beforechange", val ) === false) {
-                                       return false;
-                       }
-                       if ( !isfromControl && valueChanged ) {
-                               control.trigger( "change" );
-                       }
-               }
-       },
-
-       enable: function() {
-               this.element.attr( "disabled", false );
-               this.slider.removeClass( "ui-disabled" ).attr( "aria-disabled", false );
-               return this._setOption( "disabled", false );
-       },
-
-       disable: function() {
-               this.element.attr( "disabled", true );
-               this.slider.addClass( "ui-disabled" ).attr( "aria-disabled", true );
-               return this._setOption( "disabled", true );
-       }
-
-}, $.mobile.behaviors.formReset ) );
-
-//auto self-init widgets
-$.mobile.document.bind( "pagecreate create", function( e ) {
-       $.mobile.slider.prototype.enhanceWithin( e.target, true );
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-       $.widget( "mobile.rangeslider", $.mobile.widget, {
-
-               options: {
-                       theme: null,
-                       trackTheme: null,
-                       disabled: false,
-                       initSelector: ":jqmData(role='rangeslider')",
-                       mini: false,
-                       highlight: true
-               },
-
-               _create: function() {
-                       var secondLabel,
-                       $el = this.element,
-                       elClass = this.options.mini ? "ui-rangeslider ui-mini" : "ui-rangeslider",
-                       _inputFirst = $el.find( "input" ).first(),
-                       _inputLast = $el.find( "input" ).last(),
-                       label = $el.find( "label" ).first(),
-                       _sliderFirst = $.data( _inputFirst.get(0), "mobileSlider" ).slider,
-                       _sliderLast = $.data( _inputLast.get(0), "mobileSlider" ).slider,
-                       firstHandle = $.data( _inputFirst.get(0), "mobileSlider" ).handle,
-                       _sliders = $( "<div class=\"ui-rangeslider-sliders\" />" ).appendTo( $el );
-                       
-                       if ( $el.find( "label" ).length > 1 ) {
-                               secondLabel = $el.find( "label" ).last().hide();
-                       }
-
-                       _inputFirst.addClass( "ui-rangeslider-first" );
-                       _inputLast.addClass( "ui-rangeslider-last" );
-                       $el.addClass( elClass );
-                       
-                       _sliderFirst.appendTo( _sliders );
-                       _sliderLast.appendTo( _sliders );
-                       label.prependTo( $el );
-                       firstHandle.prependTo( _sliderLast );
-
-                       $.extend( this, {
-                               _inputFirst: _inputFirst,
-                               _inputLast: _inputLast,
-                               _sliderFirst: _sliderFirst,
-                               _sliderLast: _sliderLast,
-                               _targetVal: null,
-                               _sliderTarget: false,
-                               _sliders: _sliders,
-                               _proxy: false
-                       });
-                       
-                       this.refresh();
-                       this._on( this.element.find( "input.ui-slider-input" ), {
-                               "slidebeforestart": "_slidebeforestart",
-                               "slidestop": "_slidestop",
-                               "slidedrag": "_slidedrag",
-                               "slidebeforechange": "_change",
-                               "blur": "_change",
-                               "keyup": "_change"
-                       });
-                       this._on({
-                               "mousedown":"_change"
-                       });
-                       this._on( this.element.closest( "form" ), {
-                               "reset":"_handleReset"
-                       });
-                       this._on( firstHandle, {
-                               "vmousedown": "_dragFirstHandle"
-                       });
-               },
-               _handleReset: function(){
-                       var self = this;
-                       //we must wait for the stack to unwind before updateing other wise sliders will not have updated yet
-                       setTimeout( function(){
-                               self._updateHighlight();
-                       },0);
-               },
-
-               _dragFirstHandle: function( event ) {
-                       //if the first handle is dragged send the event to the first slider
-                       $.data( this._inputFirst.get(0), "mobileSlider" ).dragging = true;
-                       $.data( this._inputFirst.get(0), "mobileSlider" ).refresh( event );
-                       return false;
-               },
-
-               _slidedrag: function( event ) {
-                       var first = $( event.target ).is( this._inputFirst ),
-                               otherSlider = ( first ) ? this._inputLast : this._inputFirst;
-
-                       this._sliderTarget = false;
-                       //if the drag was initiated on an extreme and the other handle is focused send the events to
-                       //the closest handle
-                       if ( ( this._proxy === "first" && first ) || ( this._proxy === "last" && !first ) ) {
-                               $.data( otherSlider.get(0), "mobileSlider" ).dragging = true;
-                               $.data( otherSlider.get(0), "mobileSlider" ).refresh( event );
-                               return false;
-                       }
-               },
-
-               _slidestop: function( event ) {
-                       var first = $( event.target ).is( this._inputFirst );
-                       
-                       this._proxy = false;
-                       //this stops dragging of the handle and brings the active track to the front 
-                       //this makes clicks on the track go the the last handle used
-                       this.element.find( "input" ).trigger( "vmouseup" );
-                       this._sliderFirst.css( "z-index", first ? 1 : "" );
-               },
-
-               _slidebeforestart: function( event ) {
-                       this._sliderTarget = false;
-                       //if the track is the target remember this and the original value
-                       if ( $( event.originalEvent.target ).hasClass( "ui-slider-track" ) ) {
-                               this._sliderTarget = true;
-                               this._targetVal = $( event.target ).val();
-                       }
-               },
-
-               _setOption: function( options ) {
-                       this._superApply( options );
-                       this.refresh();
-               },
-
-               refresh: function() {
-                       var $el = this.element,
-                               o = this.options;
-
-                       $el.find( "input" ).slider({
-                               theme: o.theme,
-                               trackTheme: o.trackTheme,
-                               disabled: o.disabled,
-                               mini: o.mini,
-                               highlight: o.highlight
-                       }).slider( "refresh" );
-                       this._updateHighlight();
-               },
-
-               _change: function( event ) {
-                       if ( event.type === "keyup" ) {
-                               this._updateHighlight();
-                               return false;
-                       }
-
-                       var self = this,
-                               min = parseFloat( this._inputFirst.val(), 10 ),
-                               max = parseFloat( this._inputLast.val(), 10 ),
-                               first = $( event.target ).hasClass( "ui-rangeslider-first" ),
-                               thisSlider = first ? this._inputFirst : this._inputLast,
-                               otherSlider = first ? this._inputLast : this._inputFirst;
-                       
-                       
-                       if( ( this._inputFirst.val() > this._inputLast.val() && event.type === "mousedown" && !$(event.target).hasClass("ui-slider-handle")) ){
-                               thisSlider.blur();
-                       } else if( event.type === "mousedown" ){
-                               return;
-                       }
-                       if ( min > max && !this._sliderTarget ) {
-                               //this prevents min from being greater then max
-                               thisSlider.val( first ? max: min ).slider( "refresh" );
-                               this._trigger( "normalize" );
-                       } else if ( min > max ) {
-                               //this makes it so clicks on the target on either extreme go to the closest handle
-                               thisSlider.val( this._targetVal ).slider( "refresh" );
-
-                               //You must wait for the stack to unwind so first slider is updated before updating second
-                               setTimeout( function() {
-                                       otherSlider.val( first ? min: max ).slider( "refresh" );
-                                       $.data( otherSlider.get(0), "mobileSlider" ).handle.focus();
-                                       self._sliderFirst.css( "z-index", first ? "" : 1 );
-                                       self._trigger( "normalize" );
-                               }, 0 );
-                               this._proxy = ( first ) ? "first" : "last";
-                       }
-                       //fixes issue where when both _sliders are at min they cannot be adjusted
-                       if ( min === max ) {
-                               $.data( thisSlider.get(0), "mobileSlider" ).handle.css( "z-index", 1 );
-                               $.data( otherSlider.get(0), "mobileSlider" ).handle.css( "z-index", 0 );
-                       } else {
-                               $.data( otherSlider.get(0), "mobileSlider" ).handle.css( "z-index", "" );
-                               $.data( thisSlider.get(0), "mobileSlider" ).handle.css( "z-index", "" );
-                       }
-                       
-                       this._updateHighlight();
-                       
-                       if ( min >= max ) {
-                               return false;
-                       }
-               },
-
-               _updateHighlight: function() {
-                       var min = parseInt( $.data( this._inputFirst.get(0), "mobileSlider" ).handle.get(0).style.left, 10 ),
-                               max = parseInt( $.data( this._inputLast.get(0), "mobileSlider" ).handle.get(0).style.left, 10 ),
-                               width = (max - min);
-
-                       this.element.find( ".ui-slider-bg" ).css({
-                               "margin-left": min + "%",
-                               "width": width + "%"
-                       });
-               },
-
-               _destroy: function() {
-                       this.element.removeClass( "ui-rangeslider ui-mini" ).find( "label" ).show();
-                       this._inputFirst.after( this._sliderFirst );
-                       this._inputLast.after( this._sliderLast );
-                       this._sliders.remove();
-                       this.element.find( "input" ).removeClass( "ui-rangeslider-first ui-rangeslider-last" ).slider( "destroy" );
-               }
-
-       });
-
-$.widget( "mobile.rangeslider", $.mobile.rangeslider, $.mobile.behaviors.formReset );
-
-//auto self-init widgets
-$( document ).bind( "pagecreate create", function( e ) {
-       $.mobile.rangeslider.prototype.enhanceWithin( e.target, true );
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-$.widget( "mobile.selectmenu", $.mobile.widget, $.extend( {
-       options: {
-               theme: null,
-               disabled: false,
-               icon: "arrow-d",
-               iconpos: "right",
-               inline: false,
-               corners: true,
-               shadow: true,
-               iconshadow: true,
-               overlayTheme: "a",
-               dividerTheme: "b",
-               hidePlaceholderMenuItems: true,
-               closeText: "Close",
-               nativeMenu: true,
-               // This option defaults to true on iOS devices.
-               preventFocusZoom: /iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1,
-               initSelector: "select:not( :jqmData(role='slider') )",
-               mini: false
-       },
-
-       _button: function() {
-               return $( "<div/>" );
-       },
-
-       _setDisabled: function( value ) {
-               this.element.attr( "disabled", value );
-               this.button.attr( "aria-disabled", value );
-               return this._setOption( "disabled", value );
-       },
-
-       _focusButton : function() {
-               var self = this;
-
-               setTimeout( function() {
-                       self.button.focus();
-               }, 40);
-       },
-
-       _selectOptions: function() {
-               return this.select.find( "option" );
-       },
-
-       // setup items that are generally necessary for select menu extension
-       _preExtension: function() {
-               var classes = "";
-               // TODO: Post 1.1--once we have time to test thoroughly--any classes manually applied to the original element should be carried over to the enhanced element, with an `-enhanced` suffix. See https://github.com/jquery/jquery-mobile/issues/3577
-               /* if ( $el[0].className.length ) {
-                       classes = $el[0].className;
-               } */
-               if ( !!~this.element[0].className.indexOf( "ui-btn-left" ) ) {
-                       classes = " ui-btn-left";
-               }
-
-               if (  !!~this.element[0].className.indexOf( "ui-btn-right" ) ) {
-                       classes = " ui-btn-right";
-               }
-
-               this.select = this.element.removeClass( "ui-btn-left ui-btn-right" ).wrap( "<div class='ui-select" + classes + "'>" );
-               this.selectID  = this.select.attr( "id" );
-               this.label = $( "label[for='"+ this.selectID +"']" ).addClass( "ui-select" );
-               this.isMultiple = this.select[ 0 ].multiple;
-               if ( !this.options.theme ) {
-                       this.options.theme = $.mobile.getInheritedTheme( this.select, "c" );
-               }
-       },
-
-       _destroy: function() {
-               var wrapper = this.element.parents( ".ui-select" );
-               if ( wrapper.length > 0 ) {
-                       if ( wrapper.is( ".ui-btn-left, .ui-btn-right" ) ) {
-                               this.element.addClass( wrapper.is( ".ui-btn-left" ) ? "ui-btn-left" : "ui-btn-right" );
-                       }
-                       this.element.insertAfter( wrapper );
-                       wrapper.remove();
-               }
-       },
-
-       _create: function() {
-               this._preExtension();
-
-               // Allows for extension of the native select for custom selects and other plugins
-               // see select.custom for example extension
-               // TODO explore plugin registration
-               this._trigger( "beforeCreate" );
-
-               this.button = this._button();
-
-               var self = this,
-
-                       options = this.options,
-
-                       inline = options.inline || this.select.jqmData( "inline" ),
-                       mini = options.mini || this.select.jqmData( "mini" ),
-                       iconpos = options.icon ? ( options.iconpos || this.select.jqmData( "iconpos" ) ) : false,
-
-                       // IE throws an exception at options.item() function when
-                       // there is no selected item
-                       // select first in this case
-                       selectedIndex = this.select[ 0 ].selectedIndex === -1 ? 0 : this.select[ 0 ].selectedIndex,
-
-                       // TODO values buttonId and menuId are undefined here
-                       button = this.button
-                               .insertBefore( this.select )
-                               .buttonMarkup( {
-                                       theme: options.theme,
-                                       icon: options.icon,
-                                       iconpos: iconpos,
-                                       inline: inline,
-                                       corners: options.corners,
-                                       shadow: options.shadow,
-                                       iconshadow: options.iconshadow,
-                                       mini: mini
-                               });
-
-               this.setButtonText();
-
-               // Opera does not properly support opacity on select elements
-               // In Mini, it hides the element, but not its text
-               // On the desktop,it seems to do the opposite
-               // for these reasons, using the nativeMenu option results in a full native select in Opera
-               if ( options.nativeMenu && window.opera && window.opera.version ) {
-                       button.addClass( "ui-select-nativeonly" );
-               }
-
-               // Add counter for multi selects
-               if ( this.isMultiple ) {
-                       this.buttonCount = $( "<span>" )
-                               .addClass( "ui-li-count ui-btn-up-c ui-btn-corner-all" )
-                               .hide()
-                               .appendTo( button.addClass('ui-li-has-count') );
-               }
-
-               // Disable if specified
-               if ( options.disabled || this.element.attr('disabled')) {
-                       this.disable();
-               }
-
-               // Events on native select
-               this.select.change(function() {
-                       self.refresh();
-                       
-                       if ( !!options.nativeMenu ) {
-                               this.blur();
-                       }
-               });
-
-               this._handleFormReset();
-
-               this.build();
-       },
-
-       build: function() {
-               var self = this;
-
-               this.select
-                       .appendTo( self.button )
-                       .bind( "vmousedown", function() {
-                               // Add active class to button
-                               self.button.addClass( $.mobile.activeBtnClass );
-                       })
-                       .bind( "focus", function() {
-                               self.button.addClass( $.mobile.focusClass );
-                       })
-                       .bind( "blur", function() {
-                               self.button.removeClass( $.mobile.focusClass );
-                       })
-                       .bind( "focus vmouseover", function() {
-                               self.button.trigger( "vmouseover" );
-                       })
-                       .bind( "vmousemove", function() {
-                               // Remove active class on scroll/touchmove
-                               self.button.removeClass( $.mobile.activeBtnClass );
-                       })
-                       .bind( "change blur vmouseout", function() {
-                               self.button.trigger( "vmouseout" )
-                                       .removeClass( $.mobile.activeBtnClass );
-                       })
-                       .bind( "change blur", function() {
-                               self.button.removeClass( "ui-btn-down-" + self.options.theme );
-                       });
-
-               // In many situations, iOS will zoom into the select upon tap, this prevents that from happening
-               self.button.bind( "vmousedown", function() {
-                       if ( self.options.preventFocusZoom ) {
-                                       $.mobile.zoom.disable( true );
-                       }
-               });
-               self.label.bind( "click focus", function() {
-                       if ( self.options.preventFocusZoom ) {
-                                       $.mobile.zoom.disable( true );
-                       }
-               });
-               self.select.bind( "focus", function() {
-                       if ( self.options.preventFocusZoom ) {
-                                       $.mobile.zoom.disable( true );
-                       }
-               });
-               self.button.bind( "mouseup", function() {
-                       if ( self.options.preventFocusZoom ) {                          
-                               setTimeout(function() {
-                                       $.mobile.zoom.enable( true );
-                               }, 0 );
-                       }
-               });
-               self.select.bind( "blur", function() {
-                       if ( self.options.preventFocusZoom ) {                          
-                               $.mobile.zoom.enable( true );
-                       }
-               });
-
-       },
-
-       selected: function() {
-               return this._selectOptions().filter( ":selected" );
-       },
-
-       selectedIndices: function() {
-               var self = this;
-
-               return this.selected().map(function() {
-                       return self._selectOptions().index( this );
-               }).get();
-       },
-
-       setButtonText: function() {
-               var self = this,
-                       selected = this.selected(),
-                       text = this.placeholder,
-                       span = $( document.createElement( "span" ) );
-
-               this.button.find( ".ui-btn-text" ).html(function() {
-                       if ( selected.length ) {
-                               text = selected.map(function() {
-                                       return $( this ).text();
-                               }).get().join( ", " );
-                       } else {
-                               text = self.placeholder;
-                       }
-
-                       // TODO possibly aggregate multiple select option classes
-                       return span.text( text )
-                               .addClass( self.select.attr( "class" ) )
-                               .addClass( selected.attr( "class" ) );
-               });
-       },
-
-       setButtonCount: function() {
-               var selected = this.selected();
-
-               // multiple count inside button
-               if ( this.isMultiple ) {
-                       this.buttonCount[ selected.length > 1 ? "show" : "hide" ]().text( selected.length );
-               }
-       },
-
-       _reset: function() {
-               this.refresh();
-       },
-
-       refresh: function() {
-               this.setButtonText();
-               this.setButtonCount();
-       },
-
-       // open and close preserved in native selects
-       // to simplify users code when looping over selects
-       open: $.noop,
-       close: $.noop,
-
-       disable: function() {
-               this._setDisabled( true );
-               this.button.addClass( "ui-disabled" );
-       },
-
-       enable: function() {
-               this._setDisabled( false );
-               this.button.removeClass( "ui-disabled" );
-       }
-}, $.mobile.behaviors.formReset ) );
-
-//auto self-init widgets
-$.mobile.document.bind( "pagecreate create", function( e ) {
-       $.mobile.selectmenu.prototype.enhanceWithin( e.target, true );
-});
-})( jQuery );
-
-(function( $, undefined ) {
-
-       function fitSegmentInsideSegment( winSize, segSize, offset, desired ) {
-               var ret = desired;
-
-               if ( winSize < segSize ) {
-                       // Center segment if it's bigger than the window
-                       ret = offset + ( winSize - segSize ) / 2;
-               } else {
-                       // Otherwise center it at the desired coordinate while keeping it completely inside the window
-                       ret = Math.min( Math.max( offset, desired - segSize / 2 ), offset + winSize - segSize );
-               }
-
-               return ret;
-       }
-
-       function windowCoords() {
-               var $win = $.mobile.window;
-
-               return {
-                       x: $win.scrollLeft(),
-                       y: $win.scrollTop(),
-                       cx: ( window.innerWidth || $win.width() ),
-                       cy: ( window.innerHeight || $win.height() )
-               };
-       }
-
-       $.widget( "mobile.popup", $.mobile.widget, {
-               options: {
-                       theme: null,
-                       overlayTheme: null,
-                       shadow: true,
-                       corners: true,
-                       transition: "none",
-                       positionTo: "origin",
-                       tolerance: null,
-                       initSelector: ":jqmData(role='popup')",
-                       closeLinkSelector: "a:jqmData(rel='back')",
-                       closeLinkEvents: "click.popup",
-                       navigateEvents: "navigate.popup",
-                       closeEvents: "navigate.popup pagebeforechange.popup",
-                       dismissible: true,
-
-                       // NOTE Windows Phone 7 has a scroll position caching issue that
-                       //      requires us to disable popup history management by default
-                       //      https://github.com/jquery/jquery-mobile/issues/4784
-                       //
-                       // NOTE this option is modified in _create!
-                       history: !$.mobile.browser.oldIE
-               },
-
-               _eatEventAndClose: function( e ) {
-                       e.preventDefault();
-                       e.stopImmediatePropagation();
-                       if ( this.options.dismissible ) {
-                               this.close();
-                       }
-                       return false;
-               },
-
-               // Make sure the screen size is increased beyond the page height if the popup's causes the document to increase in height
-               _resizeScreen: function() {
-                       var popupHeight = this._ui.container.outerHeight( true );
-
-                       this._ui.screen.removeAttr( "style" );
-                       if ( popupHeight > this._ui.screen.height() ) {
-                               this._ui.screen.height( popupHeight );
-                       }
-               },
-
-               _handleWindowKeyUp: function( e ) {
-                       if ( this._isOpen && e.keyCode === $.mobile.keyCode.ESCAPE ) {
-                               return this._eatEventAndClose( e );
-                       }
-               },
-
-               _expectResizeEvent: function() {
-                       var winCoords = windowCoords();
-
-                       if ( this._resizeData ) {
-                               if ( winCoords.x === this._resizeData.winCoords.x &&
-                                       winCoords.y === this._resizeData.winCoords.y &&
-                                       winCoords.cx === this._resizeData.winCoords.cx &&
-                                       winCoords.cy === this._resizeData.winCoords.cy ) {
-                                       // timeout not refreshed
-                                       return false;
-                               } else {
-                                       // clear existing timeout - it will be refreshed below
-                                       clearTimeout( this._resizeData.timeoutId );
-                               }
-                       }
-
-                       this._resizeData = {
-                               timeoutId: setTimeout( $.proxy( this, "_resizeTimeout" ), 200 ),
-                               winCoords: winCoords
-                       };
-
-                       return true;
-               },
-
-               _resizeTimeout: function() {
-                       if ( this._isOpen ) {
-                               if ( !this._expectResizeEvent() ) {
-                                       if ( this._ui.container.hasClass( "ui-popup-hidden" ) ) {
-                                               // effectively rapid-open the popup while leaving the screen intact
-                                               this._ui.container.removeClass( "ui-popup-hidden" );
-                                               this.reposition( { positionTo: "window" } );
-                                               this._ignoreResizeEvents();
-                                       }
-
-                                       this._resizeScreen();
-                                       this._resizeData = null;
-                                       this._orientationchangeInProgress = false;
-                               }
-                       } else {
-                               this._resizeData = null;
-                               this._orientationchangeInProgress = false;
-                       }
-               },
-
-               _ignoreResizeEvents: function() {
-                       var self = this;
-
-                       if ( this._ignoreResizeTo ) {
-                               clearTimeout( this._ignoreResizeTo );
-                       }
-                       this._ignoreResizeTo = setTimeout( function() { self._ignoreResizeTo = 0; }, 1000 );
-               },
-
-               _handleWindowResize: function( e ) {
-                       if ( this._isOpen && this._ignoreResizeTo === 0 ) {
-                               if ( ( this._expectResizeEvent() || this._orientationchangeInProgress ) &&
-                                       !this._ui.container.hasClass( "ui-popup-hidden" ) ) {
-                                       // effectively rapid-close the popup while leaving the screen intact
-                                       this._ui.container
-                                               .addClass( "ui-popup-hidden" )
-                                               .removeAttr( "style" );
-                               }
-                       }
-               },
-
-               _handleWindowOrientationchange: function( e ) {
-                       if ( !this._orientationchangeInProgress && this._isOpen && this._ignoreResizeTo === 0 ) {
-                               this._expectResizeEvent();
-                               this._orientationchangeInProgress = true;
-                       }
-               },
-
-               // When the popup is open, attempting to focus on an element that is not a
-               // child of the popup will redirect focus to the popup
-               _handleDocumentFocusIn: function( e ) {
-                       var tgt = e.target, $tgt, ui = this._ui;
-
-                       if ( !this._isOpen ) {
-                               return;
-                       }
-
-                       if ( tgt !== ui.container[ 0 ] ) {
-                               $tgt = $( e.target );
-                               if ( 0 === $tgt.parents().filter( ui.container[ 0 ] ).length ) {
-                                       $( document.activeElement ).one( "focus", function( e ) {
-                                               $tgt.blur();
-                                       });
-                                       ui.focusElement.focus();
-                                       e.preventDefault();
-                                       e.stopImmediatePropagation();
-                                       return false;
-                               } else if ( ui.focusElement[ 0 ] === ui.container[ 0 ] ) {
-                                       ui.focusElement = $tgt;
-                               }
-                       }
-
-                       this._ignoreResizeEvents();
-               },
-
-               _create: function() {
-                       var ui = {
-                                       screen: $( "<div class='ui-screen-hidden ui-popup-screen'></div>" ),
-                                       placeholder: $( "<div style='display: none;'><!-- placeholder --></div>" ),
-                                       container: $( "<div class='ui-popup-container ui-popup-hidden'></div>" )
-                               },
-                               thisPage = this.element.closest( ".ui-page" ),
-                               myId = this.element.attr( "id" ),
-                               self = this;
-
-                       // We need to adjust the history option to be false if there's no AJAX nav.
-                       // We can't do it in the option declarations because those are run before
-                       // it is determined whether there shall be AJAX nav.
-                       this.options.history = this.options.history && $.mobile.ajaxEnabled && $.mobile.hashListeningEnabled;
-
-                       if ( thisPage.length === 0 ) {
-                               thisPage = $( "body" );
-                       }
-
-                       // define the container for navigation event bindings
-                       // TODO this would be nice at the the mobile widget level
-                       this.options.container = this.options.container || $.mobile.pageContainer;
-
-                       // Apply the proto
-                       thisPage.append( ui.screen );
-                       ui.container.insertAfter( ui.screen );
-                       // Leave a placeholder where the element used to be
-                       ui.placeholder.insertAfter( this.element );
-                       if ( myId ) {
-                               ui.screen.attr( "id", myId + "-screen" );
-                               ui.container.attr( "id", myId + "-popup" );
-                               ui.placeholder.html( "<!-- placeholder for " + myId + " -->" );
-                       }
-                       ui.container.append( this.element );
-                       ui.focusElement = ui.container;
-
-                       // Add class to popup element
-                       this.element.addClass( "ui-popup" );
-
-                       // Define instance variables
-                       $.extend( this, {
-                               _scrollTop: 0,
-                               _page: thisPage,
-                               _ui: ui,
-                               _fallbackTransition: "",
-                               _currentTransition: false,
-                               _prereqs: null,
-                               _isOpen: false,
-                               _tolerance: null,
-                               _resizeData: null,
-                               _ignoreResizeTo: 0,
-                               _orientationchangeInProgress: false
-                       });
-
-                       $.each( this.options, function( key, value ) {
-                               // Cause initial options to be applied by their handler by temporarily setting the option to undefined
-                               // - the handler then sets it to the initial value
-                               self.options[ key ] = undefined;
-                               self._setOption( key, value, true );
-                       });
-
-                       ui.screen.bind( "vclick", $.proxy( this, "_eatEventAndClose" ) );
-
-                       this._on( $.mobile.window, {
-                               orientationchange: $.proxy( this, "_handleWindowOrientationchange" ),
-                               resize: $.proxy( this, "_handleWindowResize" ),
-                               keyup: $.proxy( this, "_handleWindowKeyUp" )
-                       });
-                       this._on( $.mobile.document, {
-                               focusin: $.proxy( this, "_handleDocumentFocusIn" )
-                       });
-               },
-
-               _applyTheme: function( dst, theme, prefix ) {
-                       var classes = ( dst.attr( "class" ) || "").split( " " ),
-                               alreadyAdded = true,
-                               currentTheme = null,
-                               matches,
-                               themeStr = String( theme );
-
-                       while ( classes.length > 0 ) {
-                               currentTheme = classes.pop();
-                               matches = ( new RegExp( "^ui-" + prefix + "-([a-z])$" ) ).exec( currentTheme );
-                               if ( matches && matches.length > 1 ) {
-                                       currentTheme = matches[ 1 ];
-                                       break;
-                               } else {
-                                       currentTheme = null;
-                               }
-                       }
-
-                       if ( theme !== currentTheme ) {
-                               dst.removeClass( "ui-" + prefix + "-" + currentTheme );
-                               if ( ! ( theme === null || theme === "none" ) ) {
-                                       dst.addClass( "ui-" + prefix + "-" + themeStr );
-                               }
-                       }
-               },
-
-               _setTheme: function( value ) {
-                       this._applyTheme( this.element, value, "body" );
-               },
-
-               _setOverlayTheme: function( value ) {
-                       this._applyTheme( this._ui.screen, value, "overlay" );
-
-                       if ( this._isOpen ) {
-                               this._ui.screen.addClass( "in" );
-                       }
-               },
-
-               _setShadow: function( value ) {
-                       this.element.toggleClass( "ui-overlay-shadow", value );
-               },
-
-               _setCorners: function( value ) {
-                       this.element.toggleClass( "ui-corner-all", value );
-               },
-
-               _applyTransition: function( value ) {
-                       this._ui.container.removeClass( this._fallbackTransition );
-                       if ( value && value !== "none" ) {
-                               this._fallbackTransition = $.mobile._maybeDegradeTransition( value );
-                               if ( this._fallbackTransition === "none" ) {
-                                       this._fallbackTransition = "";
-                               }
-                               this._ui.container.addClass( this._fallbackTransition );
-                       }
-               },
-
-               _setTransition: function( value ) {
-                       if ( !this._currentTransition ) {
-                               this._applyTransition( value );
-                       }
-               },
-
-               _setTolerance: function( value ) {
-                       var tol = { t: 30, r: 15, b: 30, l: 15 };
-
-                       if ( value !== undefined ) {
-                               var ar = String( value ).split( "," );
-
-                               $.each( ar, function( idx, val ) { ar[ idx ] = parseInt( val, 10 ); } );
-
-                               switch( ar.length ) {
-                                       // All values are to be the same
-                                       case 1:
-                                               if ( !isNaN( ar[ 0 ] ) ) {
-                                                       tol.t = tol.r = tol.b = tol.l = ar[ 0 ];
-                                               }
-                                               break;
-
-                                       // The first value denotes top/bottom tolerance, and the second value denotes left/right tolerance
-                                       case 2:
-                                               if ( !isNaN( ar[ 0 ] ) ) {
-                                                       tol.t = tol.b = ar[ 0 ];
-                                               }
-                                               if ( !isNaN( ar[ 1 ] ) ) {
-                                                       tol.l = tol.r = ar[ 1 ];
-                                               }
-                                               break;
-
-                                       // The array contains values in the order top, right, bottom, left
-                                       case 4:
-                                               if ( !isNaN( ar[ 0 ] ) ) {
-                                                       tol.t = ar[ 0 ];
-                                               }
-                                               if ( !isNaN( ar[ 1 ] ) ) {
-                                                       tol.r = ar[ 1 ];
-                                               }
-                                               if ( !isNaN( ar[ 2 ] ) ) {
-                                                       tol.b = ar[ 2 ];
-                                               }
-                                               if ( !isNaN( ar[ 3 ] ) ) {
-                                                       tol.l = ar[ 3 ];
-                                               }
-                                               break;
-
-                                       default:
-                                               break;
-                               }
-                       }
-
-                       this._tolerance = tol;
-               },
-
-               _setOption: function( key, value ) {
-                       var exclusions, setter = "_set" + key.charAt( 0 ).toUpperCase() + key.slice( 1 );
-
-                       if ( this[ setter ] !== undefined ) {
-                               this[ setter ]( value );
-                       }
-
-                       // TODO REMOVE FOR 1.2.1 by moving them out to a default options object
-                       exclusions = [
-                               "initSelector",
-                               "closeLinkSelector",
-                               "closeLinkEvents",
-                               "navigateEvents",
-                               "closeEvents",
-                               "history",
-                               "container"
-                       ];
-
-                       $.mobile.widget.prototype._setOption.apply( this, arguments );
-                       if ( $.inArray( key, exclusions ) === -1 ) {
-                               // Record the option change in the options and in the DOM data-* attributes
-                               this.element.attr( "data-" + ( $.mobile.ns || "" ) + ( key.replace( /([A-Z])/, "-$1" ).toLowerCase() ), value );
-                       }
-               },
-
-               // Try and center the overlay over the given coordinates
-               _placementCoords: function( desired ) {
-                       // rectangle within which the popup must fit
-                       var
-                               winCoords = windowCoords(),
-                               rc = {
-                                       x: this._tolerance.l,
-                                       y: winCoords.y + this._tolerance.t,
-                                       cx: winCoords.cx - this._tolerance.l - this._tolerance.r,
-                                       cy: winCoords.cy - this._tolerance.t - this._tolerance.b
-                               },
-                               menuSize, ret;
-
-                       // Clamp the width of the menu before grabbing its size
-                       this._ui.container.css( "max-width", rc.cx );
-                       menuSize = {
-                               cx: this._ui.container.outerWidth( true ),
-                               cy: this._ui.container.outerHeight( true )
-                       };
-
-                       // Center the menu over the desired coordinates, while not going outside
-                       // the window tolerances. This will center wrt. the window if the popup is too large.
-                       ret = {
-                               x: fitSegmentInsideSegment( rc.cx, menuSize.cx, rc.x, desired.x ),
-                               y: fitSegmentInsideSegment( rc.cy, menuSize.cy, rc.y, desired.y )
-                       };
-
-                       // Make sure the top of the menu is visible
-                       ret.y = Math.max( 0, ret.y );
-
-                       // If the height of the menu is smaller than the height of the document
-                       // align the bottom with the bottom of the document
-
-                       // fix for $.mobile.document.height() bug in core 1.7.2.
-                       var docEl = document.documentElement, docBody = document.body,
-                               docHeight = Math.max( docEl.clientHeight, docBody.scrollHeight, docBody.offsetHeight, docEl.scrollHeight, docEl.offsetHeight );
-
-                       ret.y -= Math.min( ret.y, Math.max( 0, ret.y + menuSize.cy - docHeight ) );
-
-                       return { left: ret.x, top: ret.y };
-               },
-
-               _createPrereqs: function( screenPrereq, containerPrereq, whenDone ) {
-                       var self = this, prereqs;
-
-                       // It is important to maintain both the local variable prereqs and self._prereqs. The local variable remains in
-                       // the closure of the functions which call the callbacks passed in. The comparison between the local variable and
-                       // self._prereqs is necessary, because once a function has been passed to .animationComplete() it will be called
-                       // next time an animation completes, even if that's not the animation whose end the function was supposed to catch
-                       // (for example, if an abort happens during the opening animation, the .animationComplete handler is not called for
-                       // that animation anymore, but the handler remains attached, so it is called the next time the popup is opened
-                       // - making it stale. Comparing the local variable prereqs to the widget-level variable self._prereqs ensures that
-                       // callbacks triggered by a stale .animationComplete will be ignored.
-
-                       prereqs = {
-                               screen: $.Deferred(),
-                               container: $.Deferred()
-                       };
-
-                       prereqs.screen.then( function() {
-                               if ( prereqs === self._prereqs ) {
-                                       screenPrereq();
-                               }
-                       });
-
-                       prereqs.container.then( function() {
-                               if ( prereqs === self._prereqs ) {
-                                       containerPrereq();
-                               }
-                       });
-
-                       $.when( prereqs.screen, prereqs.container ).done( function() {
-                               if ( prereqs === self._prereqs ) {
-                                       self._prereqs = null;
-                                       whenDone();
-                               }
-                       });
-
-                       self._prereqs = prereqs;
-               },
-
-               _animate: function( args ) {
-                       // NOTE before removing the default animation of the screen
-                       //      this had an animate callback that would resolve the deferred
-                       //      now the deferred is resolved immediately
-                       // TODO remove the dependency on the screen deferred
-                       this._ui.screen
-                               .removeClass( args.classToRemove )
-                               .addClass( args.screenClassToAdd );
-
-                       args.prereqs.screen.resolve();
-
-                       if ( args.transition && args.transition !== "none" ) {
-                               if ( args.applyTransition ) {
-                                       this._applyTransition( args.transition );
-                               }
-                               if ( this._fallbackTransition ) {
-                                       this._ui.container
-                                               .animationComplete( $.proxy( args.prereqs.container, "resolve" ) )
-                                               .addClass( args.containerClassToAdd )
-                                               .removeClass( args.classToRemove );
-                                       return;
-                               }
-                       }
-                       this._ui.container.removeClass( args.classToRemove );
-                       args.prereqs.container.resolve();
-               },
-
-               // The desired coordinates passed in will be returned untouched if no reference element can be identified via
-               // desiredPosition.positionTo. Nevertheless, this function ensures that its return value always contains valid
-               // x and y coordinates by specifying the center middle of the window if the coordinates are absent.
-               // options: { x: coordinate, y: coordinate, positionTo: string: "origin", "window", or jQuery selector
-               _desiredCoords: function( o ) {
-                       var dst = null, offset, winCoords = windowCoords(), x = o.x, y = o.y, pTo = o.positionTo;
-
-                       // Establish which element will serve as the reference
-                       if ( pTo && pTo !== "origin" ) {
-                               if ( pTo === "window" ) {
-                                       x = winCoords.cx / 2 + winCoords.x;
-                                       y = winCoords.cy / 2 + winCoords.y;
-                               } else {
-                                       try {
-                                               dst = $( pTo );
-                                       } catch( e ) {
-                                               dst = null;
-                                       }
-                                       if ( dst ) {
-                                               dst.filter( ":visible" );
-                                               if ( dst.length === 0 ) {
-                                                       dst = null;
-                                               }
-                                       }
-                               }
-                       }
-
-                       // If an element was found, center over it
-                       if ( dst ) {
-                               offset = dst.offset();
-                               x = offset.left + dst.outerWidth() / 2;
-                               y = offset.top + dst.outerHeight() / 2;
-                       }
-
-                       // Make sure x and y are valid numbers - center over the window
-                       if ( $.type( x ) !== "number" || isNaN( x ) ) {
-                               x = winCoords.cx / 2 + winCoords.x;
-                       }
-                       if ( $.type( y ) !== "number" || isNaN( y ) ) {
-                               y = winCoords.cy / 2 + winCoords.y;
-                       }
-
-                       return { x: x, y: y };
-               },
-
-               _reposition: function( o ) {
-                       // We only care about position-related parameters for repositioning
-                       o = { x: o.x, y: o.y, positionTo: o.positionTo };
-                       this._trigger( "beforeposition", o );
-                       this._ui.container.offset( this._placementCoords( this._desiredCoords( o ) ) );
-               },
-
-               reposition: function( o ) {
-                       if ( this._isOpen ) {
-                               this._reposition( o );
-                       }
-               },
-
-               _openPrereqsComplete: function() {
-                       this._ui.container.addClass( "ui-popup-active" );
-                       this._isOpen = true;
-                       this._resizeScreen();
-                       this._ui.container.attr( "tabindex", "0" ).focus();
-                       this._ignoreResizeEvents();
-                       this._trigger( "afteropen" );
-               },
-
-               _open: function( options ) {
-                       var o = $.extend( {}, this.options, options ),
-                               // TODO move blacklist to private method
-                               androidBlacklist = ( function() {
-                                       var w = window,
-                                               ua = navigator.userAgent,
-                                               // Rendering engine is Webkit, and capture major version
-                                               wkmatch = ua.match( /AppleWebKit\/([0-9\.]+)/ ),
-                                               wkversion = !!wkmatch && wkmatch[ 1 ],
-                                               androidmatch = ua.match( /Android (\d+(?:\.\d+))/ ),
-                                               andversion = !!androidmatch && androidmatch[ 1 ],
-                                               chromematch = ua.indexOf( "Chrome" ) > -1;
-
-                                       // Platform is Android, WebKit version is greater than 534.13 ( Android 3.2.1 ) and not Chrome.
-                                       if( androidmatch !== null && andversion === "4.0" && wkversion && wkversion > 534.13 && !chromematch ) {
-                                               return true;
-                                       }
-                                       return false;
-                               }());
-
-                       // Count down to triggering "popupafteropen" - we have two prerequisites:
-                       // 1. The popup window animation completes (container())
-                       // 2. The screen opacity animation completes (screen())
-                       this._createPrereqs(
-                               $.noop,
-                               $.noop,
-                               $.proxy( this, "_openPrereqsComplete" ) );
-
-                       this._currentTransition = o.transition;
-                       this._applyTransition( o.transition );
-
-                       if ( !this.options.theme ) {
-                               this._setTheme( this._page.jqmData( "theme" ) || $.mobile.getInheritedTheme( this._page, "c" ) );
-                       }
-
-                       this._ui.screen.removeClass( "ui-screen-hidden" );
-                       this._ui.container.removeClass( "ui-popup-hidden" );
-
-                       // Give applications a chance to modify the contents of the container before it appears
-                       this._reposition( o );
-
-                       if ( this.options.overlayTheme && androidBlacklist ) {
-                               /* TODO:
-                               The native browser on Android 4.0.X ("Ice Cream Sandwich") suffers from an issue where the popup overlay appears to be z-indexed
-                               above the popup itself when certain other styles exist on the same page -- namely, any element set to `position: fixed` and certain
-                               types of input. These issues are reminiscent of previously uncovered bugs in older versions of Android's native browser:
-                               https://github.com/scottjehl/Device-Bugs/issues/3
-
-                               This fix closes the following bugs ( I use "closes" with reluctance, and stress that this issue should be revisited as soon as possible ):
-
-                               https://github.com/jquery/jquery-mobile/issues/4816
-                               https://github.com/jquery/jquery-mobile/issues/4844
-                               https://github.com/jquery/jquery-mobile/issues/4874
-                               */
-
-                               // TODO sort out why this._page isn't working
-                               this.element.closest( ".ui-page" ).addClass( "ui-popup-open" );
-                       }
-                       this._animate({
-                               additionalCondition: true,
-                               transition: o.transition,
-                               classToRemove: "",
-                               screenClassToAdd: "in",
-                               containerClassToAdd: "in",
-                               applyTransition: false,
-                               prereqs: this._prereqs
-                       });
-               },
-
-               _closePrereqScreen: function() {
-                       this._ui.screen
-                               .removeClass( "out" )
-                               .addClass( "ui-screen-hidden" );
-               },
-
-               _closePrereqContainer: function() {
-                       this._ui.container
-                               .removeClass( "reverse out" )
-                               .addClass( "ui-popup-hidden" )
-                               .removeAttr( "style" );
-               },
-
-               _closePrereqsDone: function() {
-                       var opts = this.options;
-
-                       this._ui.container.removeAttr( "tabindex" );
-
-                       // remove the global mutex for popups
-                       $.mobile.popup.active = undefined;
-
-                       // alert users that the popup is closed
-                       this._trigger( "afterclose" );
-               },
-
-               _close: function( immediate ) {
-                       this._ui.container.removeClass( "ui-popup-active" );
-                       this._page.removeClass( "ui-popup-open" );
-
-                       this._isOpen = false;
-
-                       // Count down to triggering "popupafterclose" - we have two prerequisites:
-                       // 1. The popup window reverse animation completes (container())
-                       // 2. The screen opacity animation completes (screen())
-                       this._createPrereqs(
-                               $.proxy( this, "_closePrereqScreen" ),
-                               $.proxy( this, "_closePrereqContainer" ),
-                               $.proxy( this, "_closePrereqsDone" ) );
-
-                       this._animate( {
-                               additionalCondition: this._ui.screen.hasClass( "in" ),
-                               transition: ( immediate ? "none" : ( this._currentTransition ) ),
-                               classToRemove: "in",
-                               screenClassToAdd: "out",
-                               containerClassToAdd: "reverse out",
-                               applyTransition: true,
-                               prereqs: this._prereqs
-                       });
-               },
-
-               _unenhance: function() {
-                       // Put the element back to where the placeholder was and remove the "ui-popup" class
-                       this._setTheme( "none" );
-                       this.element
-                               // Cannot directly insertAfter() - we need to detach() first, because
-                               // insertAfter() will do nothing if the payload div was not attached
-                               // to the DOM at the time the widget was created, and so the payload
-                               // will remain inside the container even after we call insertAfter().
-                               // If that happens and we remove the container a few lines below, we
-                               // will cause an infinite recursion - #5244
-                               .detach()
-                               .insertAfter( this._ui.placeholder )
-                               .removeClass( "ui-popup ui-overlay-shadow ui-corner-all" );
-                       this._ui.screen.remove();
-                       this._ui.container.remove();
-                       this._ui.placeholder.remove();
-               },
-
-               _destroy: function() {
-                       if ( $.mobile.popup.active === this ) {
-                               this.element.one( "popupafterclose", $.proxy( this, "_unenhance" ) );
-                               this.close();
-                       } else {
-                               this._unenhance();
-                       }
-               },
-
-               _closePopup: function( e, data ) {
-                       var parsedDst, toUrl, o = this.options, immediate = false;
-
-                       // restore location on screen
-                       window.scrollTo( 0, this._scrollTop );
-
-                       if ( e && e.type === "pagebeforechange" && data ) {
-                               // Determine whether we need to rapid-close the popup, or whether we can
-                               // take the time to run the closing transition
-                               if ( typeof data.toPage === "string" ) {
-                                       parsedDst = data.toPage;
-                               } else {
-                                       parsedDst = data.toPage.jqmData( "url" );
-                               }
-                               parsedDst = $.mobile.path.parseUrl( parsedDst );
-                               toUrl = parsedDst.pathname + parsedDst.search + parsedDst.hash;
-
-                               if ( this._myUrl !== $.mobile.path.makeUrlAbsolute( toUrl ) ) {
-                                       // Going to a different page - close immediately
-                                       immediate = true;
-                               } else {
-                                       e.preventDefault();
-                               }
-                       }
-
-                       // remove nav bindings
-                       o.container.unbind( o.closeEvents );
-                       // unbind click handlers added when history is disabled
-                       this.element.undelegate( o.closeLinkSelector, o.closeLinkEvents );
-
-                       this._close( immediate );
-               },
-
-               // any navigation event after a popup is opened should close the popup
-               // NOTE the pagebeforechange is bound to catch navigation events that don't
-               //      alter the url (eg, dialogs from popups)
-               _bindContainerClose: function() {
-                       this.options.container
-                               .one( this.options.closeEvents, $.proxy( this, "_closePopup" ) );
-               },
-
-               // TODO no clear deliniation of what should be here and
-               // what should be in _open. Seems to be "visual" vs "history" for now
-               open: function( options ) {
-                       var self = this, opts = this.options, url, hashkey, activePage, currentIsDialog, hasHash, urlHistory;
-
-                       // make sure open is idempotent
-                       if( $.mobile.popup.active ) {
-                               return;
-                       }
-
-                       // set the global popup mutex
-                       $.mobile.popup.active = this;
-                       this._scrollTop = $.mobile.window.scrollTop();
-
-                       // if history alteration is disabled close on navigate events
-                       // and leave the url as is
-                       if( !( opts.history ) ) {
-                               self._open( options );
-                               self._bindContainerClose();
-
-                               // When histoy is disabled we have to grab the data-rel
-                               // back link clicks so we can close the popup instead of
-                               // relying on history to do it for us
-                               self.element
-                                       .delegate( opts.closeLinkSelector, opts.closeLinkEvents, function( e ) {
-                                               self.close();
-                                               e.preventDefault();
-                                       });
-
-                               return;
-                       }
-
-                       // cache some values for min/readability
-                       urlHistory = $.mobile.urlHistory;
-                       hashkey = $.mobile.dialogHashKey;
-                       activePage = $.mobile.activePage;
-                       currentIsDialog = activePage.is( ".ui-dialog" );
-                       this._myUrl = url = urlHistory.getActive().url;
-                       hasHash = ( url.indexOf( hashkey ) > -1 ) && !currentIsDialog && ( urlHistory.activeIndex > 0 );
-
-                       if ( hasHash ) {
-                               self._open( options );
-                               self._bindContainerClose();
-                               return;
-                       }
-
-                       // if the current url has no dialog hash key proceed as normal
-                       // otherwise, if the page is a dialog simply tack on the hash key
-                       if ( url.indexOf( hashkey ) === -1 && !currentIsDialog ){
-                               url = url + (url.indexOf( "#" ) > -1 ? hashkey : "#" + hashkey);
-                       } else {
-                               url = $.mobile.path.parseLocation().hash + hashkey;
-                       }
-
-                       // Tack on an extra hashkey if this is the first page and we've just reconstructed the initial hash
-                       if ( urlHistory.activeIndex === 0 && url === urlHistory.initialDst ) {
-                               url += hashkey;
-                       }
-
-                       // swallow the the initial navigation event, and bind for the next
-                       $(window).one( "beforenavigate", function( e ) {
-                               e.preventDefault();
-                               self._open( options );
-                               self._bindContainerClose();
-                       });
-
-                       this.urlAltered = true;
-                       $.mobile.navigate( url, {role: "dialog"} );
-               },
-
-               close: function() {
-                       // make sure close is idempotent
-                       if( $.mobile.popup.active !== this ) {
-                               return;
-                       }
-
-                       this._scrollTop = $.mobile.window.scrollTop();
-
-                       if( this.options.history && this.urlAltered ) {
-                               $.mobile.back();
-                               this.urlAltered = false;
-                       } else {
-                               // simulate the nav bindings having fired
-                               this._closePopup();
-                       }
-               }
-       });
-
-
-       // TODO this can be moved inside the widget
-       $.mobile.popup.handleLink = function( $link ) {
-               var closestPage = $link.closest( ":jqmData(role='page')" ),
-                       scope = ( ( closestPage.length === 0 ) ? $( "body" ) : closestPage ),
-                       // NOTE make sure to get only the hash, ie7 (wp7) return the absolute href
-                       //      in this case ruining the element selection
-                       popup = $( $.mobile.path.parseUrl($link.attr( "href" )).hash, scope[0] ),
-                       offset;
-
-               if ( popup.data( "mobile-popup" ) ) {
-                       offset = $link.offset();
-                       popup.popup( "open", {
-                               x: offset.left + $link.outerWidth() / 2,
-                               y: offset.top + $link.outerHeight() / 2,
-                               transition: $link.jqmData( "transition" ),
-                               positionTo: $link.jqmData( "position-to" )
-                       });
-               }
-
-               //remove after delay
-               setTimeout( function() {
-                       // Check if we are in a listview
-                       var $parent = $link.parent().parent();
-                       if ($parent.hasClass("ui-li")) {
-                               $link = $parent.parent();
-                       }
-                       $link.removeClass( $.mobile.activeBtnClass );
-               }, 300 );
-       };
-
-       // TODO move inside _create
-       $.mobile.document.bind( "pagebeforechange", function( e, data ) {
-               if ( data.options.role === "popup" ) {
-                       $.mobile.popup.handleLink( data.options.link );
-                       e.preventDefault();
-               }
-       });
-
-       $.mobile.document.bind( "pagecreate create", function( e )  {
-               $.mobile.popup.prototype.enhanceWithin( e.target, true );
-       });
-
-})( jQuery );
-
-/*
-* custom "selectmenu" plugin
-*/
-
-(function( $, undefined ) {
-       var extendSelect = function( widget ) {
-
-               var select = widget.select,
-                       origDestroy = widget._destroy,
-                       selectID  = widget.selectID,
-                       prefix = ( selectID ? selectID : ( ( $.mobile.ns || "" ) + "uuid-" + widget.uuid ) ),
-                       popupID = prefix + "-listbox",
-                       dialogID = prefix + "-dialog",
-                       label = widget.label,
-                       thisPage = widget.select.closest( ".ui-page" ),
-                       selectOptions = widget._selectOptions(),
-                       isMultiple = widget.isMultiple = widget.select[ 0 ].multiple,
-                       buttonId = selectID + "-button",
-                       menuId = selectID + "-menu",
-                       menuPage = $( "<div data-" + $.mobile.ns + "role='dialog' id='" + dialogID + "' data-" +$.mobile.ns + "theme='"+ widget.options.theme +"' data-" +$.mobile.ns + "overlay-theme='"+ widget.options.overlayTheme +"'>" +
-                               "<div data-" + $.mobile.ns + "role='header'>" +
-                               "<div class='ui-title'>" + label.getEncodedText() + "</div>"+
-                               "</div>"+
-                               "<div data-" + $.mobile.ns + "role='content'></div>"+
-                               "</div>" ),
-
-                       listbox =  $( "<div id='" + popupID + "' class='ui-selectmenu'>" ).insertAfter( widget.select ).popup( { theme: widget.options.overlayTheme } ),
-
-                       list = $( "<ul>", {
-                               "class": "ui-selectmenu-list",
-                               "id": menuId,
-                               "role": "listbox",
-                               "aria-labelledby": buttonId
-                               }).attr( "data-" + $.mobile.ns + "theme", widget.options.theme )
-                                       .attr( "data-" + $.mobile.ns + "divider-theme", widget.options.dividerTheme )
-                                       .appendTo( listbox ),
-
-
-                       header = $( "<div>", {
-                               "class": "ui-header ui-bar-" + widget.options.theme
-                       }).prependTo( listbox ),
-
-                       headerTitle = $( "<h1>", {
-                               "class": "ui-title"
-                       }).appendTo( header ),
-
-                       menuPageContent,
-                       menuPageClose,
-                       headerClose;
-
-               if ( widget.isMultiple ) {
-                       headerClose = $( "<a>", {
-                               "text": widget.options.closeText,
-                               "href": "#",
-                               "class": "ui-btn-left"
-                       }).attr( "data-" + $.mobile.ns + "iconpos", "notext" ).attr( "data-" + $.mobile.ns + "icon", "delete" ).appendTo( header ).buttonMarkup();
-               }
-
-               $.extend( widget, {
-                       select: widget.select,
-                       selectID: selectID,
-                       buttonId: buttonId,
-                       menuId: menuId,
-                       popupID: popupID,
-                       dialogID: dialogID,
-                       thisPage: thisPage,
-                       menuPage: menuPage,
-                       label: label,
-                       selectOptions: selectOptions,
-                       isMultiple: isMultiple,
-                       theme: widget.options.theme,
-                       listbox: listbox,
-                       list: list,
-                       header: header,
-                       headerTitle: headerTitle,
-                       headerClose: headerClose,
-                       menuPageContent: menuPageContent,
-                       menuPageClose: menuPageClose,
-                       placeholder: "",
-
-                       build: function() {
-                               var self = this;
-
-                               // Create list from select, update state
-                               self.refresh();
-
-                               if ( self._origTabIndex === undefined ) {
-                                       // Map undefined to false, because self._origTabIndex === undefined
-                                       // indicates that we have not yet checked whether the select has
-                                       // originally had a tabindex attribute, whereas false indicates that
-                                       // we have checked the select for such an attribute, and have found
-                                       // none present.
-                                       self._origTabIndex = ( self.select[ 0 ].getAttribute( "tabindex" ) === null ) ? false : self.select.attr( "tabindex" );
-                               }
-                               self.select.attr( "tabindex", "-1" ).focus(function() {
-                                       $( this ).blur();
-                                       self.button.focus();
-                               });
-
-                               // Button events
-                               self.button.bind( "vclick keydown" , function( event ) {
-                                       if ( self.options.disabled || self.isOpen ) {
-                                               return;
-                                       }
-
-                                       if (event.type === "vclick" ||
-                                                       event.keyCode && (event.keyCode === $.mobile.keyCode.ENTER ||
-                                                                                                                               event.keyCode === $.mobile.keyCode.SPACE)) {
-
-                                               self._decideFormat();
-                                               if ( self.menuType === "overlay" ) {
-                                                       self.button.attr( "href", "#" + self.popupID ).attr( "data-" + ( $.mobile.ns || "" ) + "rel", "popup" );
-                                               } else {
-                                                       self.button.attr( "href", "#" + self.dialogID ).attr( "data-" + ( $.mobile.ns || "" ) + "rel", "dialog" );
-                                               }
-                                               self.isOpen = true;
-                                               // Do not prevent default, so the navigation may have a chance to actually open the chosen format
-                                       }
-                               });
-
-                               // Events for list items
-                               self.list.attr( "role", "listbox" )
-                                       .bind( "focusin", function( e ) {
-                                               $( e.target )
-                                                       .attr( "tabindex", "0" )
-                                                       .trigger( "vmouseover" );
-
-                                       })
-                                       .bind( "focusout", function( e ) {
-                                               $( e.target )
-                                                       .attr( "tabindex", "-1" )
-                                                       .trigger( "vmouseout" );
-                                       })
-                                       .delegate( "li:not(.ui-disabled, .ui-li-divider)", "click", function( event ) {
-
-                                               // index of option tag to be selected
-                                               var oldIndex = self.select[ 0 ].selectedIndex,
-                                                       newIndex = self.list.find( "li:not(.ui-li-divider)" ).index( this ),
-                                                       option = self._selectOptions().eq( newIndex )[ 0 ];
-
-                                               // toggle selected status on the tag for multi selects
-                                               option.selected = self.isMultiple ? !option.selected : true;
-
-                                               // toggle checkbox class for multiple selects
-                                               if ( self.isMultiple ) {
-                                                       $( this ).find( ".ui-icon" )
-                                                               .toggleClass( "ui-icon-checkbox-on", option.selected )
-                                                               .toggleClass( "ui-icon-checkbox-off", !option.selected );
-                                               }
-
-                                               // trigger change if value changed
-                                               if ( self.isMultiple || oldIndex !== newIndex ) {
-                                                       self.select.trigger( "change" );
-                                               }
-
-                                               // hide custom select for single selects only - otherwise focus clicked item
-                                               // We need to grab the clicked item the hard way, because the list may have been rebuilt
-                                               if ( self.isMultiple ) {
-                                                       self.list.find( "li:not(.ui-li-divider)" ).eq( newIndex )
-                                                               .addClass( "ui-btn-down-" + widget.options.theme ).find( "a" ).first().focus();
-                                               }
-                                               else {
-                                                       self.close();
-                                               }
-
-                                               event.preventDefault();
-                                       })
-                                       .keydown(function( event ) {  //keyboard events for menu items
-                                               var target = $( event.target ),
-                                                       li = target.closest( "li" ),
-                                                       prev, next;
-
-                                               // switch logic based on which key was pressed
-                                               switch ( event.keyCode ) {
-                                                       // up or left arrow keys
-                                               case 38:
-                                                       prev = li.prev().not( ".ui-selectmenu-placeholder" );
-
-                                                       if ( prev.is( ".ui-li-divider" ) ) {
-                                                               prev = prev.prev();
-                                                       }
-
-                                                       // if there's a previous option, focus it
-                                                       if ( prev.length ) {
-                                                               target
-                                                                       .blur()
-                                                                       .attr( "tabindex", "-1" );
-
-                                                               prev.addClass( "ui-btn-down-" + widget.options.theme ).find( "a" ).first().focus();
-                                                       }
-
-                                                       return false;
-                                                       // down or right arrow keys
-                                               case 40:
-                                                       next = li.next();
-
-                                                       if ( next.is( ".ui-li-divider" ) ) {
-                                                               next = next.next();
-                                                       }
-
-                                                       // if there's a next option, focus it
-                                                       if ( next.length ) {
-                                                               target
-                                                                       .blur()
-                                                                       .attr( "tabindex", "-1" );
-
-                                                               next.addClass( "ui-btn-down-" + widget.options.theme ).find( "a" ).first().focus();
-                                                       }
-
-                                                       return false;
-                                                       // If enter or space is pressed, trigger click
-                                               case 13:
-                                               case 32:
-                                                       target.trigger( "click" );
-
-                                                       return false;
-                                               }
-                                       });
-
-                               // button refocus ensures proper height calculation
-                               // by removing the inline style and ensuring page inclusion
-                               self.menuPage.bind( "pagehide", function() {
-                                       // TODO centralize page removal binding / handling in the page plugin.
-                                       // Suggestion from @jblas to do refcounting
-                                       //
-                                       // TODO extremely confusing dependency on the open method where the pagehide.remove
-                                       // bindings are stripped to prevent the parent page from disappearing. The way
-                                       // we're keeping pages in the DOM right now sucks
-                                       //
-                                       // rebind the page remove that was unbound in the open function
-                                       // to allow for the parent page removal from actions other than the use
-                                       // of a dialog sized custom select
-                                       //
-                                       // doing this here provides for the back button on the custom select dialog
-                                       $.mobile._bindPageRemove.call( self.thisPage );
-                               });
-
-                               // Events on the popup
-                               self.listbox.bind( "popupafterclose", function( event ) {
-                                       self.close();
-                               });
-
-                               // Close button on small overlays
-                               if ( self.isMultiple ) {
-                                       self.headerClose.click(function() {
-                                               if ( self.menuType === "overlay" ) {
-                                                       self.close();
-                                                       return false;
-                                               }
-                                       });
-                               }
-
-                               // track this dependency so that when the parent page
-                               // is removed on pagehide it will also remove the menupage
-                               self.thisPage.addDependents( this.menuPage );
-                       },
-
-                       _isRebuildRequired: function() {
-                               var list = this.list.find( "li" ),
-                                       options = this._selectOptions();
-
-                               // TODO exceedingly naive method to determine difference
-                               // ignores value changes etc in favor of a forcedRebuild
-                               // from the user in the refresh method
-                               return options.text() !== list.text();
-                       },
-
-                       selected: function() {
-                               return this._selectOptions().filter( ":selected:not( :jqmData(placeholder='true') )" );
-                       },
-
-                       refresh: function( forceRebuild , foo ) {
-                               var self = this,
-                               select = this.element,
-                               isMultiple = this.isMultiple,
-                               indicies;
-
-                               if (  forceRebuild || this._isRebuildRequired() ) {
-                                       self._buildList();
-                               }
-
-                               indicies = this.selectedIndices();
-
-                               self.setButtonText();
-                               self.setButtonCount();
-
-                               self.list.find( "li:not(.ui-li-divider)" )
-                                       .removeClass( $.mobile.activeBtnClass )
-                                       .attr( "aria-selected", false )
-                                       .each(function( i ) {
-
-                                               if ( $.inArray( i, indicies ) > -1 ) {
-                                                       var item = $( this );
-
-                                                       // Aria selected attr
-                                                       item.attr( "aria-selected", true );
-
-                                                       // Multiple selects: add the "on" checkbox state to the icon
-                                                       if ( self.isMultiple ) {
-                                                               item.find( ".ui-icon" ).removeClass( "ui-icon-checkbox-off" ).addClass( "ui-icon-checkbox-on" );
-                                                       } else {
-                                                               if ( item.is( ".ui-selectmenu-placeholder" ) ) {
-                                                                       item.next().addClass( $.mobile.activeBtnClass );
-                                                               } else {
-                                                                       item.addClass( $.mobile.activeBtnClass );
-                                                               }
-                                                       }
-                                               }
-                                       });
-                       },
-
-                       close: function() {
-                               if ( this.options.disabled || !this.isOpen ) {
-                                       return;
-                               }
-
-                               var self = this;
-
-                               if ( self.menuType === "page" ) {
-                                       self.menuPage.dialog( "close" );
-                                       self.list.appendTo( self.listbox );
-                               } else {
-                                       self.listbox.popup( "close" );
-                               }
-
-                               self._focusButton();
-                               // allow the dialog to be closed again
-                               self.isOpen = false;
-                       },
-
-                       open: function() {
-                               this.button.click();
-                       },
-
-                       _decideFormat: function() {
-                               var self = this,
-                                       $window = $.mobile.window,
-                                       selfListParent = self.list.parent(),
-                                       menuHeight = selfListParent.outerHeight(),
-                                       menuWidth = selfListParent.outerWidth(),
-                                       activePage = $( "." + $.mobile.activePageClass ),
-                                       scrollTop = $window.scrollTop(),
-                                       btnOffset = self.button.offset().top,
-                                       screenHeight = $window.height(),
-                                       screenWidth = $window.width();
-
-                               function focusMenuItem() {
-                                       var selector = self.list.find( "." + $.mobile.activeBtnClass + " a" );
-                                       if ( selector.length === 0 ) {
-                                               selector = self.list.find( "li.ui-btn:not( :jqmData(placeholder='true') ) a" );
-                                       }
-                                       selector.first().focus().closest( "li" ).addClass( "ui-btn-down-" + widget.options.theme );
-                               }
-
-                               if ( menuHeight > screenHeight - 80 || !$.support.scrollTop ) {
-
-                                       self.menuPage.appendTo( $.mobile.pageContainer ).page();
-                                       self.menuPageContent = menuPage.find( ".ui-content" );
-                                       self.menuPageClose = menuPage.find( ".ui-header a" );
-
-                                       // prevent the parent page from being removed from the DOM,
-                                       // otherwise the results of selecting a list item in the dialog
-                                       // fall into a black hole
-                                       self.thisPage.unbind( "pagehide.remove" );
-
-                                       //for WebOS/Opera Mini (set lastscroll using button offset)
-                                       if ( scrollTop === 0 && btnOffset > screenHeight ) {
-                                               self.thisPage.one( "pagehide", function() {
-                                                       $( this ).jqmData( "lastScroll", btnOffset );
-                                               });
-                                       }
-
-                                       self.menuPage
-                                               .one( "pageshow", function() {
-                                                       focusMenuItem();
-                                               })
-                                               .one( "pagehide", function() {
-                                                       self.close();
-                                               });
-
-                                       self.menuType = "page";
-                                       self.menuPageContent.append( self.list );
-                                       self.menuPage.find("div .ui-title").text(self.label.text());
-                               } else {
-                                       self.menuType = "overlay";
-
-                                       self.listbox.one( "popupafteropen", focusMenuItem );
-                               }
-                       },
-
-                       _buildList: function() {
-                               var self = this,
-                                       o = this.options,
-                                       placeholder = this.placeholder,
-                                       needPlaceholder = true,
-                                       optgroups = [],
-                                       lis = [],
-                                       dataIcon = self.isMultiple ? "checkbox-off" : "false";
-
-                               self.list.empty().filter( ".ui-listview" ).listview( "destroy" );
-
-                               var $options = self.select.find( "option" ),
-                                       numOptions = $options.length,
-                                       select = this.select[ 0 ],
-                                       dataPrefix = 'data-' + $.mobile.ns,
-                                       dataIndexAttr = dataPrefix + 'option-index',
-                                       dataIconAttr = dataPrefix + 'icon',
-                                       dataRoleAttr = dataPrefix + 'role',
-                                       dataPlaceholderAttr = dataPrefix + 'placeholder',
-                                       fragment = document.createDocumentFragment(),
-                                       isPlaceholderItem = false,
-                                       optGroup;
-
-                               for (var i = 0; i < numOptions;i++, isPlaceholderItem = false) {
-                                       var option = $options[i],
-                                               $option = $( option ),
-                                               parent = option.parentNode,
-                                               text = $option.text(),
-                                               anchor  = document.createElement( 'a' ),
-                                               classes = [];
-
-                                       anchor.setAttribute( 'href', '#' );
-                                       anchor.appendChild( document.createTextNode( text ) );
-
-                                       // Are we inside an optgroup?
-                                       if ( parent !== select && parent.nodeName.toLowerCase() === "optgroup" ) {
-                                               var optLabel = parent.getAttribute( 'label' );
-                                               if ( optLabel !== optGroup ) {
-                                                       var divider = document.createElement( 'li' );
-                                                       divider.setAttribute( dataRoleAttr, 'list-divider' );
-                                                       divider.setAttribute( 'role', 'option' );
-                                                       divider.setAttribute( 'tabindex', '-1' );
-                                                       divider.appendChild( document.createTextNode( optLabel ) );
-                                                       fragment.appendChild( divider );
-                                                       optGroup = optLabel;
-                                               }
-                                       }
-
-                                       if ( needPlaceholder && ( !option.getAttribute( "value" ) || text.length === 0 || $option.jqmData( "placeholder" ) ) ) {
-                                               needPlaceholder = false;
-                                               isPlaceholderItem = true;
-
-                                               // If we have identified a placeholder, record the fact that it was
-                                               // us who have added the placeholder to the option and mark it
-                                               // retroactively in the select as well
-                                               if ( null === option.getAttribute( dataPlaceholderAttr ) ) {
-                                                       this._removePlaceholderAttr = true;
-                                               }
-                                               option.setAttribute( dataPlaceholderAttr, true );
-                                               if ( o.hidePlaceholderMenuItems ) {
-                                                       classes.push( "ui-selectmenu-placeholder" );
-                                               }
-                                               if ( placeholder !== text ) {
-                                                       placeholder = self.placeholder = text;
-                                               }
-                                       }
-
-                                       var item = document.createElement('li');
-                                       if ( option.disabled ) {
-                                               classes.push( "ui-disabled" );
-                                               item.setAttribute('aria-disabled',true);
-                                       }
-                                       item.setAttribute( dataIndexAttr,i );
-                                       item.setAttribute( dataIconAttr, dataIcon );
-                                       if ( isPlaceholderItem ) {
-                                               item.setAttribute( dataPlaceholderAttr, true );
-                                       }
-                                       item.className = classes.join( " " );
-                                       item.setAttribute( 'role', 'option' );
-                                       anchor.setAttribute( 'tabindex', '-1' );
-                                       item.appendChild( anchor );
-                                       fragment.appendChild( item );
-                               }
-
-                               self.list[0].appendChild( fragment );
-
-                               // Hide header if it's not a multiselect and there's no placeholder
-                               if ( !this.isMultiple && !placeholder.length ) {
-                                       this.header.hide();
-                               } else {
-                                       this.headerTitle.text( this.placeholder );
-                               }
-
-                               // Now populated, create listview
-                               self.list.listview();
-                       },
-
-                       _button: function() {
-                               return $( "<a>", {
-                                       "href": "#",
-                                       "role": "button",
-                                       // TODO value is undefined at creation
-                                       "id": this.buttonId,
-                                       "aria-haspopup": "true",
-
-                                       // TODO value is undefined at creation
-                                       "aria-owns": this.menuId
-                               });
-                       },
-
-                       _destroy: function() {
-                               this.close();
-
-                               // Restore the tabindex attribute to its original value
-                               if ( this._origTabIndex !== undefined ) {
-                                       if ( this._origTabIndex !== false ) {
-                                               this.select.attr( "tabindex", this._origTabIndex );
-                                       } else {
-                                               this.select.removeAttr( "tabindex" );
-                                       }
-                               }
-
-                               // Remove the placeholder attribute if we were the ones to add it
-                               if ( this._removePlaceholderAttr ) {
-                                       this._selectOptions().removeAttr( "data-" + $.mobile.ns + "placeholder" );
-                               }
-
-                               // Remove the popup
-                               this.listbox.remove();
-
-                               // Chain up
-                               origDestroy.apply( this, arguments );
-                       }
-               });
-       };
-
-       // issue #3894 - core doesn't trigger events on disabled delegates
-       $.mobile.document.bind( "selectmenubeforecreate", function( event ) {
-               var selectmenuWidget = $( event.target ).data( "mobile-selectmenu" );
-
-               if ( !selectmenuWidget.options.nativeMenu &&
-                               selectmenuWidget.element.parents( ":jqmData(role='popup')" ).length === 0 ) {
-                       extendSelect( selectmenuWidget );
-               }
-       });
-})( jQuery );
-
-(function( $, undefined ) {
-
-       $.widget( "mobile.controlgroup", $.mobile.widget, $.extend( {
-               options: {
-                       shadow: false,
-                       corners: true,
-                       excludeInvisible: true,
-                       type: "vertical",
-                       mini: false,
-                       initSelector: ":jqmData(role='controlgroup')"
-               },
-
-               _create: function() {
-                       var $el = this.element,
-                               ui = {
-                                       inner: $( "<div class='ui-controlgroup-controls'></div>" ),
-                                       legend: $( "<div role='heading' class='ui-controlgroup-label'></div>" )
-                               },
-                               grouplegend = $el.children( "legend" ),
-                               self = this;
-
-                       // Apply the proto
-                       $el.wrapInner( ui.inner );
-                       if ( grouplegend.length ) {
-                               ui.legend.append( grouplegend ).insertBefore( $el.children( 0 ) );
-                       }
-                       $el.addClass( "ui-corner-all ui-controlgroup" );
-
-                       $.extend( this, {
-                               _initialRefresh: true
-                       });
-
-                       $.each( this.options, function( key, value ) {
-                               // Cause initial options to be applied by their handler by temporarily setting the option to undefined
-                               // - the handler then sets it to the initial value
-                               self.options[ key ] = undefined;
-                               self._setOption( key, value, true );
-                       });
-               },
-
-               _init: function() {
-                       this.refresh();
-               },
-
-               _setOption: function( key, value ) {
-                       var setter = "_set" + key.charAt( 0 ).toUpperCase() + key.slice( 1 );
-
-                       if ( this[ setter ] !== undefined ) {
-                               this[ setter ]( value );
-                       }
-
-                       this._super( key, value );
-                       this.element.attr( "data-" + ( $.mobile.ns || "" ) + ( key.replace( /([A-Z])/, "-$1" ).toLowerCase() ), value );
-               },
-
-               _setType: function( value ) {
-                       this.element
-                               .removeClass( "ui-controlgroup-horizontal ui-controlgroup-vertical" )
-                               .addClass( "ui-controlgroup-" + value );
-                       this.refresh();
-               },
-
-               _setCorners: function( value ) {
-                       this.element.toggleClass( "ui-corner-all", value );
-               },
-
-               _setShadow: function( value ) {
-                       this.element.toggleClass( "ui-shadow", value );
-               },
-
-               _setMini: function( value ) {
-                       this.element.toggleClass( "ui-mini", value );
-               },
-
-               container: function() {
-                       return this.element.children( ".ui-controlgroup-controls" );
-               },
-
-               refresh: function() {
-                       var els = this.element.find( ".ui-btn" ).not( ".ui-slider-handle" ),
-                               create = this._initialRefresh;
-                       if ( $.mobile.checkboxradio ) {
-                               this.element.find( ":mobile-checkboxradio" ).checkboxradio( "refresh" );
-                       }
-                       this._addFirstLastClasses( els, this.options.excludeInvisible ? this._getVisibles( els, create ) : els, create );
-                       this._initialRefresh = false;
-               }
-       }, $.mobile.behaviors.addFirstLastClasses ) );
-
-       // TODO: Implement a mechanism to allow widgets to become enhanced in the
-       // correct order when their correct enhancement depends on other widgets in
-       // the page being correctly enhanced already.
-       //
-       // For now, we wait until dom-ready to attach the controlgroup's enhancement
-       // hook, because by that time, all the other widgets' enhancement hooks should
-       // already be in place, ensuring that all widgets that need to be grouped will
-       // already have been enhanced by the time the controlgroup is created.
-       $( function() {
-               $.mobile.document.bind( "pagecreate create", function( e )  {
-                       $.mobile.controlgroup.prototype.enhanceWithin( e.target, true );
-               });
-       });
-})(jQuery);
-
-(function( $, undefined ) {
-
-$( document ).bind( "pagecreate create", function( e ) {
-
-       //links within content areas, tests included with page
-       $( e.target )
-               .find( "a" )
-               .jqmEnhanceable()
-               .not( ".ui-btn, .ui-link-inherit, :jqmData(role='none'), :jqmData(role='nojs')" )
-               .addClass( "ui-link" );
-
-});
-
-})( jQuery );
-
-
-(function( $, undefined ) {
-
-
-       $.widget( "mobile.fixedtoolbar", $.mobile.widget, {
-               options: {
-                       visibleOnPageShow: true,
-                       disablePageZoom: true,
-                       transition: "slide", //can be none, fade, slide (slide maps to slideup or slidedown)
-                       fullscreen: false,
-                       tapToggle: true,
-                       tapToggleBlacklist: "a, button, input, select, textarea, .ui-header-fixed, .ui-footer-fixed, .ui-popup, .ui-panel, .ui-panel-dismiss-open",
-                       hideDuringFocus: "input, textarea, select",
-                       updatePagePadding: true,
-                       trackPersistentToolbars: true,
-
-                       // Browser detection! Weeee, here we go...
-                       // Unfortunately, position:fixed is costly, not to mention probably impossible, to feature-detect accurately.
-                       // Some tests exist, but they currently return false results in critical devices and browsers, which could lead to a broken experience.
-                       // Testing fixed positioning is also pretty obtrusive to page load, requiring injected elements and scrolling the window
-                       // The following function serves to rule out some popular browsers with known fixed-positioning issues
-                       // This is a plugin option like any other, so feel free to improve or overwrite it
-                       supportBlacklist: function() {
-                               return !$.support.fixedPosition;
-                       },
-                       initSelector: ":jqmData(position='fixed')"
-               },
-
-               _create: function() {
-
-                       var self = this,
-                               o = self.options,
-                               $el = self.element,
-                               tbtype = $el.is( ":jqmData(role='header')" ) ? "header" : "footer",
-                               $page = $el.closest( ".ui-page" );
-
-                       // Feature detecting support for
-                       if ( o.supportBlacklist() ) {
-                               self.destroy();
-                               return;
-                       }
-
-                       $el.addClass( "ui-"+ tbtype +"-fixed" );
-
-                       // "fullscreen" overlay positioning
-                       if ( o.fullscreen ) {
-                               $el.addClass( "ui-"+ tbtype +"-fullscreen" );
-                               $page.addClass( "ui-page-" + tbtype + "-fullscreen" );
-                       }
-                       // If not fullscreen, add class to page to set top or bottom padding
-                       else{
-                               $page.addClass( "ui-page-" + tbtype + "-fixed" );
-                       }
-
-                       $.extend( this, {
-                               _thisPage: null
-                       });
-                       self._addTransitionClass();
-                       self._bindPageEvents();
-                       self._bindToggleHandlers();
-               },
-
-               _addTransitionClass: function() {
-                       var tclass = this.options.transition;
-
-                       if ( tclass && tclass !== "none" ) {
-                               // use appropriate slide for header or footer
-                               if ( tclass === "slide" ) {
-                                       tclass = this.element.is( ".ui-header" ) ? "slidedown" : "slideup";
-                               }
-
-                               this.element.addClass( tclass );
-                       }
-               },
-
-               _bindPageEvents: function() {
-                       this._thisPage = this.element.closest( ".ui-page" );
-                       //page event bindings
-                       // Fixed toolbars require page zoom to be disabled, otherwise usability issues crop up
-                       // This method is meant to disable zoom while a fixed-positioned toolbar page is visible
-                       this._on( this._thisPage, {
-                               "pagebeforeshow": "_handlePageBeforeShow",
-                               "webkitAnimationStart":"_handleAnimationStart",
-                               "animationstart":"_handleAnimationStart",
-                               "updatelayout": "_handleAnimationStart",
-                               "pageshow": "_handlePageShow",
-                               "pagebeforehide": "_handlePageBeforeHide"
-                       });
-               },
-
-               _handlePageBeforeShow: function() {
-                       var o = this.options;
-                       if ( o.disablePageZoom ) {
-                               $.mobile.zoom.disable( true );
-                       }
-                       if ( !o.visibleOnPageShow ) {
-                               this.hide( true );
-                       }
-               },
-
-               _handleAnimationStart: function() {
-                       if ( this.options.updatePagePadding ) {
-                               this.updatePagePadding( this._thisPage );
-                       }
-               },
-
-               _handlePageShow: function() {
-                       this.updatePagePadding( this._thisPage );
-                       if ( this.options.updatePagePadding ) {
-                               this._on( $.mobile.window, { "throttledresize": "updatePagePadding" } );
-                       }
-               },
-
-               _handlePageBeforeHide: function( e, ui ) {
-                       var o = this.options;
-
-                       if ( o.disablePageZoom ) {
-                               $.mobile.zoom.enable( true );
-                       }
-                       if ( o.updatePagePadding ) {
-                               this._off( $.mobile.window, "throttledresize" );
-                       }
-
-                       if ( o.trackPersistentToolbars ) {
-                               var thisFooter = $( ".ui-footer-fixed:jqmData(id)", this._thisPage ),
-                                       thisHeader = $( ".ui-header-fixed:jqmData(id)", this._thisPage ),
-                                       nextFooter = thisFooter.length && ui.nextPage && $( ".ui-footer-fixed:jqmData(id='" + thisFooter.jqmData( "id" ) + "')", ui.nextPage ) || $(),
-                                       nextHeader = thisHeader.length && ui.nextPage && $( ".ui-header-fixed:jqmData(id='" + thisHeader.jqmData( "id" ) + "')", ui.nextPage ) || $();
-
-                               if ( nextFooter.length || nextHeader.length ) {
-
-                                       nextFooter.add( nextHeader ).appendTo( $.mobile.pageContainer );
-
-                                       ui.nextPage.one( "pageshow", function() {
-                                               nextHeader.prependTo( this );
-                                               nextFooter.appendTo( this );
-                                       });
-                               }
-                       }
-               },
-
-               _visible: true,
-
-               // This will set the content element's top or bottom padding equal to the toolbar's height
-               updatePagePadding: function( tbPage ) {
-                       var $el = this.element,
-                               header = $el.is( ".ui-header" ),
-                               pos = parseFloat( $el.css( header ? "top" : "bottom" ) );
-
-                       // This behavior only applies to "fixed", not "fullscreen"
-                       if ( this.options.fullscreen ) { return; }
-
-                       // tbPage argument can be a Page object or an event, if coming from throttled resize. 
-                       tbPage = ( tbPage && tbPage.type === undefined && tbPage ) || this._thisPage || $el.closest( ".ui-page" );
-                       $( tbPage ).css( "padding-" + ( header ? "top" : "bottom" ), $el.outerHeight() + pos );
-               },
-
-               _useTransition: function( notransition ) {
-                       var $win = $.mobile.window,
-                               $el = this.element,
-                               scroll = $win.scrollTop(),
-                               elHeight = $el.height(),
-                               pHeight = $el.closest( ".ui-page" ).height(),
-                               viewportHeight = $.mobile.getScreenHeight(),
-                               tbtype = $el.is( ":jqmData(role='header')" ) ? "header" : "footer";
-
-                       return !notransition &&
-                               ( this.options.transition && this.options.transition !== "none" &&
-                               (
-                                       ( tbtype === "header" && !this.options.fullscreen && scroll > elHeight ) ||
-                                       ( tbtype === "footer" && !this.options.fullscreen && scroll + viewportHeight < pHeight - elHeight )
-                               ) || this.options.fullscreen
-                               );
-               },
-
-               show: function( notransition ) {
-                       var hideClass = "ui-fixed-hidden",
-                               $el = this.element;
-
-                       if ( this._useTransition( notransition ) ) {
-                               $el
-                                       .removeClass( "out " + hideClass )
-                                       .addClass( "in" )
-                                       .animationComplete(function () {
-                                               $el.removeClass('in');
-                                       });
-                       }
-                       else {
-                               $el.removeClass( hideClass );
-                       }
-                       this._visible = true;
-               },
-
-               hide: function( notransition ) {
-                       var hideClass = "ui-fixed-hidden",
-                               $el = this.element,
-                               // if it's a slide transition, our new transitions need the reverse class as well to slide outward
-                               outclass = "out" + ( this.options.transition === "slide" ? " reverse" : "" );
-
-                       if( this._useTransition( notransition ) ) {
-                               $el
-                                       .addClass( outclass )
-                                       .removeClass( "in" )
-                                       .animationComplete(function() {
-                                               $el.addClass( hideClass ).removeClass( outclass );
-                                       });
-                       }
-                       else {
-                               $el.addClass( hideClass ).removeClass( outclass );
-                       }
-                       this._visible = false;
-               },
-
-               toggle: function() {
-                       this[ this._visible ? "hide" : "show" ]();
-               },
-
-               _bindToggleHandlers: function() {
-                       var self = this,
-                               o = self.options,
-                               $el = self.element,
-                               delayShow, delayHide,
-                               isVisible = true;
-
-                       // tap toggle
-                       $el.closest( ".ui-page" )
-                               .bind( "vclick", function( e ) {
-                                       if ( o.tapToggle && !$( e.target ).closest( o.tapToggleBlacklist ).length ) {
-                                               self.toggle();
-                                       }
-                               })
-                               .bind( "focusin focusout", function( e ) {
-                                       //this hides the toolbars on a keyboard pop to give more screen room and prevent ios bug which 
-                                       //positions fixed toolbars in the middle of the screen on pop if the input is near the top or
-                                       //bottom of the screen addresses issues #4410 Footer navbar moves up when clicking on a textbox in an Android environment
-                                       //and issue #4113 Header and footer change their position after keyboard popup - iOS
-                                       //and issue #4410 Footer navbar moves up when clicking on a textbox in an Android environment
-                                       if ( screen.width < 1025 && $( e.target ).is( o.hideDuringFocus ) && !$( e.target ).closest( ".ui-header-fixed, .ui-footer-fixed" ).length ) {
-                                               //Fix for issue #4724 Moving through form in Mobile Safari with "Next" and "Previous" system 
-                                               //controls causes fixed position, tap-toggle false Header to reveal itself
-                                               // isVisible instead of self._visible because the focusin and focusout events fire twice at the same time
-                                               // Also use a delay for hiding the toolbars because on Android native browser focusin is direclty followed
-                                               // by a focusout when a native selects opens and the other way around when it closes.
-                                               if ( e.type === "focusout" && !isVisible ) {
-                                                       isVisible = true;
-                                                       //wait for the stack to unwind and see if we have jumped to another input
-                                                       clearTimeout( delayHide );
-                                                       delayShow = setTimeout( function() {
-                                                               self.show();
-                                                       }, 0 ); 
-                                               } else if ( e.type === "focusin" && !!isVisible ) {
-                                                       //if we have jumped to another input clear the time out to cancel the show.
-                                                       clearTimeout( delayShow );
-                                                       isVisible = false;
-                                                       delayHide = setTimeout( function() {
-                                                               self.hide();
-                                                       }, 0 ); 
-                                               }
-                                       }
-                               });
-               },
-
-               _destroy: function() {
-                       var $el = this.element,
-                               header = $el.is( ".ui-header" );
-
-                       $el.closest( ".ui-page" ).css( "padding-" + ( header ? "top" : "bottom" ), "" );
-                       $el.removeClass( "ui-header-fixed ui-footer-fixed ui-header-fullscreen ui-footer-fullscreen in out fade slidedown slideup ui-fixed-hidden" );
-                       $el.closest( ".ui-page" ).removeClass( "ui-page-header-fixed ui-page-footer-fixed ui-page-header-fullscreen ui-page-footer-fullscreen" );
-               }
-
-       });
-
-       //auto self-init widgets
-       $.mobile.document
-               .bind( "pagecreate create", function( e ) {
-
-                       // DEPRECATED in 1.1: support for data-fullscreen=true|false on the page element.
-                       // This line ensures it still works, but we recommend moving the attribute to the toolbars themselves.
-                       if ( $( e.target ).jqmData( "fullscreen" ) ) {
-                               $( $.mobile.fixedtoolbar.prototype.options.initSelector, e.target ).not( ":jqmData(fullscreen)" ).jqmData( "fullscreen", true );
-                       }
-
-                       $.mobile.fixedtoolbar.prototype.enhanceWithin( e.target );
-               });
-
-})( jQuery );
-
-(function( $, undefined ) {
-       $.widget( "mobile.fixedtoolbar", $.mobile.fixedtoolbar, {
-
-                       _create: function() {
-                               this._super();
-                               this._workarounds();
-                       },
-
-                       //check the browser and version and run needed workarounds
-                       _workarounds: function() {
-                               var ua = navigator.userAgent,
-                               platform = navigator.platform,
-                               // Rendering engine is Webkit, and capture major version
-                               wkmatch = ua.match( /AppleWebKit\/([0-9]+)/ ),
-                               wkversion = !!wkmatch && wkmatch[ 1 ],
-                               os = null,
-                               self = this;
-                               //set the os we are working in if it dosent match one with workarounds return
-                               if( platform.indexOf( "iPhone" ) > -1 || platform.indexOf( "iPad" ) > -1  || platform.indexOf( "iPod" ) > -1 ){
-                                       os = "ios";
-                               } else if( ua.indexOf( "Android" ) > -1 ){
-                                       os = "android";
-                               } else {
-                                       return;
-                               }
-                               //check os version if it dosent match one with workarounds return
-                               if( os === "ios" ) {
-                                       //iOS  workarounds
-                                       self._bindScrollWorkaround();
-                               } else if( os === "android" && wkversion && wkversion < 534 ) {
-                                       //Android 2.3 run all Android 2.3 workaround
-                                       self._bindScrollWorkaround();
-                                       self._bindListThumbWorkaround();
-                               } else {
-                                       return;
-                               }
-                       },
-
-                       //Utility class for checking header and footer positions relative to viewport
-                       _viewportOffset: function() {
-                               var $el = this.element,
-                                       header = $el.is( ".ui-header" ),
-                                       offset = Math.abs($el.offset().top - $.mobile.window.scrollTop());
-                               if( !header ) {
-                                       offset = Math.round(offset - $.mobile.window.height() + $el.outerHeight())-60;
-                               }
-                               return offset;
-                       },
-
-                       //bind events for _triggerRedraw() function 
-                       _bindScrollWorkaround: function() {
-                               var self = this;
-                               //bind to scrollstop and check if the toolbars are correctly positioned
-                               this._on( $.mobile.window, { scrollstop: function() {
-                                       var viewportOffset = self._viewportOffset();
-                                       //check if the header is visible and if its in the right place
-                                       if( viewportOffset > 2 && self._visible) {
-                                               self._triggerRedraw();
-                                       }
-                               }});
-                       },
-
-                       //this addresses issue #4250 Persistent footer instability in v1.1 with long select lists in Android 2.3.3
-                       //and issue #3748 Android 2.x: Page transitions broken when fixed toolbars used
-                       //the absolutely positioned thumbnail in a list view causes problems with fixed position buttons above in a nav bar
-                       //setting the li's to -webkit-transform:translate3d(0,0,0); solves this problem to avoide potential issues in other
-                       //platforms we scope this with the class ui-android-2x-fix
-                       _bindListThumbWorkaround: function() {
-                               this.element.closest(".ui-page").addClass( "ui-android-2x-fixed" );
-                       },
-                       //this addresses issues #4337 Fixed header problem after scrolling content on iOS and Android
-                       //and device bugs project issue #1 Form elements can lose click hit area in position: fixed containers.
-                       //this also addresses not on fixed toolbars page in docs
-                       //adding 1px of padding to the bottom then removing it causes a "redraw"
-                       //which positions the toolbars correctly (they will always be visually correct) 
-                       _triggerRedraw: function() {
-                               var paddingBottom = parseFloat( $( ".ui-page-active" ).css( "padding-bottom" ) );
-                               //trigger page redraw to fix incorrectly positioned fixed elements
-                               $( ".ui-page-active" ).css( "padding-bottom", ( paddingBottom + 1 ) +"px" );
-                               //if the padding is reset with out a timeout the reposition will not occure.
-                               //this is independant of JQM the browser seems to need the time to react.
-                               setTimeout( function() {
-                                       $( ".ui-page-active" ).css( "padding-bottom", paddingBottom + "px" );
-                               }, 0 );
-                       },
-
-                       destroy: function() {
-                               this._super();
-                               //Remove the class we added to the page previously in android 2.x 
-                               this.element.closest(".ui-page-active").removeClass( "ui-android-2x-fix" );
-                       }
-       });
-
-       })( jQuery );
-
-(function( $, undefined ) {
-
-$.widget( "mobile.panel", $.mobile.widget, {
-       options: {
-               classes: {
-                       panel: "ui-panel",
-                       panelOpen: "ui-panel-open",
-                       panelClosed: "ui-panel-closed",
-                       panelFixed: "ui-panel-fixed",
-                       panelInner: "ui-panel-inner",
-                       modal: "ui-panel-dismiss",
-                       modalOpen: "ui-panel-dismiss-open",
-                       pagePanel: "ui-page-panel",
-                       pagePanelOpen: "ui-page-panel-open",
-                       contentWrap: "ui-panel-content-wrap",
-                       contentWrapOpen: "ui-panel-content-wrap-open",
-                       contentWrapClosed: "ui-panel-content-wrap-closed",
-                       contentFixedToolbar: "ui-panel-content-fixed-toolbar",
-                       contentFixedToolbarOpen: "ui-panel-content-fixed-toolbar-open",
-                       contentFixedToolbarClosed: "ui-panel-content-fixed-toolbar-closed",
-                       animate: "ui-panel-animate"
-               },
-               animate: true,
-               theme: "c",
-               position: "left",
-               dismissible: true,
-               display: "reveal", //accepts reveal, push, overlay
-               initSelector: ":jqmData(role='panel')",
-               swipeClose: true,
-               positionFixed: false
-       },
-
-       _panelID: null,
-       _closeLink: null,
-       _page: null,
-       _modal: null,
-       _panelInner: null,
-       _wrapper: null,
-       _fixedToolbar: null,
-
-       _create: function() {
-               var self = this,
-                       $el = self.element,
-                       page = $el.closest( ":jqmData(role='page')" ),
-                       _getPageTheme = function() {
-                               var $theme = $.data( page[0], "mobilePage" ).options.theme,
-                               $pageThemeClass = "ui-body-" + $theme;
-                               return $pageThemeClass;
-                       },
-                       _getPanelInner = function() {
-                               var $panelInner = $el.find( "." + self.options.classes.panelInner );
-                               if ( $panelInner.length === 0 ) {
-                                       $panelInner = $el.children().wrapAll( '<div class="' + self.options.classes.panelInner + '" />' ).parent();
-                               }
-                               return $panelInner;
-                       },
-                       _getWrapper = function() {
-                               var $wrapper = page.find( "." + self.options.classes.contentWrap );
-                               if ( $wrapper.length === 0 ) {
-                                       $wrapper = page.children( ".ui-header:not(:jqmData(position='fixed')), .ui-content:not(:jqmData(role='popup')), .ui-footer:not(:jqmData(position='fixed'))" ).wrapAll( '<div class="' + self.options.classes.contentWrap + ' ' + _getPageTheme() + '" />' ).parent();
-                                       if ( $.support.cssTransform3d && !!self.options.animate ) {
-                                               $wrapper.addClass( self.options.classes.animate );
-                                       }
-                               }
-                               return $wrapper;
-                       },
-                       _getFixedToolbar = function() {
-                               var $fixedToolbar = page.find( "." + self.options.classes.contentFixedToolbar );
-                               if ( $fixedToolbar.length === 0 ) {
-                                       $fixedToolbar = page.find( ".ui-header:jqmData(position='fixed'), .ui-footer:jqmData(position='fixed')" ).addClass( self.options.classes.contentFixedToolbar );
-                                       if ( $.support.cssTransform3d && !!self.options.animate ) {
-                                               $fixedToolbar.addClass( self.options.classes.animate );
-                                       }
-                               }
-                               return $fixedToolbar;
-                       };
-
-               // expose some private props to other methods
-               $.extend( this, {
-                       _panelID: $el.attr( "id" ),
-                       _closeLink: $el.find( ":jqmData(rel='close')" ),
-                       _page: $el.closest( ":jqmData(role='page')" ),
-                       _pageTheme: _getPageTheme(),
-                       _panelInner: _getPanelInner(),
-                       _wrapper: _getWrapper(),
-                       _fixedToolbar: _getFixedToolbar()
-               });
-               
-               self._addPanelClasses();
-               self._wrapper.addClass( this.options.classes.contentWrapClosed );
-               self._fixedToolbar.addClass( this.options.classes.contentFixedToolbarClosed );
-               // add class to page so we can set "overflow-x: hidden;" for it to fix Android zoom issue
-               self._page.addClass( self.options.classes.pagePanel );
-               
-               // if animating, add the class to do so
-               if ( $.support.cssTransform3d && !!self.options.animate ) {
-                       this.element.addClass( self.options.classes.animate );
-               }
-               
-               self._bindUpdateLayout();
-               self._bindCloseEvents();
-               self._bindLinkListeners();
-               self._bindPageEvents();
-
-               if ( !!self.options.dismissible ) {
-                       self._createModal();
-               }
-
-               self._bindSwipeEvents();
-       },
-
-       _createModal: function( options ) {
-               var self = this;
-               
-               self._modal = $( "<div class='" + self.options.classes.modal + "' data-panelid='" + self._panelID + "'></div>" )
-                       .on( "mousedown", function() {
-                               self.close();
-                       })
-                       .appendTo( this._page );
-       },
-
-       _getPosDisplayClasses: function( prefix ) {
-               return prefix + "-position-" + this.options.position + " " + prefix + "-display-" + this.options.display;
-       },
-
-       _getPanelClasses: function() {
-               var panelClasses = this.options.classes.panel +
-                       " " + this._getPosDisplayClasses( this.options.classes.panel ) +
-                       " " + this.options.classes.panelClosed;
-
-               if ( this.options.theme ) {
-                       panelClasses += " ui-body-" + this.options.theme;
-               }
-               if ( !!this.options.positionFixed ) {
-                       panelClasses += " " + this.options.classes.panelFixed;
-               }
-               return panelClasses;
-       },
-
-       _addPanelClasses: function() {
-               this.element.addClass( this._getPanelClasses() );
-       },
-
-       _bindCloseEvents: function() {
-               var self = this;
-               
-               self._closeLink.on( "click.panel" , function( e ) {
-                       e.preventDefault();
-                       self.close();
-                       return false;
-               });
-               self.element.on( "click.panel" , "a:jqmData(ajax='false')", function( e ) {
-                       self.close();
-               });             
-       },
-
-       _positionPanel: function() {
-               var self = this,
-                       panelInnerHeight = self._panelInner.outerHeight(),
-                       expand = panelInnerHeight > $.mobile.getScreenHeight();
-
-               if ( expand || !self.options.positionFixed ) {
-                       if ( expand ) {
-                               self._unfixPanel();
-                               $.mobile.resetActivePageHeight( panelInnerHeight );
-                       }
-                       self._scrollIntoView( panelInnerHeight );
-               } else {
-                       self._fixPanel();
-               }
-       },
-
-       _scrollIntoView: function( panelInnerHeight ) {
-               if ( panelInnerHeight < $( window ).scrollTop() ) {
-                       window.scrollTo( 0, 0 );
-               }       
-       },
-
-       _bindFixListener: function() {
-               this._on( $( window ), { "throttledresize": "_positionPanel" });
-       },
-
-       _unbindFixListener: function() {
-               this._off( $( window ), "throttledresize" );
-       },
-
-       _unfixPanel: function() {
-               if ( !!this.options.positionFixed && $.support.fixedPosition ) {
-                       this.element.removeClass( this.options.classes.panelFixed );
-               }
-       },
-
-       _fixPanel: function() {
-               if ( !!this.options.positionFixed && $.support.fixedPosition ) {
-                       this.element.addClass( this.options.classes.panelFixed );
-               }
-       },
-       
-       _bindUpdateLayout: function() {
-               var self = this;
-               
-               self.element.on( "updatelayout", function( e ) {
-                       if ( self._open ) {
-                               self._positionPanel();
-                       }
-               });
-       },
-
-       _bindLinkListeners: function() {
-               var self = this;
-
-               self._page.on( "click.panel" , "a", function( e ) {
-                       if ( this.href.split( "#" )[ 1 ] === self._panelID && self._panelID !== undefined ) {
-                               e.preventDefault();
-                               var $link = $( this );
-                               if ( ! $link.hasClass( "ui-link" ) ) {
-                                       $link.addClass( $.mobile.activeBtnClass );
-                                       self.element.one( "panelopen panelclose", function() {
-                                               $link.removeClass( $.mobile.activeBtnClass );
-                                       });
-                               }
-                               self.toggle();
-                               return false;
-                       }
-               });
-       },
-       
-       _bindSwipeEvents: function() {
-               var self = this,
-                       area = self._modal ? self.element.add( self._modal ) : self.element;
-               
-               // on swipe, close the panel
-               if( !!self.options.swipeClose ) {
-                       if ( self.options.position === "left" ) {
-                               area.on( "swipeleft.panel", function( e ) {
-                                       self.close();
-                               });
-                       } else {
-                               area.on( "swiperight.panel", function( e ) {
-                                       self.close();
-                               });
-                       }
-               }
-       },
-
-       _bindPageEvents: function() {
-               var self = this;
-                       
-               self._page
-                       // Close the panel if another panel on the page opens
-                       .on( "panelbeforeopen", function( e ) {
-                               if ( self._open && e.target !== self.element[ 0 ] ) {
-                                       self.close();
-                               }
-                       })
-                       // clean up open panels after page hide
-                       .on( "pagehide", function( e ) {
-                               if ( self._open ) {
-                                       self.close( true );
-                               }
-                       })
-                       // on escape, close? might need to have a target check too...
-                       .on( "keyup.panel", function( e ) {
-                               if ( e.keyCode === 27 && self._open ) {
-                                       self.close();
-                               }
-                       });
-       },
-
-       // state storage of open or closed
-       _open: false,
-
-       _contentWrapOpenClasses: null,
-       _fixedToolbarOpenClasses: null,
-       _modalOpenClasses: null,
-
-       open: function( immediate ) {
-               if ( !this._open ) {
-                       var self = this,
-                               o = self.options,
-                               _openPanel = function() {
-                                       self._page.off( "panelclose" );
-                                       self._page.jqmData( "panel", "open" );
-                                       
-                                       if ( !immediate && $.support.cssTransform3d && !!o.animate ) {
-                                               self.element.add( self._wrapper ).on( self._transitionEndEvents, complete );
-                                       } else {
-                                               setTimeout( complete, 0 );
-                                       }
-                                       
-                                       if ( self.options.theme && self.options.display !== "overlay" ) {
-                                               self._page
-                                                       .removeClass( self._pageTheme )
-                                                       .addClass( "ui-body-" + self.options.theme );
-                                       }
-                                       
-                                       self.element.removeClass( o.classes.panelClosed ).addClass( o.classes.panelOpen );
-                                       
-                                       self._positionPanel();
-                                       
-                                       // Fix for IE7 min-height bug
-                                       if ( self.options.theme && self.options.display !== "overlay" ) {
-                                               self._wrapper.css( "min-height", self._page.css( "min-height" ) );
-                                       }
-                                       
-                                       self._contentWrapOpenClasses = self._getPosDisplayClasses( o.classes.contentWrap );
-                                       self._wrapper
-                                               .removeClass( o.classes.contentWrapClosed )
-                                               .addClass( self._contentWrapOpenClasses + " " + o.classes.contentWrapOpen );
-                                               
-                                       self._fixedToolbarOpenClasses = self._getPosDisplayClasses( o.classes.contentFixedToolbar );
-                                       self._fixedToolbar
-                                               .removeClass( o.classes.contentFixedToolbarClosed )
-                                               .addClass( self._fixedToolbarOpenClasses + " " + o.classes.contentFixedToolbarOpen );
-                                               
-                                       self._modalOpenClasses = self._getPosDisplayClasses( o.classes.modal ) + " " + o.classes.modalOpen;
-                                       if ( self._modal ) {
-                                               self._modal.addClass( self._modalOpenClasses );
-                                       }
-                               },
-                               complete = function() {
-                                       self.element.add( self._wrapper ).off( self._transitionEndEvents, complete );
-
-                                       self._page.addClass( o.classes.pagePanelOpen );
-                                       
-                                       self._bindFixListener();
-                                       
-                                       self._trigger( "open" );
-                               };
-
-                       if ( this.element.closest( ".ui-page-active" ).length < 0 ) {
-                               immediate = true;
-                       }
-                       
-                       self._trigger( "beforeopen" );
-                       
-                       if ( self._page.jqmData('panel') === "open" ) {
-                               self._page.on( "panelclose", function() {
-                                       _openPanel();
-                               });
-                       } else {
-                               _openPanel();
-                       }
-                       
-                       self._open = true;
-               }
-       },
-
-       close: function( immediate ) {
-               if ( this._open ) {
-                       var o = this.options,
-                               self = this,
-                               _closePanel = function() {
-                                       if ( !immediate && $.support.cssTransform3d && !!o.animate ) {
-                                               self.element.add( self._wrapper ).on( self._transitionEndEvents, complete );
-                                       } else {
-                                               setTimeout( complete, 0 );
-                                       }
-                                       
-                                       self._page.removeClass( o.classes.pagePanelOpen );
-                                       self.element.removeClass( o.classes.panelOpen );
-                                       self._wrapper.removeClass( o.classes.contentWrapOpen );
-                                       self._fixedToolbar.removeClass( o.classes.contentFixedToolbarOpen );
-                                       
-                                       if ( self._modal ) {
-                                               self._modal.removeClass( self._modalOpenClasses );
-                                       }
-                               },
-                               complete = function() {
-                                       if ( self.options.theme && self.options.display !== "overlay" ) {
-                                               self._page.removeClass( "ui-body-" + self.options.theme ).addClass( self._pageTheme );
-                                               // reset fix for IE7 min-height bug
-                                               self._wrapper.css( "min-height", "" );
-                                       }
-                                       self.element.add( self._wrapper ).off( self._transitionEndEvents, complete );
-                                       self.element.addClass( o.classes.panelClosed );
-                                       
-                                       self._wrapper
-                                               .removeClass( self._contentWrapOpenClasses )
-                                               .addClass( o.classes.contentWrapClosed );
-                                               
-                                       self._fixedToolbar
-                                               .removeClass( self._fixedToolbarOpenClasses )
-                                               .addClass( o.classes.contentFixedToolbarClosed );
-                                               
-                                       self._fixPanel();
-                                       self._unbindFixListener();
-                                       $.mobile.resetActivePageHeight();
-                                       
-                                       self._page.jqmRemoveData( "panel" );
-                                       self._trigger( "close" );
-                               };
-                               
-                       if ( this.element.closest( ".ui-page-active" ).length < 0 ) {
-                               immediate = true;
-                       }
-                       self._trigger( "beforeclose" );
-
-                       _closePanel();
-
-                       self._open = false;
-               }
-       },
-       
-       toggle: function( options ) {
-               this[ this._open ? "close" : "open" ]();
-       },
-
-       _transitionEndEvents: "webkitTransitionEnd oTransitionEnd otransitionend transitionend msTransitionEnd",
-
-       _destroy: function() {
-               var classes = this.options.classes,
-                       theme = this.options.theme,
-                       hasOtherSiblingPanels = this.element.siblings( "." + classes.panel ).length;
-
-               // create
-               if ( !hasOtherSiblingPanels ) {
-                       this._wrapper.children().unwrap();
-                       this._page.find( "a" ).unbind( "panelopen panelclose" );
-                       this._page.removeClass( classes.pagePanel );
-                       if ( this._open ) {
-                               this._page.jqmRemoveData( "panel" );
-                               this._page.removeClass( classes.pagePanelOpen );
-                               if ( theme ) {
-                                       this._page.removeClass( "ui-body-" + theme ).addClass( this._pageTheme );
-                               }
-                               $.mobile.resetActivePageHeight();
-                       }
-               } else if ( this._open ) {
-                       this._wrapper.removeClass( classes.contentWrapOpen );
-                       this._fixedToolbar.removeClass( classes.contentFixedToolbarOpen );
-                       this._page.jqmRemoveData( "panel" );
-                       this._page.removeClass( classes.pagePanelOpen );
-                       if ( theme ) {
-                               this._page.removeClass( "ui-body-" + theme ).addClass( this._pageTheme );
-                       }
-               }
-               
-               this._panelInner.children().unwrap();
-
-               this.element.removeClass( [ this._getPanelClasses(), classes.panelAnimate ].join( " " ) )
-                       .off( "swipeleft.panel swiperight.panel" )
-                       .off( "panelbeforeopen" )
-                       .off( "panelhide" )
-                       .off( "keyup.panel" )
-                       .off( "updatelayout" );
-
-               this._closeLink.off( "click.panel" );
-
-               if ( this._modal ) {
-                       this._modal.remove();
-               }
-
-               // open and close
-               this.element.off( this._transitionEndEvents )
-                       .removeClass( [ classes.panelUnfixed, classes.panelClosed, classes.panelOpen ].join( " " ) );
-       }
-});
-
-//auto self-init widgets
-$( document ).bind( "pagecreate create", function( e ) {
-       $.mobile.panel.prototype.enhanceWithin( e.target );
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-$.widget( "mobile.table", $.mobile.widget, {
-
-               options: {
-                       classes: {
-                               table: "ui-table"
-                       },
-                       initSelector: ":jqmData(role='table')"
-               },
-
-               _create: function() {
-                       var self = this;
-                       self.refresh( true );
-               },
-
-               refresh: function (create) {
-                       var self = this,
-                               trs = this.element.find( "thead tr" );
-
-                       if ( create ) {
-                               this.element.addClass( this.options.classes.table );
-                       }
-
-                       // Expose headers and allHeaders properties on the widget
-                       // headers references the THs within the first TR in the table
-                       self.headers = this.element.find( "tr:eq(0)" ).children();
-
-                       // allHeaders references headers, plus all THs in the thead, which may include several rows, or not
-                       self.allHeaders = self.headers.add( trs.children() );
-
-                       trs.each(function(){
-
-                               var coltally = 0;
-
-                               $( this ).children().each(function( i ){
-
-                                       var span = parseInt( $( this ).attr( "colspan" ), 10 ),
-                                               sel = ":nth-child(" + ( coltally + 1 ) + ")";
-                                       $( this )
-                                               .jqmData( "colstart", coltally + 1 );
-
-                                       if( span ){
-                                               for( var j = 0; j < span - 1; j++ ){
-                                                       coltally++;
-                                                       sel += ", :nth-child(" + ( coltally + 1 ) + ")";
-                                               }
-                                       }
-
-                                       if ( create === undefined ) {
-                                               $(this).jqmData("cells", "");
-                                       }
-                                       // Store "cells" data on header as a reference to all cells in the same column as this TH
-                                       $( this )
-                                               .jqmData( "cells", self.element.find( "tr" ).not( trs.eq(0) ).not( this ).children( sel ) );
-
-                                       coltally++;
-
-                               });
-
-                       });
-
-                       // update table modes
-                       if ( create === undefined ) {
-                               this.element.trigger( 'refresh' );
-                       }
-       }
-
-});
-
-//auto self-init widgets
-$.mobile.document.bind( "pagecreate create", function( e ) {
-       $.mobile.table.prototype.enhanceWithin( e.target );
-});
-
-})( jQuery );
-
-
-(function( $, undefined ) {
-
-$.mobile.table.prototype.options.mode = "columntoggle";
-
-$.mobile.table.prototype.options.columnBtnTheme = null;
-
-$.mobile.table.prototype.options.columnPopupTheme = null;
-
-$.mobile.table.prototype.options.columnBtnText = "Columns...";
-
-$.mobile.table.prototype.options.classes = $.extend(
-       $.mobile.table.prototype.options.classes,
-       {
-               popup: "ui-table-columntoggle-popup",
-               columnBtn: "ui-table-columntoggle-btn",
-               priorityPrefix: "ui-table-priority-",
-               columnToggleTable: "ui-table-columntoggle"
-       }
-);
-
-$.mobile.document.delegate( ":jqmData(role='table')", "tablecreate refresh", function( e ) {
-       
-       var $table = $( this ),
-               self = $table.data( "mobile-table" ),
-               event = e.type,
-               o = self.options,
-               ns = $.mobile.ns,
-               id = ( $table.attr( "id" ) || o.classes.popup ) + "-popup", /* TODO BETTER FALLBACK ID HERE */
-               $menuButton,
-               $popup,
-               $menu,
-               $switchboard;
-
-       if ( o.mode !== "columntoggle" ) {
-               return;
-       }
-
-       if ( event !== "refresh" ) {
-               self.element.addClass( o.classes.columnToggleTable );
-       
-               $menuButton = $( "<a href='#" + id + "' class='" + o.classes.columnBtn + "' data-" + ns + "rel='popup' data-" + ns + "mini='true'>" + o.columnBtnText + "</a>" ),
-               $popup = $( "<div data-" + ns + "role='popup' data-" + ns + "role='fieldcontain' class='" + o.classes.popup + "' id='" + id + "'></div>"),
-               $menu = $("<fieldset data-" + ns + "role='controlgroup'></fieldset>");
-       }
-       
-       // create the hide/show toggles
-       self.headers.not( "td" ).each(function( i ) {
-
-               var priority = $( this ).jqmData( "priority" ),
-                       $cells = $( this ).add( $( this ).jqmData( "cells" ) );
-
-               if ( priority ) {
-
-                       $cells.addClass( o.classes.priorityPrefix + priority );
-
-                       if ( event !== "refresh" ) {
-                               $("<label><input type='checkbox' checked />" + $( this ).text() + "</label>" )
-                                       .appendTo( $menu )
-                                       .children( 0 )
-                                       .jqmData( "cells", $cells )
-                                       .checkboxradio({
-                                               theme: o.columnPopupTheme
-                                       });
-                       } else {
-                               $( '#' + id + ' fieldset div:eq(' + i +')').find('input').jqmData( 'cells', $cells );
-                       }
-               }
-       });
-       
-       if ( event !== "refresh" ) {
-               $menu.appendTo( $popup );
-       }
-
-       // bind change event listeners to inputs - TODO: move to a private method?
-       if ( $menu === undefined ) {
-               $switchboard = $('#' + id + ' fieldset');
-       } else {
-               $switchboard = $menu;
-       }
-
-       if ( event !== "refresh" ) {
-               $switchboard.on( "change", "input", function( e ){
-                       if( this.checked ){
-                               $( this ).jqmData( "cells" ).removeClass( "ui-table-cell-hidden" ).addClass( "ui-table-cell-visible" );
-                       } else {
-                               $( this ).jqmData( "cells" ).removeClass( "ui-table-cell-visible" ).addClass( "ui-table-cell-hidden" );
-                       }
-               });
-
-               $menuButton
-                       .insertBefore( $table )
-                       .buttonMarkup({
-                               theme: o.columnBtnTheme
-                       });
-
-               $popup
-                       .insertBefore( $table )
-                       .popup();
-       }
-
-       // refresh method
-       self.update = function(){
-               $switchboard.find( "input" ).each( function(){
-                       if (this.checked) {
-                               this.checked = $( this ).jqmData( "cells" ).eq(0).css( "display" ) === "table-cell";
-                               if (event === "refresh") {
-                                       $( this ).jqmData( "cells" ).addClass('ui-table-cell-visible');
-                               }
-                       } else {
-                               $( this ).jqmData( "cells" ).addClass('ui-table-cell-hidden');
-                       }
-                       $( this ).checkboxradio( "refresh" );
-               });
-       };
-
-       $.mobile.window.on( "throttledresize", self.update );
-
-       self.update();
-
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-$.mobile.table.prototype.options.mode = "reflow";
-
-$.mobile.table.prototype.options.classes = $.extend(
-       $.mobile.table.prototype.options.classes,
-       {
-               reflowTable: "ui-table-reflow",
-               cellLabels: "ui-table-cell-label"
-       }
-);
-
-$.mobile.document.delegate( ":jqmData(role='table')", "tablecreate refresh", function( e ) {
-
-       var $table = $( this ),
-               event = e.type,
-               self = $table.data( "mobile-table" ),
-               o = self.options;
-
-       // If it's not reflow mode, return here.
-       if( o.mode !== "reflow" ){
-               return;
-       }
-
-       if ( event !== "refresh" ) {
-               self.element.addClass( o.classes.reflowTable );
-       }
-
-       // get headers in reverse order so that top-level headers are appended last
-       var reverseHeaders =  $( self.allHeaders.get().reverse() );
-
-       // create the hide/show toggles
-       reverseHeaders.each(function( i ){
-               var $cells = $( this ).jqmData( "cells" ),
-                       colstart = $( this ).jqmData( "colstart" ),
-                       hierarchyClass = $cells.not( this ).filter( "thead th" ).length && " ui-table-cell-label-top",
-                       text = $(this).text();
-
-                       if( text !== ""  ){
-
-                               if( hierarchyClass ){
-                                       var iteration = parseInt( $( this ).attr( "colspan" ), 10 ),
-                                               filter = "";
-
-                                       if( iteration ){
-                                               filter = "td:nth-child("+ iteration +"n + " + ( colstart ) +")";
-                                       }
-                                       $cells.filter( filter ).prepend( "<b class='" + o.classes.cellLabels + hierarchyClass + "'>" + text + "</b>"  );
-                               }
-                               else {
-                                       $cells.prepend( "<b class='" + o.classes.cellLabels + "'>" + text + "</b>"  );
-                               }
-
-                       }
-       });
-
-});
-
-})( jQuery );
-
-(function( $, window ) {
-
-       $.mobile.iosorientationfixEnabled = true;
-
-       // This fix addresses an iOS bug, so return early if the UA claims it's something else.
-       var ua = navigator.userAgent;
-       if( !( /iPhone|iPad|iPod/.test( navigator.platform ) && /OS [1-5]_[0-9_]* like Mac OS X/i.test( ua ) && ua.indexOf( "AppleWebKit" ) > -1 ) ){
-               $.mobile.iosorientationfixEnabled = false;
-               return;
-       }
-
-       var zoom = $.mobile.zoom,
-               evt, x, y, z, aig;
-
-       function checkTilt( e ) {
-               evt = e.originalEvent;
-               aig = evt.accelerationIncludingGravity;
-
-               x = Math.abs( aig.x );
-               y = Math.abs( aig.y );
-               z = Math.abs( aig.z );
-
-               // If portrait orientation and in one of the danger zones
-               if ( !window.orientation && ( x > 7 || ( ( z > 6 && y < 8 || z < 8 && y > 6 ) && x > 5 ) ) ) {
-                               if ( zoom.enabled ) {
-                                       zoom.disable();
-                               }
-               }       else if ( !zoom.enabled ) {
-                               zoom.enable();
-               }
-       }
-
-       $.mobile.document.on( "mobileinit", function(){
-               if( $.mobile.iosorientationfixEnabled ){
-                       $.mobile.window
-                               .bind( "orientationchange.iosorientationfix", zoom.enable )
-                               .bind( "devicemotion.iosorientationfix", checkTilt );
-               }
-       });
-
-}( jQuery, this ));
-
-(function( $, window, undefined ) {
-       var     $html = $( "html" ),
-                       $head = $( "head" ),
-                       $window = $.mobile.window;
-
-       //remove initial build class (only present on first pageshow)
-       function hideRenderingClass() {
-               $html.removeClass( "ui-mobile-rendering" );
-       }
-
-       // trigger mobileinit event - useful hook for configuring $.mobile settings before they're used
-       $( window.document ).trigger( "mobileinit" );
-
-       // support conditions
-       // if device support condition(s) aren't met, leave things as they are -> a basic, usable experience,
-       // otherwise, proceed with the enhancements
-       if ( !$.mobile.gradeA() ) {
-               return;
-       }
-
-       // override ajaxEnabled on platforms that have known conflicts with hash history updates
-       // or generally work better browsing in regular http for full page refreshes (BB5, Opera Mini)
-       if ( $.mobile.ajaxBlacklist ) {
-               $.mobile.ajaxEnabled = false;
-       }
-
-       // Add mobile, initial load "rendering" classes to docEl
-       $html.addClass( "ui-mobile ui-mobile-rendering" );
-
-       // This is a fallback. If anything goes wrong (JS errors, etc), or events don't fire,
-       // this ensures the rendering class is removed after 5 seconds, so content is visible and accessible
-       setTimeout( hideRenderingClass, 5000 );
-
-       $.extend( $.mobile, {
-               // find and enhance the pages in the dom and transition to the first page.
-               initializePage: function() {
-                       // find present pages
-                       var path = $.mobile.path,
-                               $pages = $( ":jqmData(role='page'), :jqmData(role='dialog')" ),
-                               hash = path.stripHash( path.stripQueryParams(path.parseLocation().hash) ),
-                               hashPage = document.getElementById( hash );
-
-                       // if no pages are found, create one with body's inner html
-                       if ( !$pages.length ) {
-                               $pages = $( "body" ).wrapInner( "<div data-" + $.mobile.ns + "role='page'></div>" ).children( 0 );
-                       }
-
-                       // add dialogs, set data-url attrs
-                       $pages.each(function() {
-                               var $this = $( this );
-
-                               // unless the data url is already set set it to the pathname
-                               if ( !$this.jqmData( "url" ) ) {
-                                       $this.attr( "data-" + $.mobile.ns + "url", $this.attr( "id" ) || location.pathname + location.search );
-                               }
-                       });
-
-                       // define first page in dom case one backs out to the directory root (not always the first page visited, but defined as fallback)
-                       $.mobile.firstPage = $pages.first();
-
-                       // define page container
-                       $.mobile.pageContainer = $.mobile.firstPage.parent().addClass( "ui-mobile-viewport" );
-
-                       // alert listeners that the pagecontainer has been determined for binding
-                       // to events triggered on it
-                       $window.trigger( "pagecontainercreate" );
-
-                       // cue page loading message
-                       $.mobile.showPageLoadingMsg();
-
-                       //remove initial build class (only present on first pageshow)
-                       hideRenderingClass();
-
-                       // if hashchange listening is disabled, there's no hash deeplink,
-                       // the hash is not valid (contains more than one # or does not start with #)
-                       // or there is no page with that hash, change to the first page in the DOM
-                       // Remember, however, that the hash can also be a path!
-                       if ( ! ( $.mobile.hashListeningEnabled &&
-                               $.mobile.path.isHashValid( location.hash ) &&
-                               ( $( hashPage ).is( ':jqmData(role="page")' ) ||
-                                       $.mobile.path.isPath( hash ) ||
-                                       hash === $.mobile.dialogHashKey ) ) ) {
-
-                               // Store the initial destination
-                               if ( $.mobile.path.isHashValid( location.hash ) ) {
-                                       $.mobile.urlHistory.initialDst = hash.replace( "#", "" );
-                               }
-
-                               // make sure to set initial popstate state if it exists
-                               // so that navigation back to the initial page works properly
-                               if( $.event.special.navigate.isPushStateEnabled() ) {
-                                       $.mobile.navigate.navigator.squash( path.parseLocation().href );
-                               }
-
-                               $.mobile.changePage( $.mobile.firstPage, {
-                                       transition: "none",
-                                       reverse: true,
-                                       changeHash: false,
-                                       fromHashChange: true
-                               });
-                       } else {
-                               // trigger hashchange or navigate to squash and record the correct
-                               // history entry for an initial hash path
-                               if( !$.event.special.navigate.isPushStateEnabled() ) {
-                                       $window.trigger( "hashchange", [true] );
-                               } else {
-                                       // TODO figure out how to simplify this interaction with the initial history entry
-                                       // at the bottom js/navigate/navigate.js
-                                       $.mobile.navigate.history.stack = [];
-                                       $.mobile.navigate( $.mobile.path.isPath( location.hash ) ? location.hash : location.href );
-                               }
-                       }
-               }
-       });
-
-       // initialize events now, after mobileinit has occurred
-       $.mobile.navreadyDeferred.resolve();
-
-       // check which scrollTop value should be used by scrolling to 1 immediately at domready
-       // then check what the scroll top is. Android will report 0... others 1
-       // note that this initial scroll won't hide the address bar. It's just for the check.
-       $(function() {
-               window.scrollTo( 0, 1 );
-
-               // if defaultHomeScroll hasn't been set yet, see if scrollTop is 1
-               // it should be 1 in most browsers, but android treats 1 as 0 (for hiding addr bar)
-               // so if it's 1, use 0 from now on
-               $.mobile.defaultHomeScroll = ( !$.support.scrollTop || $.mobile.window.scrollTop() === 1 ) ? 0 : 1;
-
-               //dom-ready inits
-               if ( $.mobile.autoInitializePage ) {
-                       $.mobile.initializePage();
-               }
-
-               // window load event
-               // hide iOS browser chrome on load
-               $window.load( $.mobile.silentScroll );
-
-               if ( !$.support.cssPointerEvents ) {
-                       // IE and Opera don't support CSS pointer-events: none that we use to disable link-based buttons
-                       // by adding the 'ui-disabled' class to them. Using a JavaScript workaround for those browser.
-                       // https://github.com/jquery/jquery-mobile/issues/3558
-
-                       $.mobile.document.delegate( ".ui-disabled", "vclick",
-                               function( e ) {
-                                       e.preventDefault();
-                                       e.stopImmediatePropagation();
-                               }
-                       );
-               }
-       });
-}( jQuery, this ));
-
-
-}));
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/main.js b/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/main.js
deleted file mode 100644 (file)
index 8b6595c..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-
-(function() {
-
-    function connected() {
-        console.log('Settings daemon connected');
-    }
-
-    function disconnected(e) {
-        console.log('Settings daemon disconnected...');
-        if (e == null) {
-            showMsg('Error', 'Cannot connect to settings daemon');
-        } else {
-            showMsg('Error', e);
-        }
-    }
-
-    function init() {
-        console.log('Settings started...');
-        $('#quit').on('click', function() {
-            console.log('Settings exiting...');
-            tizen.application.getCurrentApplication().exit();
-        });
-
-        wsAPI.connect('ws://localhost:16000/', 'http-only', connected, disconnected);
-
-        try {
-            /* Settings Panel */
-            $('#main').on('pageshow', function(event, data) {
-                /* TODO: unsubscribe events if neccessary */
-                if (data.prevPage.attr('id') === 'page_wifi') {
-                    console.log('Wi-Fi settings exited');
-                    settings.wifi.unsubscribeEvents(wifiEventReceived);
-                } else if (data.prevPage.attr('id') === 'page_bluetooth') {
-                    console.log('Bluetooth settings exited');
-                    settings.wifi.unsubscribeEvents(bluetoothEventReceived);
-                } else if (data.prevPage.attr('id') === 'page_datetime') {
-                    console.log('Date and Time settings exited');
-                }
-            });
-
-            /* Different sub panels */
-            wifiPanelInit();
-            bluetoothPanelInit();
-            datetimePanelInit();
-        } catch (e) {
-            showMsg('Error', 'Javascript Exception Caught: ' + e);
-        }
-    }
-
-    $(document).ready(function() {
-        init();
-    })
-})();
\ No newline at end of file
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/panel-bluetooth.js b/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/panel-bluetooth.js
deleted file mode 100644 (file)
index 769abab..0000000
+++ /dev/null
@@ -1,417 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-
-function bluetoothPanelInit() {
-
-    /* Bluetooth Settings Panel */
-    $('#page_bluetooth').on('pageshow', function(event, data) {
-        if (data.prevPage.attr('id') === 'page_bluetooth_detail') return;
-
-        settings.bluetooth.subscribeEvents(bluetoothEventReceived);
-        var adapter = settings.bluetooth.getDefaultAdapter();
-        if (adapter === null) {
-            showMsg('Error', 'Bluetooth adapter not found');
-            return;
-        }
-        console.log('Default BT adapter: ', adapter.name);
-
-        if (adapter.name != undefined) {
-            $('#label_bluetooth_adapter').html(adapter.name);
-        } else {
-            $('#label_bluetooth_adapter').html('Bluetooth adapter not found');
-        }
-
-        if (adapter.powered) {
-            bluetoothToggleOn();
-            adapter.stopScanDevices(function() {
-                bluetoothStartScan(adapter);
-            }, null);
-        } else {
-            bluetoothToggleOff();
-        }
-    });
-
-    $('#toggle_bluetooth').change(function() {
-        var adapter = settings.bluetooth.getDefaultAdapter();
-        if (adapter === null) {
-            showMsg('Error', 'Bluetooth adapter not found');
-            bluetoothToggleOff();
-            return;
-        }
-
-        if ($('#toggle_bluetooth').val() === 'off') {
-            /* stop scan, then disable bluetooth */
-            adapter.stopScanDevices(function() {
-                /* success */
-                console.log('Bluetooth scan canceled');
-                $('#button_bluetooth_scan .ui-btn-text').text('Scan');
-                adapter.setPowered(false, function() {
-                    /* success */
-                    console.log('Power off adapter success, adapter is powered: ' + adapter.powered);
-                    bluetoothToggleOff();
-                }, function(e) {
-                    /* error */
-                    bluetoothToggleOn();
-                    showMsg('Error', 'Cannot turn off bluetooth adapter: ' + e);
-                });
-            }, function(e) {
-                /* error */
-                $('#toggle_bluetooth').val('on').slider('refresh');
-                showMsg('Error', 'Cannot cancel scan: ' + e);
-            });
-        } else {
-            adapter.setPowered(true, function() {
-                /* success */
-                console.log('Power on adapter success, adapter is powered: ' + adapter.powered);
-                bluetoothToggleOn();
-                bluetoothStartScan(adapter);
-            }, function(e) {
-                /* error */
-                bluetoothToggleOff();
-                showMsg('Error', 'Cannot turn on bluetooth adapter: ' + e);
-            });
-        }
-    });
-
-    $('#button_bluetooth_scan').on('click', function() {
-        var adapter = settings.bluetooth.getDefaultAdapter();
-        if (adapter === null) {
-            showMsg('Error', 'Bluetooth adapter not found');
-            return;
-        }
-        if ($('#button_bluetooth_scan').text() === 'Scan') {
-            bluetoothStartScan(adapter);
-        } else {
-            bluetoothStopScan(adapter);
-        }
-    });
-
-    /* Bluetooth device detail page */
-    $('#page_bluetooth_detail').on('pageshow', function(event, data) {
-        var device_id = localStorage.getItem('bluetooth_device_id');
-        if (device_id == undefined) return;
-        var device = $(jqId(device_id)).data('device-object');
-        bluetoothConstructDetailPanel(device);
-    });
-}
-
-function bluetoothEventReceived(event) {
-    if (event.type !== WS_EVENT_TYPE.BLUETOOTH) return;
-    if ($.mobile.activePage.attr('id') !== 'page_bluetooth' || $.mobile.activePage.attr('id') !== 'page_bluetooth_detail') {
-        return;
-    }
-
-    if (event.name === 'PropertyChanged') {
-        bluetoothHandlePropertyChanged(event.value);
-    } else {
-        console.log('Unsupported bluetooth event received: ' + event.name);
-    }
-}
-
-function bluetoothHandlePropertyChanged(property) {
-    if (property[0] === 'Powered') {
-        if (property[1] === true) {
-            bluetoothToggleOn();
-            adapter.stopScanDevices(function() {
-                bluetoothStartScan(adapter);
-            }, null);
-        } else {
-            bluetoothToggleOff();
-        }
-    }
-}
-
-function bluetoothClearAvailableList() {
-    $('#listview_device_available').html('');
-}
-
-function bluetoothStartScan(adapter) {
-    /* clear the device list with new scan */
-    bluetoothClearAvailableList();
-
-    adapter.startScanDevices({
-        /* success */
-        onstarted: function() {
-            console.log('Bluetooth scan started...');
-            $('#button_bluetooth_scan .ui-btn-text').text('Stop');
-        },
-        ondevicefound: function(device) {
-            console.log('Bluetoth device found - name: ' + device.name + ', address: ' + device.address + ', is paired: ' + device.paired + ', is connected: ' + device.connected);
-            bluetoothUpdateDevice(device);
-        },
-        ondevicedisappeared: function(address) {
-            if ($(jqId(address)).length) {
-                bluetoothRemoveFromAvailableList(address);
-            }
-        },
-        onfinished: function(devices) {
-            $('#button_bluetooth_scan .ui-btn-text').text('Scan');
-            for (var i = 0; i < devices.length; i++) {
-                if (!$(jqId(devices[i].address)).length) {
-                    bluetoothUpdateDevice(devices[i]);
-                }
-            }
-        }
-    }, function(e) {
-        /* error */
-        showMsg('Error', 'Cannot scan: ' + e);
-    });
-}
-
-function bluetoothRefreshList() {
-    $('#listview_device_paired').listview('refresh');
-    $('#listview_device_available').listview('refresh');
-}
-
-function bluetoothStopScan(adapter) {
-    adapter.stopScanDevices(function() {
-        /* success */
-        console.log('Bluetooth scan canceled');
-        $('#button_bluetooth_scan .ui-btn-text').text('Scan');
-    }, function(e) {
-        /* error */
-        showMsg('Error', 'Cannot cancel scan: ' + e);
-    });
-}
-
-function bluetoothAppendToPairedList(device) {
-    if ($('#listview_device_paired').find(jqId(device.address)).length != 0) return;
-
-    var parent = '#listview_device_paired';
-    bluetoothConstructDeviceElement(parent, device);
-    bluetoothUpdateDeviceButton(device);
-    bluetoothRefreshList();
-}
-
-function bluetoothRemoveFromPairedList(device_addr) {
-    var removeThis = $('#listview_device_paired li').filter(function() {
-        return $(this).find(jqId(device_addr)).length === 1;
-    });
-
-    if (removeThis.length !== 0) {
-        removeThis.remove();
-        bluetoothRefreshList();
-    }
-}
-
-function bluetoothAppendToAvailableList(device) {
-    if ($('#listview_device_available').find(jqId(device.address)).length != 0) return;
-
-    var parent = '#listview_device_available';
-    bluetoothConstructDeviceElement(parent, device);
-    bluetoothUpdateDeviceButton(device);
-    bluetoothRefreshList();
-}
-
-function bluetoothRemoveFromAvailableList(device_addr) {
-    var removeThis = $('#listview_device_available li').filter(function() {
-        return $(this).find(jqId(device_addr)).length === 1;
-    });
-
-    if (removeThis.length !== 0) {
-        removeThis.remove();
-        bluetoothRefreshList();
-    }
-}
-
-function bluetoothConstructDeviceElement(parent, device) {
-    var html = '<li data-icon="false"><a href="#" id="' + jqId(device.address).replace('#', '') + '">';
-    html += '<img src="images/bluetooth.png" class="device-icon ui-li-icon"></img>';
-    html += '<div class="device-name">' + device.name + '</div>';
-    html += '<div class="device-address">' + device.address + '</div>';
-    html += '<div class="device-status"></div>';
-    html += '<div data-role="button" class="device-action-button ui-li-aside" data-inline="true"></div>';
-    html += '</a></li>';
-    $(parent).append(html).trigger('create');
-
-    /* store device object in the element so we can reference it later */
-    $(jqId(device.address)).data('device-object', device);
-
-    $(jqId(device.address)).on('click', function() {
-        localStorage.setItem('bluetooth_device_id', device.address);
-        $.mobile.changePage('#page_bluetooth_detail');
-    });
-
-    $(jqId(device.address)).find('div.device-action-button').on('click', function(e) {
-        var parent = $(this).parent().attr('id');
-
-        /*
-         * prevent the click event to propagate up
-         */
-        e.stopImmediatePropagation();
-        e.preventDefault();
-
-        var adapter = settings.bluetooth.getDefaultAdapter();
-        if (adapter === null) return;
-
-        /* retrieve the device object from element */
-        var device = $(jqId(parent)).data('device-object');
-        if (device == undefined) {
-            console.error('Bluetooth device not found');
-            return;
-        }
-
-        if (!device.paired) {
-            createPopupDialog(false, false, 'Pair with', device.name, 'Pair', 'Cancel', function() {
-                console.log('Bluetooth pair with device: ' + device.address);
-                showSpinner(false, 'Pairing...');
-                adapter.pairDevice(device.address, function() {
-                    /* success */
-                    hideSpinner();
-                    device.paired = true;
-
-                    /* changing from unpaired to paried */
-                    bluetoothUpdateDevice(device);
-                }, function(e) {
-                    /* error */
-                    hideSpinner();
-                    showMsg('Error', 'Bluetooth pair failed: ' + e);
-                });
-            });
-        } else if (device.paired && !device.connected) {
-            console.log('Bluetooth connect with device: ' + device.address);
-            showMsg('Error', 'Not suppported');
-        } else if (device.connected) {
-            console.log('Bluetooth disconnect with device: ' + device.address);
-            showMsg('Error', 'Not suppported');
-        }
-    });
-}
-
-function bluetoothUpdateDevice(device) {
-    /* reposition device if it's paired or unpaired */
-    if (device.paired) {
-        bluetoothRemoveFromAvailableList(device.address);
-        bluetoothAppendToPairedList(device);
-    } else {
-        bluetoothRemoveFromPairedList(device.address);
-        bluetoothAppendToAvailableList(device);
-    }
-
-    /* update device button for allowed action */
-    bluetoothUpdateDeviceButton(device);
-
-    /* update device connection status */
-    bluetoothUpdateConnectionStatus(device);
-}
-
-function bluetoothUpdateDeviceButton(device) {
-    if (device.paired) {
-        if (device.connected) {
-            $(jqId(device.address)).find('div.device-action-button').find('span').text('Disconnect');
-        } else {
-            $(jqId(device.address)).find('div.device-action-button').find('span').text('Connect');
-        }
-    } else {
-        $(jqId(device.address)).find('div.device-action-button').find('span').text('Pair');
-    }
-}
-
-function bluetoothUpdateConnectionStatus(device) {
-    var status = 'unpaired';
-    if (device.paired) {
-        $(jqId(device.address)).addClass('device-paired');
-        if (device.connected) {
-            status = 'connected';
-            $(jqId(device.address)).addClass('device-connected');
-        } else {
-            status = 'disconnected';
-            $(jqId(device.address)).removeClass('device-connected');
-        }
-    } else {
-        $(jqId(device.address)).removeClass('device-paired');
-        $(jqId(device.address)).removeClass('device-connected');
-    }
-
-    bluetoothUpdateConnectionStatusText(device, status);
-}
-
-function bluetoothUpdateConnectionStatusText(device, status) {
-    $(jqId(device.address)).find('div.device-status').text(status);
-}
-
-function bluetoothConstructDetailPanel(device) {
-    var status_paired = 'No';
-    var status_connected = 'No';
-
-    if (device == null) return;
-    if (device.paired) status_paired = 'Yes';
-    if (device.connected) status_connected = 'Yes';
-
-    $('#page_bluetooth_detail_content').html('');
-    var html = '<ul data-role="listview" id="listview_bluetooth_detail" data-inset="true" ' + 'class="device-list ui-listview">';
-    html += '<li id="bluetooth_detail_name"><h2>Device Name: ' + device.name + '</h2></li>';
-    html += '<li id="bluetooth_detail_address"><h2>Device Address: ' + device.address + '</h2></li>';
-    html += '<li id="bluetooth_detail_paired"><h2>Paired: ' + status_paired + '</h2></li>';
-    html += '<li id="bluetooth_detail_connected"><h2>Connected: ' + status_connected + '</h2></li>';
-    html += '</ul>';
-    $('#page_bluetooth_detail_content').append(html).trigger('create');
-
-    if (device.paired) {
-        html = '<div data-role="button" id="button_bluetooth_unpair">Unpair</div>';
-        $('#page_bluetooth_detail_content').append(html).trigger('create');
-
-        $('#button_bluetooth_unpair').on('click', function(e) {
-            console.log('Bluetooth unpair with device: ' + device.address);
-            var adapter = settings.bluetooth.getDefaultAdapter();
-            if (adapter === null) return;
-
-            createPopupDialog(false, false, 'Unpair with device', device.name, 'Unpair', 'Cancel', function() {
-                showSpinner(false, 'Unpairing...');
-                adapter.unpairDevice(device.address, function() {
-                    /* success */
-                    hideSpinner();
-                    device.paired = false;
-                    device.connected = false;
-                    $('#button_bluetooth_unpair').remove();
-
-                    /* changing from paired to unparied */
-                    bluetoothUpdateDevice(device);
-                    setTimeout(function() {
-                        $.mobile.changePage('#page_bluetooth');
-                    }, 1000);
-                }, function(e) {
-                    /* error */
-                    hideSpinner();
-                    showMsg('Error', 'Bluetooth unpair failed: ' + e);
-
-                    /* Something is wrong, remove from paired list */
-                    bluetoothRemoveFromPairedList(device.address);
-                });
-            });
-        });
-    }
-    $('#listview_bluetooth_detail').listview('refresh');
-}
-
-function bluetoothUpdateDetailPanel(device) {
-    var status_paired = 'No';
-    var status_connected = 'No';
-
-    if (device == null) return;
-    if (device.paired) status_paired = 'Yes';
-    if (device.connected) status_connected = 'Yes';
-    $('#bluetooth_detail_paired').text(connected);
-    $('#bluetooth_detail_connected').text(status_connected);
-    $('#listview_bluetooth_detail').listview('refresh');
-}
-
-function bluetoothToggleOn() {
-    setTimeout(function() {
-        $('#bluetooth_devices').show();
-        $('#toggle_bluetooth').val('on').slider('refresh');
-    }, 100);
-}
-
-function bluetoothToggleOff() {
-    setTimeout(function() {
-        $('#bluetooth_devices').hide();
-        $('#toggle_bluetooth').val('off').slider('refresh');
-    }, 100);
-}
\ No newline at end of file
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/panel-datetime.js b/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/panel-datetime.js
deleted file mode 100644 (file)
index 076b761..0000000
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-
-var clockTimer = null;
-var timeChanged = false;
-var dateChanged = false;
-var timezoneChanged = false;
-var automaticTime = false;
-var automaticTimezone = false;
-
-function datetimePanelInit() {
-
-    /* Display Settings Panel */
-    $('#page_datetime').on('pageshow', function() {
-        datetimePageReload();
-    });
-
-    $('#toggle_timeupdates').change(function() {
-        if ($('#toggle_timeupdates').val() === 'auto') {
-            settings.datetime.setTimeUpdates("auto", function() {
-                datetimePageReload();
-            }, function(e) {
-                timeUpdatesToggle('manual');
-                datetimePageReload();
-                showMsg('Error', 'Cannot set time updates to automatic: ' + e);
-            });
-        } else {
-            settings.datetime.setTimeUpdates("manual", function() {
-                datetimePageReload();
-            }, function(e) {
-                timeUpdatesToggle('auto');
-                datetimePageReload();
-                showMsg('Error', 'Cannot set time updates to manual: ' + e);
-            });
-        }
-    });
-
-    $('#input_time').on('change', function(event, data) {
-        console.log('input_time changed');
-        if (automaticTime) return;
-
-        var re = /^([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/;
-        if (this.value === '' || !this.value.match(re)) {
-            datetimeHideOption();
-            showMsg('Error', 'Invalid time format (hh:mm:ss): ' + this.value);
-            return;
-        }
-
-        timeChanged = true;
-        datetimeShowOption();
-    });
-
-    $('#input_date').on('change', function(event, data) {
-        console.log('input_date changed');
-        if (automaticTime) return;
-
-        var re = /^\d{4}-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])$/;
-        if (this.value === '' || !this.value.match(re)) {
-            datetimeHideOption();
-            showMsg('Error', 'Invalid date format (yyyy-mm-dd): ' + this.value);
-            return;
-        }
-
-        dateChanged = true;
-        datetimeShowOption();
-    });
-
-    $('#toggle_timezoneupdates').change(function() {
-        if ($('#toggle_timezoneupdates').val() === 'auto') {
-            settings.datetime.setTimezoneUpdates("auto", function() {
-                datetimePageReload();
-                automaticTimezone = true;
-            }, function(e) {
-                timezoneUpdatesToggle('manual');
-                datetimePageReload();
-                showMsg('Error', 'Cannot set timezone updates to automatic: ' + e);
-            });
-        } else {
-            settings.datetime.setTimezoneUpdates("manual", function() {
-                datetimePageReload();
-                automaticTimezone = false;
-            }, function(e) {
-                timezoneUpdatesToggle('auto');
-                datetimePageReload();
-                showMsg('Error', 'Cannot set time zone updates to manual: ' + e);
-            });
-        }
-    });
-
-    $('#select_timezone').on('change', function(event, data) {
-        console.log('select_timezone changed');
-        if (automaticTimezone) return;
-
-        /* ignore change due to getLocalTimezone() */
-        if (data === false) return;
-
-        timezoneChanged = true;
-        var timezone = this.value;
-        console.log('time zone show option');
-        datetimeShowOption();
-    });
-
-    $('#button_datetime_apply').on('click', function(event, data) {
-        if (timeChanged || dateChanged) {
-            timeChanged = false;
-            dateChanged = false;
-            updateSystemTime();
-        }
-
-        if (timezoneChanged) {
-            timezoneChanged = false;
-            updateSystemTimezone();
-        }
-
-        datetimeHideOption();
-    });
-
-    $('#button_datetime_cancel').on('click', function(event, data) {
-        datetimePageReload();
-    });
-
-    $('#page_datetime_button_back').on('click', function() {
-        datetimeStopTimer();
-    });
-}
-
-function datetimePageReload() {
-    var current = null;
-    timeChanged = false;
-    dateChanged = false;
-    timezoneChanged = false;
-
-    datetimeHideOption();
-
-    settings.datetime.isTimeAuto(function(isAuto) {
-        automaticTime = isAuto;
-        if (isAuto) {
-            timeUpdatesToggle('auto');
-        } else {
-            timeUpdatesToggle('manual');
-        }
-    }, function(e) {
-        showMsg('Error', e);
-    });
-
-    settings.datetime.isTimezoneAuto(function(isAuto) {
-        automaticTimezone = isAuto;
-        if (isAuto) {
-            timezoneUpdatesToggle('auto');
-        } else {
-            timezoneUpdatesToggle('manual');
-        }
-    }, function(e) {
-        showMsg('Error', e);
-    });
-
-    current = new Date();
-    console.log('Local datetime is ' + current.toISOString());
-
-    timeStr = datetimeGetStr(current.getHours()) + ':';
-    timeStr += datetimeGetStr(current.getMinutes()) + ':';
-    timeStr += datetimeGetStr(current.getSeconds());
-    $('#input_time').val(timeStr);
-
-    dateStr = datetimeGetStr(current.getFullYear()) + '-';
-    dateStr += datetimeGetStr(current.getMonth()) + '-';
-    dateStr += datetimeGetStr(current.getDate());
-    $('#input_date').val(dateStr);
-
-    datetimeStartTimer();
-
-    if (tizen.time) {
-        var alltimezones = tizen.time.getAvailableTimezones();
-        console.log('Local timezone: ' + tizen.time.getLocalTimezone());
-        if (alltimezones.length > 0) {
-            $('#select_timezone').empty();
-            for (var i = 0; i < alltimezones.length; i++) {
-                $('#select_timezone').append(new Option(alltimezones[i], alltimezones[i]));
-            }
-        }
-        $('#select_timezone').val(tizen.time.getLocalTimezone()).trigger('change', false);
-    }
-}
-
-function datetimeShowOption() {
-    $('#button_datetime_apply').show();
-    $('#button_datetime_cancel').show();
-}
-
-function datetimeHideOption() {
-    $('#button_datetime_apply').hide();
-    $('#button_datetime_cancel').hide();
-}
-
-function datetimeStartTimer() {
-    datetimeStopTimer();
-    clockTimer = setInterval(dateTimeUpdateClock, 1000);
-}
-
-function datetimeStopTimer() {
-    if (clockTimer) {
-        clearInterval(clockTimer);
-    }
-}
-
-function dateTimeUpdateClock() {
-    var current = new Date();
-
-    var timeStr = datetimeGetStr(current.getHours()) + ':';
-    timeStr += datetimeGetStr(current.getMinutes()) + ':';
-    timeStr += datetimeGetStr(current.getSeconds());
-
-    var dateStr = datetimeGetStr(current.getFullYear()) + '-';
-    dateStr += datetimeGetStr(current.getMonth()) + '-';
-    dateStr += datetimeGetStr(current.getDate());
-
-    if (!timeChanged && !$("#input_time").is(":focus")) {
-        $('#input_time').val(timeStr);
-    }
-
-    if (!dateChanged && !$("#input_date").is(":focus")) {
-        $('#input_date').val(dateStr);
-    }
-}
-
-function updateSystemTime() {
-    var time = $('#input_date').val() + ' ' + $('#input_time').val();
-
-    if (time.split(":").length - 1 == 1) {
-        /* this is a bug where seconds are not set after date picker is launched */
-        time += ':00';
-    }
-
-    /* settings daemon expects number of seconds since midnight Jan 1, 1970 */
-    var year = Number(time.split(" ")[0].split('-')[0]);
-    var month = Number(time.split(" ")[0].split('-')[1]);
-    var day = time.split(" ")[0].split('-')[2];
-    var hour = Number(time.split(" ")[1].split(':')[0]);
-    var minute = Number(time.split(" ")[1].split(':')[1]);
-    var second = Number(time.split(" ")[1].split(':')[2]);
-    var date = new Date(year, month, day, hour, minute, second, 0);
-    var epoch_time = date.getTime() / 1000;
-
-    settings.datetime.setTime(epoch_time, function() {
-        console.log('System time is set to: ' + date + ' or ' + epoch_time + ' seconds since 1/1/1970');
-        datetimePageReload();
-    }, function(e) {
-        showMsg('Error', 'Cannot set system time: ' + e);
-        datetimePageReload();
-    });
-}
-
-function updateSystemTimezone() {
-    var value = $('#select_timezone').val();
-    settings.datetime.setTimezone(value, function() {
-        console.log('System timezone is set to: ' + value);
-    }, function(e) {
-        showMsg('Error', 'Cannot set system timezone: ' + e);
-    });
-}
-
-function datetimeGetStr(value) {
-    if (0 < value && value < 10) {
-        return '0' + value;
-    } else {
-        return '' + value;
-    }
-}
-
-function timeUpdatesToggle(value) {
-    if (value !== 'auto' && value !== 'manual') return;
-
-    if (value === 'auto') {
-        $('#input_time').attr('readonly', true);
-        $('#input_date').attr('readonly', true);
-    } else {
-        $('#input_time').attr('readonly', false);
-        $('#input_date').attr('readonly', false);
-    }
-    setTimeout(function() {
-        $('#toggle_timeupdates').val(value).slider('refresh');
-    }, 100);
-}
-
-function timezoneUpdatesToggle(value) {
-    if (value !== 'auto' && value !== 'manual') return;
-
-    if (value === 'auto') {
-        $('#select_timezone').selectmenu('disable');
-    } else {
-        $('#select_timezone').selectmenu('enable');
-    }
-    setTimeout(function() {
-        $('#toggle_timezoneupdates').val(value).slider('refresh');
-    }, 100);
-}
\ No newline at end of file
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/panel-wifi.js b/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/panel-wifi.js
deleted file mode 100644 (file)
index ae4ccb4..0000000
+++ /dev/null
@@ -1,605 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-var wifiScanInProgress = false;
-
-function wifiPanelInit() {
-
-    /* WiFi Settings Panel */
-    $('#page_wifi').on('pageshow', function(event, data) {
-        if (data.prevPage.attr('id') === 'page_wifi_detail') return;
-
-        settings.wifi.subscribeEvents(wifiEventReceived);
-        var adapter = settings.wifi.getDefaultAdapter();
-        if (adapter === null) {
-            showMsg('Error', 'WiFi adapter not found');
-            return;
-        }
-
-        if (adapter.name != undefined) {
-            $('#label_wifi_adapter').html(adapter.name);
-        } else {
-            $('#label_wifi_adapter').html('WiFi adapter not found');
-        }
-
-        adapter.getPowered(function(is_powered) {
-            if (is_powered) {
-                wifiClearKnownList();
-                wifiClearAvailableList();
-                wifiToggleOn();
-                setTimeout(function() {
-                    wifiScan(adapter);
-                }, 1000);
-            } else {
-                wifiToggleOff();
-            }
-        }, function(e) {
-            showMsg('Error', 'Cannot get WiFi state: ' + e);
-        });
-    });
-
-    $('#toggle_wifi').change(function() {
-        if (wifiScanInProgress) return;
-
-        var adapter = settings.wifi.getDefaultAdapter();
-        if (adapter === null) {
-            showMsg('Error', 'WiFi adapter not found');
-            wifiToggleOff();
-            return;
-        }
-
-        if ($('#toggle_wifi').val() === 'off') {
-            adapter.setPowered(false, function() {
-                /* success */
-                console.log('Successfully disable wifi subsystem');
-                wifiToggleOff();
-            }, function(e) {
-                /* error */
-                wifiToggleOn();
-                showMsg('Error', 'Cannot disable WiFi subsystem: ' + e);
-            });
-        } else {
-            adapter.setPowered(true, function() {
-                /* success */
-                console.log('Successfully enable WiFi subsystem');
-                wifiClearKnownList();
-                wifiClearAvailableList();
-                wifiToggleOn();
-                setTimeout(function() {
-                    wifiScan(adapter);
-                }, 1000);
-            }, function(e) {
-                /* error */
-                wifiToggleOff();
-                showMsg('Error', 'Cannot enable WiFi subsystem: ' + e);
-            });
-        }
-    });
-
-    $('#button_wifi_refresh').on('click', function() {
-        var adapter = settings.wifi.getDefaultAdapter();
-        if (adapter === null) {
-            showErr('Error', 'WiFi adapter not found');
-        }
-
-        wifiScan(adapter);
-    });
-
-    $('#button_wifi_add').on('click', function() {
-        if (wifiScanInProgress) return;
-
-        /* Not fully implemented, disable for now */
-        showMsg('Error', 'Not supported');
-        return;
-
-        var adapter = settings.wifi.getDefaultAdapter();
-        if (adapter === null) {
-            showMsg('Error', 'WiFi adapter not found');
-        }
-
-        $.mobile.changePage('#page_wifi_add');
-    });
-
-    /* WiFi network detail page */
-    $('#page_wifi_detail').on('pageshow', function(event, data) {
-        var network_id = localStorage.getItem('wifi_network_id');
-        if (network_id == undefined) return;
-        var network = $(jqId(network_id)).data('network-object');
-        wifiConstructDetailPanel(network);
-    });
-
-    /* WiFi add new network page */
-    $('#page_wifi_add').on('pagebeforeshow', function(event, data) {
-        $('#input_wifi_ssid').val('');
-        $('#input_wifi_password').val('');
-        $('#select_wifi_security').val('None').change();
-        $('#input_wifi_password').textinput('disable');
-    });
-
-    $('#page_wifi_button_add').on('click', function() {
-        var adapter = settings.wifi.getDefaultAdapter();
-        var ssid = $('#input_wifi_ssid').val();
-        var security_option = $('#select_wifi_security').val();
-        var passcode = $('#input_wifi_password').val();
-
-        if (ssid === '') {
-            showMsg('Error', 'Enter SSID');
-            return;
-        }
-        if (security_option !== 'None') {
-            showMsg('Error', 'Not supported');
-            return;
-        }
-
-        showSpinner(false, 'Connecting...');
-        adapter.connectNetwork(ssid, security_option, passcode, function() {
-            /* success */
-            hideSpinner();
-            $.mobile.changePage('#page_wifi');
-
-        }, function(e) {
-            /* error */
-            hideSpinner();
-            showMsg('Error', 'WiFi connect failed: ' + e);
-        });
-    });
-
-    $('#select_wifi_security').on('change', function(event, data) {
-        var security = this.value;
-
-        if (security === 'None') {
-            $('#input_wifi_password').textinput('disable');
-            $('#input_wifi_password').val('');
-        } else {
-            $('#input_wifi_password').textinput('enable');
-        }
-    });
-}
-
-function wifiEventReceived(event) {
-    if (event.type !== WS_EVENT_TYPE.WIFI) return;
-    if ($.mobile.activePage.attr('id') !== 'page_wifi' && $.mobile.activePage.attr('id') !== 'page_wifi_detail') {
-        return;
-    }
-
-    if (event.name === 'ServicesChanged') {
-        wifiHandleServicesChanged(event.id, event.value);
-    } else if (event.name === 'PropertyChanged') {
-        wifiHandlePropertyChanged(event.id, event.value);
-    } else {
-        console.log('Unsupported WiFi event received: ' + event.name);
-    }
-}
-
-function wifiHandleServicesChanged(object_path, services) {
-    var servicesChanged = services[0];
-    var servicesRemoved = services[1];
-
-    if ($('#toggle_wifi').val() === 'off') return;
-
-    console.log(servicesChanged.length + ' networks changed');
-    for (var i = 0; i < servicesChanged.length; i++) {
-        if (servicesChanged[i][0] === undefined) {
-            console.log('Invalid parameters, missing object path');
-            continue;
-        }
-
-        if (servicesChanged[i][1].Type === 'wifi') {
-            var network = $(jqId(servicesChanged[i][0])).data('network-object');
-
-            if (network == null) {
-                console.log('could not find network object ' + servicesChanged[i][0]);
-                continue;
-            }
-
-            var network = new settings.wifi.WiFiNetwork(servicesChanged[i][0]);
-            if (servicesChanged[i][1].Name !== undefined) {
-                network.ssid = servicesChanged[i][1].Name;
-            }
-            if (servicesChanged[i][1].State === 'ready') {
-                network.connected = true;
-            } else if (servicesChanged[i][1].State === 'idle') {
-                network.connected = false;
-            }
-            if (servicesChanged[i][1].EncryptionMode !== undefined) {
-                network.encryption = servicesChanged[i][1].EncryptionMode;
-            }
-            if (servicesChanged[i][1].Strength !== undefined) {
-                network.strength = servicesChanged[i][1].Strength;
-            }
-            if (servicesChanged[i][1].IPv4.Address !== undefined) {
-                network.ipAddress = servicesChanged[i][1].IPv4.Address;
-            }
-            if (servicesChanged[i][1].IPv4.Gateway !== undefined) {
-                network.gateway = servicesChanged[i][1].IPv4.Gateway;
-            }
-            if (servicesChanged[i][1].IPv4.Netmask !== undefined) {
-                network.netmask = servicesChanged[i][1].IPv4.Netmask;
-            }
-
-            if ($.mobile.activePage.attr('id') === 'page_wifi') {
-                console.log('Network updated');
-                wifiUpdateNetwork(network);
-            }
-        }
-    }
-
-    console.log(servicesRemoved.length + ' networks removed');
-    for (var i = 0; i < servicesRemoved.length; i++) {
-        if (servicesRemoved[i] === undefined) {
-            console.log('Invalid parameters, missing object path');
-            continue;
-        }
-
-        wifiRemoveFromKnownList(servicesRemoved[i]);
-        wifiRemoveFromAvailableList(servicesRemoved[i]);
-    }
-}
-
-function wifiHandlePropertyChanged(id, property) {
-    if (property[0] === 'Powered') {
-        if (property[1] === true) {
-            wifiClearKnownList();
-            wifiClearAvailableList();
-            wifiToggleOn();
-            setTimeout(function() {
-                var adapter = settings.wifi.getDefaultAdapter();
-                wifiScan(adapter);
-            }, 1000);
-        } else {
-            wifiToggleOff();
-        }
-    }
-
-    /* if wifi is off, ignore all the propertyChanged events */
-    if ($('#toggle_wifi').val() === 'off') return;
-
-    if (property[0] === 'State') {
-        /* specific network has changed */
-        var network = $(jqId(parent)).data('network-object');
-        if (network == null) {
-            console.error('Wifi network not found');
-            return;
-        }
-
-        if (property[1] === 'ready') {
-            network.connected = true;
-        } else if (property[1] === 'idle') {
-            network.connected = false;
-        }
-
-        wifiUpdateNetwork(network);
-    } else if (property[0] === 'Connected') {
-        /* unknown network has changed, sync WiFi network */
-        console.log('Unknown network connected property changed');
-        var adapter = settings.wifi.getDefaultAdapter();
-        wifiSync(adapter, null, null);
-    }
-}
-
-function wifiClearKnownList() {
-    $('#listview_network_known').html('');
-}
-
-function wifiClearAvailableList() {
-    $('#listview_network_available').html('');
-}
-
-function wifiScan(adapter) {
-    if (wifiScanInProgress) return;
-
-    console.log('Start wifi scan');
-    /* clear the network list with new scan */
-    wifiClearKnownList();
-    wifiClearAvailableList();
-
-    showSpinner(false, 'Scanning...');
-    wifiScanInProgress = true;
-    $('#toggle_wifi').slider('disable');
-    $('#toggle_wifi').slider('refresh');
-    adapter.scan(function(networks) {
-        hideSpinner();
-        wifiScanInProgress = false;
-        $('#toggle_wifi').slider('enable');
-        $('#toggle_wifi').slider('refresh');
-        console.log('found ' + networks.length + ' wifi networks');
-        for (var i = 0; i < networks.length; i++) {
-            var network = networks[i];
-            if (network.ssid && network.ssid !== '') {
-                wifiUpdateNetwork(network);
-            } else {
-                console.log('Skipping hidden network - ' + network.ipAddress);
-            }
-        }
-    }, function(e) {
-        hideSpinner();
-        wifiScanInProgress = false;
-        $('#toggle_wifi').slider('enable');
-        $('#toggle_wifi').slider('refresh');
-        showMsg('Error', 'Cannot scan: ' + e);
-    });
-}
-
-function wifiSync(adapter, success_cb, error_cb) {
-    if (wifiScanInProgress) return;
-
-    console.log('Start wifi sync');
-    /* clear the network list with new scan */
-    wifiClearKnownList();
-    wifiClearAvailableList();
-
-    wifiScanInProgress = true;
-    $('#toggle_wifi').slider('disable');
-    $('#toggle_wifi').slider('refresh');
-    adapter.scan(function(networks) {
-        hideSpinner();
-        wifiScanInProgress = false;
-        $('#toggle_wifi').slider('enable');
-        $('#toggle_wifi').slider('refresh');
-        console.log('found ' + networks.length + ' wifi networks');
-        for (var i = 0; i < networks.length; i++) {
-            var network = networks[i];
-            if (network.ssid && network.ssid !== '') {
-                wifiUpdateNetwork(network);
-            }
-        }
-        if (success_cb) {
-            success_cb();
-        }
-    }, function(e) {
-        wifiScanInProgress = false;
-        $('#toggle_wifi').slider('enable');
-        $('#toggle_wifi').slider('refresh');
-        if (error_cb) {
-            error_cb(e);
-        }
-    });
-}
-
-function wifiRefreshList() {
-    $('#listview_network_known').listview('refresh');
-    $('#listview_network_available').listview('refresh');
-}
-
-function wifiAppendToKnownList(network) {
-    if ($('#listview_network_known').find(jqId(network.id)).length != 0) return;
-
-    var parent = '#listview_network_known';
-    wifiConstructNetworkElement(parent, network);
-    wifiUpdateNetworkButton(network);
-    wifiRefreshList();
-}
-
-function wifiRemoveFromKnownList(network_id) {
-    var removeThis = $('#listview_network_known li').filter(function() {
-        return $(this).find(jqId(network_id)).length === 1;
-    });
-
-    if (removeThis.length !== 0) {
-        removeThis.remove();
-        wifiRefreshList();
-    }
-}
-
-function wifiAppendToAvailableList(network) {
-    if ($('#listview_network_available').find(jqId(network.id)).length != 0) return;
-
-    var parent = '#listview_network_available';
-    wifiConstructNetworkElement(parent, network);
-    wifiUpdateNetworkButton(network);
-    wifiRefreshList();
-}
-
-function wifiRemoveFromAvailableList(network_id) {
-    var removeThis = $('#listview_network_available li').filter(function() {
-        return $(this).find(jqId(network_id)).length === 1;
-    });
-
-    if (removeThis.length !== 0) {
-        removeThis.remove();
-        wifiRefreshList();
-    }
-}
-
-function getSignalStrengthStr(strength) {
-    var signal_strength = 'unknown';
-    if (strength > 0 && strength <= 20) {
-        strength = 'very poor';
-    } else if (strength > 20 && strength <= 40) {
-        signal_strength = 'poor';
-    } else if (strength > 40 && strength <= 70) {
-        signal_strength = 'average';
-    } else if (strength > 70 && strength <= 90) {
-        signal_strength = 'good';
-    } else if (strength > 90 && strength <= 100) {
-        signal_strength = 'excellent';
-    }
-    return signal_strength;
-}
-
-function wifiConstructNetworkElement(parent, network) {
-    var html = '<li data-icon="false"><a href="#" id="' + jqId(network.id).replace('#', '') + '">';
-    html += '<div class="network-ssid">' + network.ssid + '</div>';
-    html += '<div class="network-encryption">Encryption: ' + network.encryption + '</div>';
-    html += '<div class="network-strength">Signal: ' + getSignalStrengthStr(network.strength) + '</div>';
-    html += '<div class="network-status"></div>';
-    html += '<div data-role="button" class="network-action-button ui-li-aside" data-inline="true"></div>';
-    html += '</a></li>';
-    $(parent).append(html).trigger('create');
-
-    /* store network object in the element so we can reference it later */
-    $(jqId(network.id)).data('network-object', network);
-
-    $(jqId(network.id)).on('click', function() {
-        localStorage.setItem('wifi_network_id', network.id);
-        $.mobile.changePage('#page_wifi_detail');
-    });
-
-    $(jqId(network.id)).find('div.network-action-button').on('click', function(e) {
-        var parent = $(this).parent().attr('id');
-
-        /*
-         * prevent the click event to propagate up
-         */
-        e.stopImmediatePropagation();
-        e.preventDefault();
-
-        var adapter = settings.wifi.getDefaultAdapter();
-        if (adapter === null) return;
-
-        /* retrieve the network object from element */
-        var network = $(jqId(parent)).data('network-object');
-        if (network == null) {
-            console.error('Wifi network not found');
-            return;
-        }
-
-        if (!network.connected && network.encryption !== 'none') {
-            /* Encryption based connection not supported now */
-            showMsg('Error', 'Only open networks are supported');
-            return;
-        }
-
-        if (!network.connected) {
-            createPopupDialog(false, false, 'Connect to network', network.ssid, 'Connect', 'Cancel', function() {
-                console.log('WiFi connect to network: ' + network.ssid);
-                showSpinner(false, 'Connecting...');
-                adapter.connectNetwork(network.id, null, null, function() {
-                    /* success */
-                    wifiSync(adapter, function() {
-                        hideSpinner();
-                    }, function(e) {
-                        /* changing from disconnected to connected */
-                        hideSpinner();
-                        network.connected = true;
-                        wifiUpdateNetwork(network);
-                    })
-                }, function(e) {
-                    /* error */
-                    hideSpinner();
-                    showMsg('Error', 'WiFi connect failed: ' + e);
-                });
-            });
-        } else {
-            console.log('Wifi disconnect from network: ' + network.ssid);
-            showSpinner(false, 'Disconnecting...');
-            adapter.disconnectNetwork(network.id, function() {
-                /* success */
-                wifiSync(adapter, function() {
-                    hideSpinner();
-                }, function(e) {
-                    /* changing from connected to disconnected */
-                    hideSpinner();
-                    network.connected = false;
-                    wifiUpdateNetwork(network);
-                })
-            }, function(e) {
-                /* error */
-                hideSpinner();
-                showMsg('Error', 'Network disconnect failed: ' + e);
-            });
-        }
-    });
-}
-
-function wifiUpdateNetwork(network) {
-    /* reposition device if it's connected or disconnected */
-    if (network.connected) {
-        wifiRemoveFromAvailableList(network.id);
-        wifiAppendToKnownList(network);
-    } else {
-        wifiRemoveFromKnownList(network.id);
-        wifiAppendToAvailableList(network);
-    }
-
-    /* update network button for allowed action */
-    wifiUpdateNetworkButton(network);
-
-    /* update network connection status */
-    wifiUpdateConnectionStatus(network);
-
-    /* update network detail panel */
-    if ($.mobile.activePage.attr('id') === 'page_wifi_detail') {
-        var network_id = localStorage.getItem('wifi_network_id');
-        if (network_id == undefined) return;
-        var network_object = $(jqId(network_id)).data('network-object');
-        if (network.id === network_object.id) {
-            wifiConstructDetailPanel(network);
-        }
-    }
-}
-
-function wifiUpdateNetworkButton(network) {
-    if (network.connected) {
-        $(jqId(network.id)).find('div.network-action-button').find('span').text('Disconnect');
-    } else {
-        $(jqId(network.id)).find('div.network-action-button').find('span').text('Connect');
-    }
-}
-
-function wifiUpdateConnectionStatus(network) {
-    var status = 'disconnected';
-    if (network.connected) {
-        $(jqId(network.id)).addClass('network-connected');
-        status = 'connected';
-    } else {
-        status = 'disconnected';
-        $(jqId(network.id)).removeClass('network-connected');
-    }
-
-    wifiUpdateConnectionStatusText(network, status);
-}
-
-function wifiUpdateConnectionStatusText(network, status) {
-    $(jqId(network.id)).find('div.network-status').text(status);
-}
-
-function wifiConstructDetailPanel(network) {
-    var status_connected = 'No';
-
-    if (network == null) return;
-    if (network.connected) status_connected = 'Yes';
-
-    $('#page_wifi_detail_content').html('');
-    var html = '<ul data-role="listview" id="listview_network_detail" data-inset="true" ' + 'class="network-list ui-listview">';
-    html += '<li id="network_detail_ssid"><h2>SSID: ' + network.ssid + '</h2></li>';
-    html += '<li id="network_detail_encryption"><h2>Encryption: ' + network.encryption + '</h2></li>';
-    html += '<li id="network_detail_strength"><h2>Signal Strength: ' + network.strength + '</h2></li>';
-    html += '<li id="network_detail_connected"><h2>Connected: ' + status_connected + '</h2></li>';
-    if (network.connected) {
-        html += '<li id="network_detail_ip_address"><h2>IP Address: ' + network.ipAddress + '</h2></li>';
-        html += '<li id="network_detail_gateway"><h2>Gateway: ' + network.gateway + '</h2></li>';
-        html += '<li id="network_detail_netmask"><h2>Netmask: ' + network.netmask + '</h2></li>';
-    }
-    html += '</ul>';
-    $('#page_wifi_detail_content').append(html).trigger('create');
-    $('#listview_wifi_detail').listview('refresh');
-}
-
-function wifiUpdateDetailPanel(network) {
-    var status_connected = 'No';
-
-    if (network == null) return;
-    if (network.connected) status_connected = 'Yes';
-    $('#wifi_detail_connected').text(status_connected);
-    $('#listview_wifi_detail').listview('refresh');
-}
-
-function wifiToggleOn() {
-    setTimeout(function() {
-        $('#wifi_networks').show();
-        $('#toggle_wifi').val('on').slider('refresh');
-    }, 100);
-}
-
-function wifiToggleOff() {
-    setTimeout(function() {
-        $('#wifi_networks').hide();
-        $('#toggle_wifi').val('off').slider('refresh');
-    }, 100);
-}
\ No newline at end of file
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/utils.js b/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/utils.js
deleted file mode 100644 (file)
index cbf0067..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-
-function jqId(id) {
-    if (id == undefined) return null;
-
-    /* replace colons and spaces with dash for jquery ids */
-    return '#' + id.replace(/:| |\//g, '-');
-}
-
-function showMsg(title, message) {
-    if (title == 'Error') {
-        console.error(message);
-        if (message.indexOf(ERROR_SETTINGSD_DISCONNECTED) >= 0) {
-            createPopupDialog(false, false, ERROR_SETTINGSD_DISCONNECTED, 'Reconnect?', 'OK', 'Cancel', function() {
-                console.log('Reconnecting to settings daemon...');
-                wsAPI.reconnect();
-            });
-            return;
-        }
-    } else {
-        console.log(message);
-    }
-    createPopupDialog(true, false, title, message);
-}
-
-function showInputDialog(title, input_message, ok_button_text, cancel_button_text, ok_callback) {
-    createPopupDialog(false, true, title, input_message, ok_button_text, cancel_button_text, ok_callback);
-}
-
-function createPopupDialog(dismiss, is_input, title, message, ok_button_text, cancel_button_text, ok_callback) {
-    // inject popup element
-    var $dialog = $('<div/>').popup({
-        dismissible: 'false',
-        transition: 'none'
-    }).bind('popupafterclose', function() {
-        // remove element from page
-        $(this).remove();
-    });
-
-    $('<h3/>', {
-        text: title
-    }).appendTo($dialog);
-
-    if (is_input) {
-
-    } else {
-        $('<p/>', {
-            text: message
-        }).appendTo($dialog);
-    }
-
-    $('<a>', {
-        text: ok_button_text ? ok_button_text : 'Ok'
-    }).buttonMarkup({
-        inline: true,
-    }).on('click', function() {
-        $dialog.popup('close');
-        if (ok_callback) {
-            if (is_input) {
-                /* TODO implement getting input from field */
-                ok_callback();
-
-            } else {
-                ok_callback();
-            }
-        }
-    }).appendTo($dialog);
-
-    if (cancel_button_text) {
-        /* only create cancel button if requested */
-        $('<a>', {
-            text: cancel_button_text,
-        }).buttonMarkup({
-            inline: true,
-        }).on('click', function() {
-            $dialog.popup('close');
-        }).appendTo($dialog);
-    }
-
-    $dialog.popup('open').trigger('create');
-    $dialog.popup({
-        dismissible: dismiss
-    });
-}
-
-function showSpinner(dismiss, message) {
-    $.mobile.loading('show', {
-        text: message,
-        theme: 'a',
-        textVisible: true,
-        textonly: false
-    });
-}
-
-function hideSpinner() {
-    $.mobile.loading('hide');
-}
\ No newline at end of file
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/websocket.js b/samples/web/Sample/Tizen/Web App/SettingsApp/project/js/websocket.js
deleted file mode 100644 (file)
index 60c7f73..0000000
+++ /dev/null
@@ -1,502 +0,0 @@
-/*
- * Copyright (c) 2013, Intel Corporation.
- *
- * This program is licensed under the terms and conditions of the
- * Apache License, version 2.0.  The full text of the Apache License is at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-
-/* Dummy backend for faking websocket daemon */
-var dummyBackend = true;
-
-var ERROR_SETTINGSD_DISCONNECTED = 'Settings daemon is not connected';
-
-var WS_REQUEST_TYPE = {
-    WIFI: "wifi",
-    BLUETOOTH: "bluetooth",
-    DISPLAY: "display",
-    SOUND: "sound",
-    DATETIME: "clock",
-    LOCALE: "locale"
-};
-
-var WS_EVENT_TYPE = {
-    WIFI: "wifi",
-    BLUETOOTH: "bluetooth",
-    DISPLAY: "display",
-    SOUND: "sound",
-    DATETIME: "clock",
-    LOCALE: "locale"
-};
-
-/* web socket module to connect to the settings daemon */
-var wsAPI = (function() {
-    /* number of connection retries to attempt if the socket closes */
-    var self = this;
-    this.connected = false;
-    this.event_callbacks = $.Callbacks();
-
-    /* default values for WebSocket */
-    this.socketUrl = 'ws://localhost:16000/';
-    this.socketProtocol = 'http-only';
-
-    this.timeouttime = 15000;
-    this.methodIdx = 0;
-    this.methodCalls = [];
-    for (var i = 0; i < 100; i++) {
-        this.methodCalls[i] = null;
-    }
-
-    this.MethodCall = function(id, name, success_cb, error_cb) {
-        var me = this;
-        this.successCB = success_cb;
-        this.errorCB = error_cb;
-        this.transactionid = id;
-        this.name = name;
-        this.done = false;
-        this.start = function() {
-            me.timeout = setTimeout(function() {
-                if (me.errorCB !== undefined) {
-                    me.errorCB('\"' + me.name + '\" method timed out after ' + self.timeouttime + ' ms');
-                }
-                me.finish();
-            }, self.timeouttime);
-        }
-        this.finish = function() {
-            if (me.timeout !== undefined) {
-                clearTimeout(me.timeout);
-            }
-            me.done = true;
-        }
-    }
-
-    this.EventObject = function(type, id, name, value) {
-        var me = this;
-        this.type = type;
-        this.id = id;
-        this.name = name;
-        this.value = value;
-    }
-
-    function connect(url, protocol, sucess_cb, error_cb) {
-        self.socketUrl = typeof url !== 'undefined' ? url : self.socketUrl;
-        self.socketProtocol = typeof protocol !== 'undefined' ? protocol : self.socketProtocol;
-        self.successCB = sucess_cb;
-        self.errorCB = error_cb;
-
-        if ('WebSocket' in window) {
-            if (self.socketProtocol.length > 0) {
-                self.socket = new WebSocket(self.socketUrl, self.socketProtocol);
-            } else {
-                self.socket = new WebSocket(self);
-            }
-            console.log('Connecting to websocket: ' + self.socketUrl);
-
-            self.socket.onopen = function() {
-                self.connected = true;
-                console.log('websocket opened');
-                self.successCB();
-            };
-
-            self.socket.onclose = function(code, reason, remote) {
-                self.connected = false;
-                console.log('websocket closed - ' + reason);
-
-                if (dummyBackend) {
-                    /* fake the connection for dummy backend */
-                    self.connected = true;
-                    self.successCB();
-                    return;
-                }
-
-                self.errorCB(reason);
-            };
-
-            self.socket.onerror = function(e) {
-                if (dummyBackend) {
-                    /* ignore websocket error */
-                    return;
-                }
-
-                if (e.data) {
-                    self.errorCB('websocket error: ' + e.data);
-                } else {
-                    self.errorCB('websocket error: unknown');
-                }
-            };
-
-            self.socket.onmessage = function(e) {
-                receive(e.data);
-            };
-        } else {
-            console.log('Websockets not supported');
-        }
-    }
-
-    function reconnect() {
-        if (this.connected) return;
-
-        setTimeout(function() {
-            connect(self.socketUrl, self.socketProtocol, self.successCB, self.errorCB);
-        }, 1000);
-    }
-
-    function send(msg, success_cb, error_cb) {
-        if (!this.connected) {
-            if (error_cb !== undefined) {
-                error_cb(ERROR_SETTINGSD_DISCONNECTED);
-            }
-            return;
-        }
-        var i = this.methodIdx;
-        this.methodIdx = (this.methodIdx + 1) % 100;
-        this.methodCalls[i] = new this.MethodCall(msg.transactionid, msg.name, success_cb, error_cb);
-        this.methodCalls[i].start();
-
-        var jsonMsg = JSON.stringify(msg);
-        if (dummyBackend) {
-            /* fake with dummy data */
-            dummyBackendSend(msg);
-        } else {
-            this.socket.send(jsonMsg);
-        }
-    }
-
-    function fireEvent(type, id, name, value) {
-        var event = new this.EventObject(type, id, name, value);
-        event_callbacks.fire(event);
-    }
-
-    function receive(msg) {
-        var self = this;
-        var response;
-        try {
-            response = JSON.parse(msg);
-        } catch (e) {
-            console.error('Garbage message: ' + msg);
-            return;
-        }
-
-        if ((response === undefined) || (response.type === undefined)) {
-            console.error('Badly formed message: ' + msg);
-        } else if (response.type === 'event' && response.value !== undefined) {
-            if (response.value.interface_name === 'net.connman.Manager' || response.value.interface_name === 'net.connman.Service' || response.value.interface_name === 'net.connman.Technology') {
-                if (response.value.signal_name === undefined || response.value.parameters === undefined) {
-                    console.error('Badly formed event: ' + msg);
-                    return;
-                }
-                if (response.value.signal_name === 'ServiceChanged' && response.value.parameters.length !== 2) {
-                    console.error('Badly formed event parameters: ' + msg);
-                    return;
-                }
-
-                if (response.value.object_path === '/' || response.value.object_path.indexOf('/net/connman/technology/wifi') >= 0) {
-                    fireEvent(WS_REQUEST_TYPE.WIFI, response.value.object_path, response.value.signal_name, response.value.parameters);
-                } else if (response.value.object_path.indexOf('/net/connman/technology/bluetooth') >= 0) {
-                    fireEvent(WS_REQUEST_TYPE.BLUETOOTH, response.value.object_path, response.value.signal_name, response.value.parameters);
-                } else {
-                    console.error('Unrecognized event object_path, skipping');
-                }
-            } else {
-                console.error('Unrecognized event, skipping');
-            }
-        } else if (response.transactionid === undefined) {
-            console.error('Badly formed response: ' + msg);
-        } else {
-            var calls = this.methodCalls;
-            for (var i = 0; i < calls.length; i++) {
-                var call = calls[i];
-                if (call && (!call.done) && (call.transactionid === response.transactionid)) {
-                    call.finish();
-                    if (response.result !== 'succeeded' && response.reason !== undefined && call.errorCB !== undefined) {
-                        console.log('error - ' + response.reason);
-                        call.errorCB(response.reason);
-                    } else if (call.successCB !== undefined) {
-                        if (response.value !== undefined) {
-                            call.successCB(response.value);
-                        } else {
-                            call.successCB();
-                        }
-                    }
-                    return;
-                }
-            }
-        }
-    }
-
-    function generateTransactionId() {
-        var i, val = [];
-        for (i = 0; i < 8; i++) {
-            var num = Math.floor((Math.random() + 1) * 65536);
-            val[i] = num.toString(16).substring(1);
-        }
-        var uuid = val[0] + val[1] + '-' + val[2] + '-' + val[3] + '-' + val[4] + '-' + val[5] + val[6] + val[7];
-        return uuid;
-    }
-
-    function sendRequest(request_type, request_name, request_args, success_cb, error_cb) {
-        var msg = {
-            'type': request_type,
-            'transactionid': generateTransactionId(),
-            'name': request_name,
-            'value': request_args
-        };
-
-        send(msg, success_cb, error_cb);
-    }
-
-    function subscribeEvents(callback) {
-        event_callbacks.add(callback);
-    }
-
-    function unsubscribeEvents(callback) {
-        event_callbacks.remove(callback);
-    }
-
-    /* this is dummy data for testing purposes */
-    function dummyBackendSend(msg) {
-        if (dummyBackend) {
-            console.log('Sending to dummy server');
-
-            var calls = this.methodCalls;
-            var replyMsg = null;
-
-            for (var i = 0; i < calls.length; i++) {
-                var call = calls[i];
-                if (call && (!call.done) && (call.transactionid === msg.transactionid)) {
-                    call.finish();
-                    if (msg.error !== undefined) {
-                        call.errorCB(msg.error);
-                    }
-                    if (msg.value !== undefined && call.successCB && call.errorCB !== undefined) {
-                        switch (msg.type) {
-                        case WS_REQUEST_TYPE.WIFI:
-                            if (msg.name === 'is_enabled') {
-                                /* default to enabled */
-                                var result = true;
-                                call.successCB(result);
-                                return;
-                            } else if (msg.name === 'enable' && msg.value === true) {
-                                call.successCB();
-                                return;
-                            } else if (msg.name === 'enable' && msg.value === false) {
-                                call.successCB();
-                                return;
-                            } else if (msg.name === 'scan') {
-                                var results = [
-                                    [
-                                        ["/net/connman/service/ethernet_0010f32f5a70_cable",
-                                        {}],
-                                        ["/net/connman/service/wifi_c8f733acdf96_3558364737_managed_psk",
-                                        {
-                                            "Type": "wifi",
-                                            "Security": ["psk"],
-                                            "State": "ready",
-                                            "Strength": 50,
-                                            "Favorite": false,
-                                            "Immutable": false,
-                                            "AutoConnect": false,
-                                            "Name": "Access Point 1",
-                                            "BSSID": "11:5d:49:88:3d:20",
-                                            "MaxRate": 54000000,
-                                            "Frequency": 2417,
-                                            "EncryptionMode": "none",
-                                            "Ethernet": {
-                                                "Method": "auto",
-                                                "Interface": "wlp1s0",
-                                                "Address": "B2:D3:55:66:44:22",
-                                                "MTU": 1500
-                                            },
-                                            "IPv4": {
-                                                "Address": "192.168.1.20",
-                                                "Gateway": "192.168.1.1",
-                                                "Method": "dhcp",
-                                                "Netmask": "255.255.255.0"
-                                            },
-                                            "IPv4.Configuration": {
-                                                "Method": "dhcp"
-                                            },
-                                            "IPv6": {},
-                                            "IPv6.Configuration": {
-                                                "Method": "auto",
-                                                "Privacy": "disabled"
-                                            },
-                                            "Nameservers": [],
-                                            "Nameservers.Configuration": [],
-                                            "Timeservers": [],
-                                            "Timeservers.Configuration": [],
-                                            "Domains": [],
-                                            "Domains.Configuration": [],
-                                            "Proxy": {},
-                                            "Proxy.Configuration": {},
-                                            "Provider": {}
-                                        }],
-                                        ["/net/connman/service/wifi_c8f733acdf96_446f75636865626167_managed_psk",
-                                        {
-                                            "Type": "wifi",
-                                            "Security": ["psk"],
-                                            "State": "idle",
-                                            "Strength": 50,
-                                            "Favorite": false,
-                                            "Immutable": false,
-                                            "AutoConnect": false,
-                                            "Name": "Access Point 2",
-                                            "BSSID": "21:ef:30:b9:ad:86",
-                                            "MaxRate": 54000000,
-                                            "Frequency": 2417,
-                                            "EncryptionMode": "aes",
-                                            "Ethernet": {
-                                                "Method": "auto",
-                                                "Interface": "wlp1s0",
-                                                "Address": "E8:F2:33:AC:DF:96",
-                                                "MTU": 1500
-                                            },
-                                            "IPv4": {},
-                                            "IPv4.Configuration": {
-                                                "Method": "dhcp"
-                                            },
-                                            "IPv6": {},
-                                            "IPv6.Configuration": {
-                                                "Method": "auto",
-                                                "Privacy": "disabled"
-                                            },
-                                            "Nameservers": [],
-                                            "Nameservers.Configuration": [],
-                                            "Timeservers": [],
-                                            "Timeservers.Configuration": [],
-                                            "Domains": [],
-                                            "Domains.Configuration": [],
-                                            "Proxy": {},
-                                            "Proxy.Configuration": {},
-                                            "Provider": {}
-                                        }],
-                                        ["/net/connman/service/wifi_c8f733acdf96_536563757265446f75636865626167_managed_psk",
-                                        {
-                                            "Type": "wifi",
-                                            "Security": ["psk"],
-                                            "State": "idle",
-                                            "Strength": 50,
-                                            "Favorite": false,
-                                            "Immutable": false,
-                                            "AutoConnect": false,
-                                            "Name": "Access Point 3",
-                                            "BSSID": "25:ad:44:b7:e3:66",
-                                            "MaxRate": 54000000,
-                                            "Frequency": 2417,
-                                            "EncryptionMode": "aes",
-                                            "Ethernet": {
-                                                "Method": "auto",
-                                                "Interface": "wlp1s0",
-                                                "Address": "A9:28:44:AD:FF:26",
-                                                "MTU": 1500
-                                            },
-                                            "IPv4": {},
-                                            "IPv4.Configuration": {
-                                                "Method": "dhcp"
-                                            },
-                                            "IPv6": {},
-                                            "IPv6.Configuration": {
-                                                "Method": "auto",
-                                                "Privacy": "disabled"
-                                            },
-                                            "Nameservers": [],
-                                            "Nameservers.Configuration": [],
-                                            "Timeservers": [],
-                                            "Timeservers.Configuration": [],
-                                            "Domains": [],
-                                            "Domains.Configuration": [],
-                                            "Proxy": {},
-                                            "Proxy.Configuration": {},
-                                            "Provider": {}
-                                        }]
-                                    ]
-                                ];
-
-                                replyMsg = JSON.stringify(results);
-                                /* simulate scan behavior */
-                                setTimeout(function() {
-                                    call.successCB(results);
-                                }, 2000);
-                                return;
-                            } else if (msg.name === 'connect') {
-                                call.successCB();
-                                setTimeout(function() {
-                                    fireEvent(WS_REQUEST_TYPE.WIFI, '/net/connman/service/wifi_c8f733acdf96_3558364737_managed_psk', 'PropertyChanged', ["Connected", true]);
-                                }, 2000);
-                                return;
-                            } else if (msg.name === 'disconnect') {
-                                call.successCB();
-                                setTimeout(function() {
-                                    fireEvent(WS_REQUEST_TYPE.WIFI, '/net/connman/service/wifi_c8f733acdf96_3558364737_managed_psk', 'PropertyChanged', ["Connected", false]);
-                                }, 2000);
-                                return;
-                            } else {
-                                call.errorCB('Unsupported request: ' + msg.name + ', ' + msg.value);
-                                return;
-                            }
-                            break;
-                        case WS_REQUEST_TYPE.BLUETOOTH:
-                            if (msg.name === 'enable' && msg.value === true) {
-                                call.successCB();
-                                return;
-                            } else if (msg.name === 'enable' && msg.value === false) {
-                                call.successCB();
-                                return;
-                            } else {
-                                call.errorCB('Unsupported request: ' + msg.name + ', ' + msg.value);
-                                return;
-                            }
-                            break;
-                        case WS_REQUEST_TYPE.DATETIME:
-                            if (msg.name === 'is_time_updates_auto' && msg.value !== undefined) {
-                                /* default to manual */
-                                var result = false;
-                                call.successCB(result);
-                                return;
-                            } else if (msg.name === 'is_timezone_updates_auto' && msg.value !== undefined) {
-                                /* default to manual */
-                                var result = false;
-                                call.successCB(result);
-                                return;
-                            } else if (msg.name === 'time' && msg.value !== undefined) {
-                                call.successCB();
-                                return;
-                            } else if (msg.name === 'timezone' && msg.value !== undefined) {
-                                call.successCB();
-                                return;
-                            } else if (msg.name === 'time_updates' && msg.value !== undefined) {
-                                call.successCB();
-                                return;
-                            } else if (msg.name === 'timezone_updates' && msg.value !== undefined) {
-                                call.successCB();
-                                return;
-                            } else {
-                                call.errorCB('Unsupported request: ' + msg.name + ', ' + msg.value);
-                                return;
-                            }
-                            break;
-                        case WS_REQUEST_TYPE.DISPLAY:
-                        case WS_REQUEST_TYPE.SOUND:
-                        case WS_REQUEST_TYPE.LOCALE:
-                            call.errorCB('Request not implemented');
-                            return;
-                        default:
-                            call.errorCB('Invalid request type: ' + msg.type);
-                            return;
-                        }
-                    }
-                    return;
-                }
-            }
-        }
-    }
-
-    return {
-        connect: connect,
-        reconnect: reconnect,
-        sendRequest: sendRequest,
-        subscribeEvents: subscribeEvents,
-        unsubscribeEvents: unsubscribeEvents
-    }
-})();
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/manifest.json b/samples/web/Sample/Tizen/Web App/SettingsApp/project/manifest.json
deleted file mode 100644 (file)
index 885775b..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-    "app": {
-        "launch": {
-            "container": "panel",
-            "local_path": "index.html"
-        }
-    },
-    "description": "__MSG_appDescription__",
-    "icons": {
-        "128": "Settings.png"
-    },
-    "name": "__MSG_appName__",
-    "permissions": [],
-    "version": "0.2013.7.4"
-}
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/packaging/Settings.changes b/samples/web/Sample/Tizen/Web App/SettingsApp/project/packaging/Settings.changes
deleted file mode 100644 (file)
index 44fdc0f..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-* Tue Oct 15 2013 Jimmy Huang <jimmy.huang@intel.com> accepted/tizen/20131007.221312@71c3e9e
-- Monitor settings daemon events and update changes
-
-* Tue Oct 15 2013 Jimmy Huang <jimmy.huang@intel.com> accepted/tizen/20131007.221312@ff849bb
-- Remove duplicating disconnect button from WiFi details panel
-
-* Fri Oct 04 2013 Jimmy Huang <jimmy.huang@intel.com> submit/tizen/20131003.210102@6d2592a
-- Fixes TIVI-1943
-
-* Thu Oct 03 2013 Jimmy Huang <jimmy.huang@intel.com> accepted/tizen/20130918.214652@278671f
-- New release of SettingsApp
-    - Bumped version to 0.0.2
-    - Fixes TIVI-1788 - Setting error: Setting daemon is not connected
-    - Added runtime dependency on settingsd
-    - Fixed a bug where hidden network is still showing
-    - Various fixes date and time settings
-    - Added support for automatic time and timezone updates
-    - Add support for is_time_update_enabled and is_timezone_update_enabled requests
-    - Switch to text input instead of time and date input since the picker is broken
-    - Added time and date string validator
-    - Fixes clock not syncing right when moving out of focus
-    - Updated dummy backend
-    - Fixed a bug where GUI doesn't allow you to disconnect from encrypted networks
-    - Display ip address and other connected information
-    - Fixed a bug where toggle changes triggers recursive callbacks
-    - Cleaning up debug logs and error messages
-    - Fixed a bug where previous scan is not canceled when page is loaded
-    - Display wifi network encryption and signal strength
-    - Display error when trying to connect to encrypted network since it's not implemented
-    - Updated wifi scan handling code and added some more dummy data
-    - Ask user to reconnect to settings daemon if it is disconnected
-    - Disable wifi toggle button when scanning
-    - Show an error message for disconnecting from websocket
-
-
-* Thu Sep 19 2013 Jimmy Huang <jimmy.huang@intel.com>
-- Uninstall widget when doing rpm uninstall
-
-* Wed Sep 18 2013 Jimmy Huang <jimmy.huang@intel.com>
-- Added new icon to package, fixes TIVI-1709
-
-* Fri Sep 13 2013 Jimmy Huang <jimmy.huang@intel.com> submit/tizen/20130828.173751@0f314ff
-- Disable dummy backend and connect to settings daemon
-- Added date and time settings
-- Added wifi settings and dummy data
-- Code refactoring and cleanup
-- Added new app icon, fixes TIVI-1709
-
-* Thu Aug 22 2013 Jimmy Huang <jimmy.huang@intel.com>
-- Initial commit
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/project/packaging/Settings.spec b/samples/web/Sample/Tizen/Web App/SettingsApp/project/packaging/Settings.spec
deleted file mode 100644 (file)
index aea0975..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-Name:       Settings
-Summary:    A HTML5 based app for system settings
-Version:    0.0.2
-Release:    1
-Group:      Applications/Web Applications
-License:    Apache-2.0
-URL:        http://www.tizen.org2
-Source0:    %{name}-%{version}.tar.bz2
-BuildRequires:  zip
-BuildRequires:  desktop-file-utils
-Requires:   bluetooth-frwk-core
-Requires:   bluetooth-frwk-service
-Requires:   settingsd
-Requires:   wrt-installer
-
-%description
-A HTML5 based app for system settings like WiFi, Bluetooth
-
-%prep
-%setup -q -n %{name}-%{version}
-
-%build
-
-make wgtPkg
-
-#make %{?jobs:-j%jobs}
-
-%install
-rm -rf %{buildroot}
-%make_install
-
-%post
-if [ -f /opt/usr/apps/.preinstallWidgets/preinstallDone ]; then
-    wrt-installer -i /opt/usr/apps/.preinstallWidgets/Settings.wgt;
-fi
-
-%postun
-wrt-installer -un ODBQpKvkS1.Settings
-
-%files
-%defattr(-,root,root,-)
-/opt/usr/apps/.preinstallWidgets/Settings.wgt
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/settingsapp-snapshot.png b/samples/web/Sample/Tizen/Web App/SettingsApp/settingsapp-snapshot.png
deleted file mode 100644 (file)
index 08c8cc1..0000000
Binary files a/samples/web/Sample/Tizen/Web App/SettingsApp/settingsapp-snapshot.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/tizen-app-template.xml b/samples/web/Sample/Tizen/Web App/SettingsApp/tizen-app-template.xml
deleted file mode 100644 (file)
index 929c5bc..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<tizen-app-template xmlns="http://www.tizen.org/tizen-app-template" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" template-version="" sdk-version="" icon32="tizen_32.png" icon64="tizen_64.png" xsi:schemaLocation="http://www.tizen.org/tizen-app-template tizen-app-template.xsd ">
-    <template-name>SettingsApp</template-name>
-    <widget-type>TIZEN</widget-type>
-    <description-file-name>description.xml</description-file-name>
-</tizen-app-template>
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/tizen_32.png b/samples/web/Sample/Tizen/Web App/SettingsApp/tizen_32.png
deleted file mode 100644 (file)
index a37c33e..0000000
Binary files a/samples/web/Sample/Tizen/Web App/SettingsApp/tizen_32.png and /dev/null differ
diff --git a/samples/web/Sample/Tizen/Web App/SettingsApp/tizen_64.png b/samples/web/Sample/Tizen/Web App/SettingsApp/tizen_64.png
deleted file mode 100644 (file)
index f80f2ec..0000000
Binary files a/samples/web/Sample/Tizen/Web App/SettingsApp/tizen_64.png and /dev/null differ