[Svn-src-all:3911] [version-2_13-dev 22825] スマートフォンサイトの改善
Seasoft
admin @ mail.ec-cube.net
2013年 5月 20日 (月) 05:42:43 JST
Subversion committed to /home/svn/open 22825
http://svn.ec-cube.net/open_trac/changeset/22825
┌────────────────────────────┐
│更新者 : Seasoft │
│更新日時: 2013-05-20 05:42:41 +0900 (月, 20 5月 2013)│
└────────────────────────────┘
Log:
--------------------------------------------------------
スマートフォンサイトの改善
#2140 (標準テンプレートのカスタマイズ性を高める)
* jQuery 1.9.1
* jquery.mobile-1.3.1
* SourceMap 対応にしてみた。
* カテゴリーブロックのレイアウト調整を改善
* jQuery の読み込みタイミングを早くした。
* 当サイトについて画面 不可解な空間を生じるケースがあるのを回避
#2044 (無駄な処理を改善する for 2.13.0)
* 不要ファイル削除
* Google Map のスクリプト読み込みは必要時のみに
* category.js の読み込みは必要時のみに
* Google Map 読み込みのための冗長なプロトコル毎の分岐を改善
#2043 (typo修正・ソース整形・ソースコメントの改善 for 2.13.0)
* 軽微な JS 構文誤りを修正
Changed: [U:修正,A:追加,D:削除]
--------------------------------------------------------
U branches/version-2_13-dev/data/Smarty/templates/sphone/abouts/index.tpl
U branches/version-2_13-dev/data/Smarty/templates/sphone/frontparts/bloc/category.tpl
U branches/version-2_13-dev/data/Smarty/templates/sphone/popup_header.tpl
U branches/version-2_13-dev/data/Smarty/templates/sphone/site_frame.tpl
U branches/version-2_13-dev/html/user_data/packages/sphone/css/block.css
A branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery-1.9.1.min.js
A branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/images/ajax-loader.gif
D branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/images/ajax-loader.png
U branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/images/icons-18-black.png
U branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/images/icons-18-white.png
U branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/images/icons-36-black.png
U branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/images/icons-36-white.png
A branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/jquery.mobile-1.3.1.js
A branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/jquery.mobile-1.3.1.min.css
A branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/jquery.mobile-1.3.1.min.js
A branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/jquery.mobile-1.3.1.min.map
D branches/version-2_13-dev/html/user_data/packages/sphone/js/news.js
変更: branches/version-2_13-dev/data/Smarty/templates/sphone/abouts/index.tpl
===================================================================
--- branches/version-2_13-dev/data/Smarty/templates/sphone/abouts/index.tpl 2013-05-19 18:03:57 UTC (rev 22824)
+++ branches/version-2_13-dev/data/Smarty/templates/sphone/abouts/index.tpl 2013-05-19 20:42:41 UTC (rev 22825)
@@ -22,33 +22,6 @@
*/
*}-->
-<!--{assign var=_site value=$arrSiteInfo}-->
-<!--{if $_site.latitude && $_site.longitude}-->
- <script type="text/javascript">//<![CDATA[
- $(function() {
- $("#maps").css({
- 'margin-top': '15px',
- 'margin-left': 'auto',
- 'margin-right': 'auto',
- 'width': '98%',
- 'height': '300px'
- });
- var lat = <!--{$_site.latitude}-->
- var lng = <!--{$_site.longitude}-->
- if (lat && lng) {
- var latlng = new google.maps.LatLng(lat, lng);
- var mapOptions = {zoom: 15,
- center: latlng,
- mapTypeId: google.maps.MapTypeId.ROADMAP};
- var map = new google.maps.Map($("#maps").get(0), mapOptions);
- var marker = new google.maps.Marker({map: map, position: latlng});
- } else {
- $("#maps").remove();
- }
- });
- //]]></script>
-<!--{/if}-->
-
<section id="undercolumn">
<!--☆当サイトについて -->
<h2 class="title"><!--{$tpl_title|h}--></h2>
@@ -101,8 +74,31 @@
<!--{/if}-->
</dl>
- <!--☆MAP -->
- <div id="maps"></div>
+ <!--{if strlen($arrSiteInfo.latitude) >= 1 && strlen($arrSiteInfo.longitude) >= 1}-->
+ <script src="//maps.google.com/maps/api/js?sensor=false"></script>
+ <script type="text/javascript">//<![CDATA[
+ $(function() {
+ $("#maps").css({
+ 'margin-top': '15px',
+ 'margin-left': 'auto',
+ 'margin-right': 'auto',
+ 'width': '98%',
+ 'height': '300px'
+ });
+ var lat = "<!--{$arrSiteInfo.latitude|escape:'javascript'}-->";
+ var lng = "<!--{$arrSiteInfo.longitude|escape:'javascript'}-->";
+ var latlng = new google.maps.LatLng(lat, lng);
+ var mapOptions = {
+ zoom: 15,
+ center: latlng,
+ mapTypeId: google.maps.MapTypeId.ROADMAP
+ };
+ var map = new google.maps.Map($("#maps").get(0), mapOptions);
+ var marker = new google.maps.Marker({map: map, position: latlng});
+ });
+ //]]></script>
+ <div id="maps"></div>
+ <!--{/if}-->
</section>
<!--▼検索バー -->
変更: branches/version-2_13-dev/data/Smarty/templates/sphone/frontparts/bloc/category.tpl
===================================================================
--- branches/version-2_13-dev/data/Smarty/templates/sphone/frontparts/bloc/category.tpl 2013-05-19 18:03:57 UTC (rev 22824)
+++ branches/version-2_13-dev/data/Smarty/templates/sphone/frontparts/bloc/category.tpl 2013-05-19 20:42:41 UTC (rev 22825)
@@ -20,14 +20,11 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*}-->
-<!--商品カテゴリここから-->
<section id="category_area">
+ <script type="text/javascript" src="<!--{$TPL_URLPATH}-->js/category.js"></script>
<h2 class="title_block">商品カテゴリ</h2>
<nav id="categorytree">
<!--{include file="`$smarty.const.SMARTPHONE_TEMPLATE_REALDIR`frontparts/bloc/category_tree_fork.tpl" children=$arrTree treeID="categorytreelist" display=1 level=0}-->
- <script>//<![CDATA[
- //]]></script>
</nav>
-</section>
-<!-- ▲カテゴリ -->
+</section><!-- id="category_area" -->
変更: branches/version-2_13-dev/data/Smarty/templates/sphone/popup_header.tpl
===================================================================
--- branches/version-2_13-dev/data/Smarty/templates/sphone/popup_header.tpl 2013-05-19 18:03:57 UTC (rev 22824)
+++ branches/version-2_13-dev/data/Smarty/templates/sphone/popup_header.tpl 2013-05-19 20:42:41 UTC (rev 22825)
@@ -31,17 +31,10 @@
<!--{* 共通CSS *}-->
<link rel="stylesheet" media="only screen" href="<!--{$TPL_URLPATH}-->css/import.css" />
- <!--{if $tpl_page_category == "abouts"}-->
- <!--{if ($smarty.server.HTTPS != "") && ($smarty.server.HTTPS != "off")}-->
- <script src="https://maps.google.com/maps/api/js?sensor=false"></script>
- <!--{else}-->
- <script src="http://maps.google.com/maps/api/js?sensor=false"></script>
- <!--{/if}-->
- <!--{/if}-->
+ <script src="<!--{$TPL_URLPATH}-->js/jquery-1.9.1.min.js"></script>
<script src="<!--{$smarty.const.ROOT_URLPATH}-->js/navi.js"></script>
<script src="<!--{$smarty.const.ROOT_URLPATH}-->js/win_op.js"></script>
<script src="<!--{$smarty.const.ROOT_URLPATH}-->js/site.js"></script>
- <script src="<!--{$TPL_URLPATH}-->js/jquery-1.8.1.min.js"></script>
<script src="<!--{$TPL_URLPATH}-->js/jquery.biggerlink.js"></script>
<script type="text/javascript">
$(function(){
@@ -50,13 +43,11 @@
</script>
<script type="text/javascript" src="<!--{$TPL_URLPATH}-->js/btn.js"></script>
<script type="text/javascript" src="<!--{$TPL_URLPATH}-->js/barbutton.js"></script>
- <script type="text/javascript" src="<!--{$TPL_URLPATH}-->js/category.js"></script>
- <script type="text/javascript" src="<!--{$TPL_URLPATH}-->js/news.js"></script>
<!--{* jQuery Mobile *}-->
- <link rel="stylesheet" media="only screen" href="<!--{$TPL_URLPATH}-->js/jquery.mobile/jquery.mobile-1.2.1.min.css" />
+ <link rel="stylesheet" media="only screen" href="<!--{$TPL_URLPATH}-->js/jquery.mobile/jquery.mobile-1.3.1.min.css" />
<script src="<!--{$TPL_URLPATH}-->js/config.js"></script>
- <script src="<!--{$TPL_URLPATH}-->js/jquery.mobile/jquery.mobile-1.2.1.min.js"></script>
+ <script src="<!--{$TPL_URLPATH}-->js/jquery.mobile/jquery.mobile-1.3.1.min.js"></script>
<!--{* スマートフォンカスタマイズ用JS *}-->
<script src="<!--{$TPL_URLPATH}-->js/jquery.autoResizeTextAreaQ-0.1.js"></script>
変更: branches/version-2_13-dev/data/Smarty/templates/sphone/site_frame.tpl
===================================================================
--- branches/version-2_13-dev/data/Smarty/templates/sphone/site_frame.tpl 2013-05-19 18:03:57 UTC (rev 22824)
+++ branches/version-2_13-dev/data/Smarty/templates/sphone/site_frame.tpl 2013-05-19 20:42:41 UTC (rev 22825)
@@ -31,17 +31,10 @@
<!--{* 共通CSS *}-->
<link rel="stylesheet" media="only screen" href="<!--{$TPL_URLPATH}-->css/import.css" />
- <!--{if $tpl_page_category == "abouts"}-->
- <!--{if ($smarty.server.HTTPS != "") && ($smarty.server.HTTPS != "off")}-->
- <script src="https://maps-api-ssl.google.com/maps/api/js?sensor=false"></script>
- <!--{else}-->
- <script src="http://maps.google.com/maps/api/js?sensor=false"></script>
- <!--{/if}-->
- <!--{/if}-->
+ <script src="<!--{$TPL_URLPATH}-->js/jquery-1.9.1.min.js"></script>
<script src="<!--{$smarty.const.ROOT_URLPATH}-->js/navi.js"></script>
<script src="<!--{$smarty.const.ROOT_URLPATH}-->js/win_op.js"></script>
<script src="<!--{$smarty.const.ROOT_URLPATH}-->js/site.js"></script>
- <script src="<!--{$TPL_URLPATH}-->js/jquery-1.8.1.min.js"></script>
<script src="<!--{$TPL_URLPATH}-->js/jquery.biggerlink.js"></script>
<script>//<![CDATA[
$(function(){
@@ -50,13 +43,11 @@
//]]></script>
<script src="<!--{$TPL_URLPATH}-->js/btn.js"></script>
<script src="<!--{$TPL_URLPATH}-->js/barbutton.js"></script>
- <script src="<!--{$TPL_URLPATH}-->js/category.js"></script>
- <script src="<!--{$TPL_URLPATH}-->js/news.js"></script>
<!--{* jQuery Mobile *}-->
- <link rel="stylesheet" media="only screen" href="<!--{$TPL_URLPATH}-->js/jquery.mobile/jquery.mobile-1.2.1.min.css" />
+ <link rel="stylesheet" media="only screen" href="<!--{$TPL_URLPATH}-->js/jquery.mobile/jquery.mobile-1.3.1.min.css" />
<script src="<!--{$TPL_URLPATH}-->js/config.js"></script>
- <script src="<!--{$TPL_URLPATH}-->js/jquery.mobile/jquery.mobile-1.2.1.min.js"></script>
+ <script src="<!--{$TPL_URLPATH}-->js/jquery.mobile/jquery.mobile-1.3.1.min.js"></script>
<!--{* スマートフォンカスタマイズ用CSS *}-->
<link rel="stylesheet" media="screen" href="<!--{$TPL_URLPATH}-->js/jquery.facebox/facebox.css" />
変更: branches/version-2_13-dev/html/user_data/packages/sphone/css/block.css
===================================================================
--- branches/version-2_13-dev/html/user_data/packages/sphone/css/block.css 2013-05-19 18:03:57 UTC (rev 22824)
+++ branches/version-2_13-dev/html/user_data/packages/sphone/css/block.css 2013-05-19 20:42:41 UTC (rev 22825)
@@ -254,7 +254,6 @@
margin: 0;
padding: 0;
}
-
#categorytree li:first-child {
border-top: none;
}
@@ -265,14 +264,13 @@
#categorytree li li:last-child {
border-bottom: none;
}
-#categorytree ul li a,
-.categorytree > ul > li > ul > li a {
+#categorytree ul li a {
padding: 0.6em 0;
}
-.category_body {
+#categorytree .category_body {
display: inline-block;
}
-.category_body a {
+#categorytree .category_body a {
width: 100%;
display: inline-block;
white-space: nowrap;
@@ -280,24 +278,20 @@
text-overflow: ellipsis;
cursor: pointer;
}
-#categorytree ul li li {
- padding-bottom: 0.6em;
-}
-.category_header {
+#categorytree .category_header {
width: 1.5em;
margin: 0 6px 0 8px;
display: inline-block;
background: transparent;
text-align: right;
}
-.category_header.plus,
-.category_header.minus {
+#categorytree .category_header.plus,
+#categorytree .category_header.minus {
color: #FFF;
margin: 0 6px 0 8px;
- padding-bottom: 4px;
+ padding: 2px 0;
display: inline-block;
text-align: center;
- line-height: 0.4;
width: 1.5em;
height: 1.3em;
-webkit-border-radius: 8px;
@@ -307,9 +301,8 @@
-webkit-box-shadow: 0px 1px 0px rgba(0,0,0,0.7);
-webkit-border-radius: 3px;
}
-
-.category_header.plus > a,
-.category_header.minus > a {
+#categorytree .category_header.plus > a,
+#categorytree .category_header.minus > a {
width: 1.5em;
color: #FFF;
display: inline-block;
@@ -346,7 +339,6 @@
#categorytree .level4 .category_body {
width: 64%;
}
-
#categorytree .level5 .category_header {
margin-left: 6.2em;
}
@@ -354,16 +346,15 @@
width: 56%;
}
-
/*リンクカラー*/
-.category_body a:link,
-.category_body a:visited {
+#categorytree .category_body a:link,
+#categorytree .category_body a:visited {
color: #000;
text-decoration: none;
cursor: pointer;
}
-.category_header.plus a,
-.category_header.minus a {
+#categorytree .category_header.plus a,
+#categorytree .category_header.minus a {
color: #FFF;
}
追加: branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery-1.9.1.min.js
===================================================================
--- branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery-1.9.1.min.js (rev 0)
+++ branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery-1.9.1.min.js 2013-05-19 20:42:41 UTC (rev 22825)
@@ -0,0 +1,5 @@
+/*! 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&>(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
追加: branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/images/ajax-loader.gif
===================================================================
(バイナリファイルが異なっています)
Property changes on: branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/images/ajax-loader.gif
___________________________________________________________________
追加: svn:mime-type
+ application/octet-stream
削除: branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/images/ajax-loader.png
===================================================================
(バイナリファイルが異なっています)
変更: branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/images/icons-18-black.png
===================================================================
(バイナリファイルが異なっています)
変更: branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/images/icons-18-white.png
===================================================================
(バイナリファイルが異なっています)
変更: branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/images/icons-36-black.png
===================================================================
(バイナリファイルが異なっています)
変更: branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/images/icons-36-white.png
===================================================================
(バイナリファイルが異なっています)
追加: branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/jquery.mobile-1.3.1.js
===================================================================
--- branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/jquery.mobile-1.3.1.js (rev 0)
+++ branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/jquery.mobile-1.3.1.js 2013-05-19 20:42:41 UTC (rev 22825)
@@ -0,0 +1,11191 @@
+/*
+* jQuery Mobile 1.3.1
+* Git HEAD hash: 74b4bec049fd93e4fe40205e6157de16eb64eb46 <> Date: Wed Apr 10 2013 21:57:23 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 = "­<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 = " ";
+ 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 ));
+
+
+}));
追加: branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/jquery.mobile-1.3.1.min.css
===================================================================
--- branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/jquery.mobile-1.3.1.min.css (rev 0)
+++ branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/jquery.mobile-1.3.1.min.css 2013-05-19 20:42:41 UTC (rev 22825)
@@ -0,0 +1,3 @@
+/*! jQuery Mobile 1.3.1 | Git HEAD hash: 74b4bec <> 2013-04-10T21:57:23Z | (c) 2010, 2013 jQuery Foundation, Inc. | jquery.org/license */
+
+.ui-bar-a{border:1px solid #333;background:#111;color:#fff;font-weight:700;text-shadow:0 -1px 0 #000;background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#111));background-image:-webkit-linear-gradient(#3c3c3c,#111);background-image:-moz-linear-gradient(#3c3c3c,#111);background-image:-ms-linear-gradient(#3c3c3c,#111);background-image:-o-linear-gradient(#3c3c3c,#111);background-image:linear-gradient(#3c3c3c,#111)}.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}.ui-bar-a .ui-link-inherit{color:#fff}.ui-bar-a a.ui-link{color:#7cc4e7;font-weight:700}.ui-bar-a a.ui-link:visited{color:#2489ce}.ui-bar-a a.ui-link:hover{color:#2489ce}.ui-bar-a a.ui-link:active{color:#2489ce}.ui-body-a,.ui-overlay-a{border:1px solid #444;background:#222;color:#fff;text-shadow:0 1px 0 #111;font-weight:400;background-image:-webkit-gradient(linear,left top,left bottom,from(#444),to(#222));background-image:-webkit-linear-gradient(#444,#222);background-image:-moz-linear-gradient(#444,#222);background-image:-ms-linear-gradient(#444,#222);background-image:-o-linear-gradient(#444,#222);background-image:linear-gradient(#444,#222)}.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}.ui-body-a .ui-link-inherit{color:#fff}.ui-body-a .ui-link{color:#2489ce;font-weight:700}.ui-body-a .ui-link:visited{color:#2489ce}.ui-body-a .ui-link:hover{color:#2489ce}.ui-body-a .ui-link:active{color:#2489ce}.ui-btn-up-a{border:1px solid #111;background:#333;font-weight:700;color:#fff;text-shadow:0 1px 0 #111;background-image:-webkit-gradient(linear,left top,left bottom,from(#444),to(#2d2d2d));background-image:-webkit-linear-gradient(#444,#2d2d2d);background-image:-moz-linear-gradient(#444,#2d2d2d);background-image:-ms-linear-gradient(#444,#2d2d2d);background-image:-o-linear-gradient(#444,#2d2d2d);background-image:linear-gradient(#444,#2d2d2d)}.ui-btn-up-a:visited,.ui-btn-up-a a.ui-link-inherit{color:#fff}.ui-btn-hover-a{border:1px solid #000;background:#444;font-weight:700;color:#fff;text-shadow:0 1px 0 #111;background-image:-webkit-gradient(linear,left top,left bottom,from(#555),to(#383838));background-image:-webkit-linear-gradient(#555,#383838);background-image:-moz-linear-gradient(#555,#383838);background-image:-ms-linear-gradient(#555,#383838);background-image:-o-linear-gradient(#555,#383838);background-image:linear-gradient(#555,#383838)}.ui-btn-hover-a:visited,.ui-btn-hover-a:hover,.ui-btn-hover-a a.ui-link-inherit{color:#fff}.ui-btn-down-a{border:1px solid #000;background:#222;font-weight:700;color:#fff;text-shadow:0 1px 0 #111;background-image:-webkit-gradient(linear,left top,left bottom,from(#202020),to(#2c2c2c));background-image:-webkit-linear-gradient(#202020,#2c2c2c);background-image:-moz-linear-gradient(#202020,#2c2c2c);background-image:-ms-linear-gradient(#202020,#2c2c2c);background-image:-o-linear-gradient(#202020,#2c2c2c);background-image:linear-gradient(#202020,#2c2c2c)}.ui-btn-down-a:visited,.ui-btn-down-a:hover,.ui-btn-down-a a.ui-link-inherit{color:#fff}.ui-btn-up-a,.ui-btn-hover-a,.ui-btn-down-a{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-b{border:1px solid #456f9a;background:#5e87b0;color:#fff;font-weight:700;text-shadow:0 1px 0 #3e6790;background-image:-webkit-gradient(linear,left top,left bottom,from(#6facd5),to(#497bae));background-image:-webkit-linear-gradient(#6facd5,#497bae);background-image:-moz-linear-gradient(#6facd5,#497bae);background-image:-ms-linear-gradient(#6facd5,#497bae);background-image:-o-linear-gradient(#6facd5,#497bae);background-image:linear-gradient(#6facd5,#497bae)}.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}.ui-bar-b .ui-link-inherit{color:#fff}.ui-bar-b a.ui-link{color:#ddf0f8;font-weight:700}.ui-bar-b a.ui-link:visited{color:#ddf0f8}.ui-bar-b a.ui-link:hover{color:#ddf0f8}.ui-bar-b a.ui-link:active{color:#ddf0f8}.ui-body-b,.ui-overlay-b{border:1px solid #999;background:#f3f3f3;color:#222;text-shadow:0 1px 0 #fff;font-weight:400;background-image:-webkit-gradient(linear,left top,left bottom,from(#ddd),to(#ccc));background-image:-webkit-linear-gradient(#ddd,#ccc);background-image:-moz-linear-gradient(#ddd,#ccc);background-image:-ms-linear-gradient(#ddd,#ccc);background-image:-o-linear-gradient(#ddd,#ccc);background-image:linear-gradient(#ddd,#ccc)}.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}.ui-body-b .ui-link-inherit{color:#333}.ui-body-b .ui-link{color:#2489ce;font-weight:700}.ui-body-b .ui-link:visited{color:#2489ce}.ui-body-b .ui-link:hover{color:#2489ce}.ui-body-b .ui-link:active{color:#2489ce}.ui-btn-up-b{border:1px solid #044062;background:#396b9e;font-weight:700;color:#fff;text-shadow:0 1px 0 #194b7e;background-image:-webkit-gradient(linear,left top,left bottom,from(#5f9cc5),to(#396b9e));background-image:-webkit-linear-gradient(#5f9cc5,#396b9e);background-image:-moz-linear-gradient(#5f9cc5,#396b9e);background-image:-ms-linear-gradient(#5f9cc5,#396b9e);background-image:-o-linear-gradient(#5f9cc5,#396b9e);background-image:linear-gradient(#5f9cc5,#396b9e)}.ui-btn-up-b:visited,.ui-btn-up-b a.ui-link-inherit{color:#fff}.ui-btn-hover-b{border:1px solid #00415e;background:#4b88b6;font-weight:700;color:#fff;text-shadow:0 1px 0 #194b7e;background-image:-webkit-gradient(linear,left top,left bottom,from(#6facd5),to(#4272a4));background-image:-webkit-linear-gradient(#6facd5,#4272a4);background-image:-moz-linear-gradient(#6facd5,#4272a4);background-image:-ms-linear-gradient(#6facd5,#4272a4);background-image:-o-linear-gradient(#6facd5,#4272a4);background-image:linear-gradient(#6facd5,#4272a4)}.ui-btn-hover-b:visited,.ui-btn-hover-b:hover,.ui-btn-hover-b a.ui-link-inherit{color:#fff}.ui-btn-down-b{border:1px solid #225377;background:#4e89c5;font-weight:700;color:#fff;text-shadow:0 1px 0 #194b7e;background-image:-webkit-gradient(linear,left top,left bottom,from(#295b8e),to(#3e79b5));background-image:-webkit-linear-gradient(#295b8e,#3e79b5);background-image:-moz-linear-gradient(#295b8e,#3e79b5);background-image:-ms-linear-gradient(#295b8e,#3e79b5);background-image:-o-linear-gradient(#295b8e,#3e79b5);background-image:linear-gradient(#295b8e,#3e79b5)}.ui-btn-down-b:visited,.ui-btn-down-b:hover,.ui-btn-down-b a.ui-link-inherit{color:#fff}.ui-btn-up-b,.ui-btn-hover-b,.ui-btn-down-b{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-c{border:1px solid #b3b3b3;background:#eee;color:#3e3e3e;font-weight:700;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f0f0f0),to(#ddd));background-image:-webkit-linear-gradient(#f0f0f0,#ddd);background-image:-moz-linear-gradient(#f0f0f0,#ddd);background-image:-ms-linear-gradient(#f0f0f0,#ddd);background-image:-o-linear-gradient(#f0f0f0,#ddd);background-image:linear-gradient(#f0f0f0,#ddd)}.ui-bar-c .ui-link-inherit{color:#3e3e3e}.ui-bar-c a.ui-link{color:#7cc4e7;font-weight:700}.ui-bar-c a.ui-link:visited{color:#2489ce}.ui-bar-c a.ui-link:hover{color:#2489ce}.ui-bar-c a.ui-link:active{color:#2489ce}.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}.ui-body-c,.ui-overlay-c{border:1px solid #aaa;color:#333;text-shadow:0 1px 0 #fff;background:#f9f9f9;background-image:-webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#eee));background-image:-webkit-linear-gradient(#f9f9f9,#eee);background-image:-moz-linear-gradient(#f9f9f9,#eee);background-image:-ms-linear-gradient(#f9f9f9,#eee);background-image:-o-linear-gradient(#f9f9f9,#eee);background-image:linear-gradient(#f9f9f9,#eee)}.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}.ui-body-c .ui-link-inherit{color:#333}.ui-body-c .ui-link{color:#2489ce;font-weight:700}.ui-body-c .ui-link:visited{color:#2489ce}.ui-body-c .ui-link:hover{color:#2489ce}.ui-body-c .ui-link:active{color:#2489ce}.ui-btn-up-c{border:1px solid #ccc;background:#eee;font-weight:700;color:#222;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f1f1f1));background-image:-webkit-linear-gradient(#fff,#f1f1f1);background-image:-moz-linear-gradient(#fff,#f1f1f1);background-image:-ms-linear-gradient(#fff,#f1f1f1);background-image:-o-linear-gradient(#fff,#f1f1f1);background-image:linear-gradient(#fff,#f1f1f1)}.ui-btn-up-c:visited,.ui-btn-up-c a.ui-link-inherit{color:#2f3e46}.ui-btn-hover-c{border:1px solid #bbb;background:#dfdfdf;font-weight:700;color:#222;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f6f6f6),to(#e0e0e0));background-image:-webkit-linear-gradient(#f6f6f6,#e0e0e0);background-image:-moz-linear-gradient(#f6f6f6,#e0e0e0);background-image:-ms-linear-gradient(#f6f6f6,#e0e0e0);background-image:-o-linear-gradient(#f6f6f6,#e0e0e0);background-image:linear-gradient(#f6f6f6,#e0e0e0)}.ui-btn-hover-c:visited,.ui-btn-hover-c:hover,.ui-btn-hover-c a.ui-link-inherit{color:#2f3e46}.ui-btn-down-c{border:1px solid #bbb;background:#d6d6d6;font-weight:700;color:#222;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#d0d0d0),to(#dfdfdf));background-image:-webkit-linear-gradient(#d0d0d0,#dfdfdf);background-image:-moz-linear-gradient(#d0d0d0,#dfdfdf);background-image:-ms-linear-gradient(#d0d0d0,#dfdfdf);background-image:-o-linear-gradient(#d0d0d0,#dfdfdf);background-image:linear-gradient(#d0d0d0,#dfdfdf)}.ui-btn-down-c:visited,.ui-btn-down-c:hover,.ui-btn-down-c a.ui-link-inherit{color:#2f3e46}.ui-btn-up-c,.ui-btn-hover-c,.ui-btn-down-c{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-d{border:1px solid #bbb;background:#bbb;color:#333;font-weight:700;text-shadow:0 1px 0 #eee;background-image:-webkit-gradient(linear,left top,left bottom,from(#ddd),to(#bbb));background-image:-webkit-linear-gradient(#ddd,#bbb);background-image:-moz-linear-gradient(#ddd,#bbb);background-image:-ms-linear-gradient(#ddd,#bbb);background-image:-o-linear-gradient(#ddd,#bbb);background-image:linear-gradient(#ddd,#bbb)}.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}.ui-bar-d .ui-link-inherit{color:#333}.ui-bar-d a.ui-link{color:#2489ce;font-weight:700}.ui-bar-d a.ui-link:visited{color:#2489ce}.ui-bar-d a.ui-link:hover{color:#2489ce}.ui-bar-d a.ui-link:active{color:#2489ce}.ui-body-d,.ui-overlay-d{border:1px solid #bbb;color:#333;text-shadow:0 1px 0 #fff;background:#fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#fff));background-image:-webkit-linear-gradient(#fff,#fff);background-image:-moz-linear-gradient(#fff,#fff);background-image:-ms-linear-gradient(#fff,#fff);background-image:-o-linear-gradient(#fff,#fff);background-image:linear-gradient(#fff,#fff)}.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}.ui-body-d .ui-link-inherit{color:#333}.ui-body-d .ui-link{color:#2489ce;font-weight:700}.ui-body-d .ui-link:visited{color:#2489ce}.ui-body-d .ui-link:hover{color:#2489ce}.ui-body-d .ui-link:active{color:#2489ce}.ui-btn-up-d{border:1px solid #bbb;background:#fff;font-weight:700;color:#333;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#f6f6f6));background-image:-webkit-linear-gradient(#fafafa,#f6f6f6);background-image:-moz-linear-gradient(#fafafa,#f6f6f6);background-image:-ms-linear-gradient(#fafafa,#f6f6f6);background-image:-o-linear-gradient(#fafafa,#f6f6f6);background-image:linear-gradient(#fafafa,#f6f6f6)}.ui-btn-up-d:visited,.ui-btn-up-d a.ui-link-inherit{color:#333}.ui-btn-hover-d{border:1px solid #aaa;background:#eee;font-weight:700;color:#333;cursor:pointer;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#eee),to(#fff));background-image:-webkit-linear-gradient(#eee,#fff);background-image:-moz-linear-gradient(#eee,#fff);background-image:-ms-linear-gradient(#eee,#fff);background-image:-o-linear-gradient(#eee,#fff);background-image:linear-gradient(#eee,#fff)}.ui-btn-hover-d:visited,.ui-btn-hover-d:hover,.ui-btn-hover-d a.ui-link-inherit{color:#333}.ui-btn-down-d{border:1px solid #aaa;background:#eee;font-weight:700;color:#333;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#e5e5e5),to(#f2f2f2));background-image:-webkit-linear-gradient(#e5e5e5,#f2f2f2);background-image:-moz-linear-gradient(#e5e5e5,#f2f2f2);background-image:-ms-linear-gradient(#e5e5e5,#f2f2f2);background-image:-o-linear-gradient(#e5e5e5,#f2f2f2);background-image:linear-gradient(#e5e5e5,#f2f2f2)}.ui-btn-down-d:visited,.ui-btn-down-d:hover,.ui-btn-down-d a.ui-link-inherit{color:#333}.ui-btn-up-d,.ui-btn-hover-d,.ui-btn-down-d{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-e{border:1px solid #f7c942;background:#fadb4e;color:#333;font-weight:700;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fceda7),to(#fbef7e));background-image:-webkit-linear-gradient(#fceda7,#fbef7e);background-image:-moz-linear-gradient(#fceda7,#fbef7e);background-image:-ms-linear-gradient(#fceda7,#fbef7e);background-image:-o-linear-gradient(#fceda7,#fbef7e);background-image:linear-gradient(#fceda7,#fbef7e)}.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}.ui-bar-e .ui-link-inherit{color:#333}.ui-bar-e a.ui-link{color:#2489ce;font-weight:700}.ui-bar-e a.ui-link:visited{color:#2489ce}.ui-bar-e a.ui-link:hover{color:#2489ce}.ui-bar-e a.ui-link:active{color:#2489ce}.ui-body-e,.ui-overlay-e{border:1px solid #f7c942;color:#222;text-shadow:0 1px 0 #fff;background:#fff9df;background-image:-webkit-gradient(linear,left top,left bottom,from(#fffadf),to(#fff3a5));background-image:-webkit-linear-gradient(#fffadf,#fff3a5);background-image:-moz-linear-gradient(#fffadf,#fff3a5);background-image:-ms-linear-gradient(#fffadf,#fff3a5);background-image:-o-linear-gradient(#fffadf,#fff3a5);background-image:linear-gradient(#fffadf,#fff3a5)}.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}.ui-body-e .ui-link-inherit{color:#222}.ui-body-e .ui-link{color:#2489ce;font-weight:700}.ui-body-e .ui-link:visited{color:#2489ce}.ui-body-e .ui-link:hover{color:#2489ce}.ui-body-e .ui-link:active{color:#2489ce}.ui-btn-up-e{border:1px solid #f4c63f;background:#fadb4e;font-weight:700;color:#222;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#ffefaa),to(#ffe155));background-image:-webkit-linear-gradient(#ffefaa,#ffe155);background-image:-moz-linear-gradient(#ffefaa,#ffe155);background-image:-ms-linear-gradient(#ffefaa,#ffe155);background-image:-o-linear-gradient(#ffefaa,#ffe155);background-image:linear-gradient(#ffefaa,#ffe155)}.ui-btn-up-e:visited,.ui-btn-up-e a.ui-link-inherit{color:#222}.ui-btn-hover-e{border:1px solid #f2c43d;background:#fbe26f;font-weight:700;color:#111;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff5ba),to(#fbdd52));background-image:-webkit-linear-gradient(#fff5ba,#fbdd52);background-image:-moz-linear-gradient(#fff5ba,#fbdd52);background-image:-ms-linear-gradient(#fff5ba,#fbdd52);background-image:-o-linear-gradient(#fff5ba,#fbdd52);background-image:linear-gradient(#fff5ba,#fbdd52)}.ui-btn-hover-e:visited,.ui-btn-hover-e:hover,.ui-btn-hover-e a.ui-link-inherit{color:#333}.ui-btn-down-e{border:1px solid #f2c43d;background:#fceda7;font-weight:700;color:#111;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f8d94c),to(#fadb4e));background-image:-webkit-linear-gradient(#f8d94c,#fadb4e);background-image:-moz-linear-gradient(#f8d94c,#fadb4e);background-image:-ms-linear-gradient(#f8d94c,#fadb4e);background-image:-o-linear-gradient(#f8d94c,#fadb4e);background-image:linear-gradient(#f8d94c,#fadb4e)}.ui-btn-down-e:visited,.ui-btn-down-e:hover,.ui-btn-down-e a.ui-link-inherit{color:#333}.ui-btn-up-e,.ui-btn-hover-e,.ui-btn-down-e{font-family:Helvetica,Arial,sans-serif;text-decoration:none}a.ui-link-inherit{text-decoration:none!important}.ui-btn-active{border:1px solid #2373a5;background:#5393c5;font-weight:700;color:#fff;cursor:pointer;text-shadow:0 1px 0 #3373a5;text-decoration:none;background-image:-webkit-gradient(linear,left top,left bottom,from(#5393c5),to(#6facd5));background-image:-webkit-linear-gradient(#5393c5,#6facd5);background-image:-moz-linear-gradient(#5393c5,#6facd5);background-image:-ms-linear-gradient(#5393c5,#6facd5);background-image:-o-linear-gradient(#5393c5,#6facd5);background-image:linear-gradient(#5393c5,#6facd5);font-family:Helvetica,Arial,sans-serif}.ui-btn-active:visited,.ui-btn-active:hover,.ui-btn-active a.ui-link-inherit{color:#fff}.ui-btn-inner{border-top:1px solid #fff;border-color:rgba(255,255,255,.3)}.ui-corner-all{-webkit-border-radius:.6em;border-radius:.6em}.ui-br{border-color:#828282;border-color:rgba(130,130,130,.3);border-style:solid}.ui-disabled{filter:Alpha(Opacity=30);opacity:.3;zoom:1}.ui-disabled,.ui-disabled a{cursor:default!important;pointer-events:none}.ui-icon,.ui-icon-searchfield:after{background-color:#666;background-color:rgba(0,0,0,.4);background-image:url(images/icons-18-white.png);background-repeat:no-repeat;-webkit-border-radius:9px;border-radius:9px}.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}.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}.ui-icon-plus{background-position:-1px -1px}.ui-icon-minus{background-position:-37px -1px}.ui-icon-delete{background-position:-73px -1px}.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}.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}.ui-icon-search,.ui-icon-searchfield:after{background-position:-611px -1px}.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}.ui-icon-bars{background-position:-788px -1px}.ui-icon-edit{background-position:-824px -1px}@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%}}.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}.ui-icon-loading{background:url(images/ajax-loader.gif);background-size:46px 46px}.ui-btn-corner-all{-webkit-border-radius:1em;border-radius:1em}.ui-corner-all,.ui-btn-corner-all{-webkit-background-clip:padding;background-clip:padding-box}.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 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.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);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.4);box-shadow:0 1px 0 rgba(255,255,255,.4)}.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,0 0 9px #387bbe;-webkit-box-shadow:inset 0 0 3px #387bbe,0 0 9px #387bbe;box-shadow:inset 0 0 3px #387bbe,0 0 9px #387bbe}.ui-input-text.ui-focus,.ui-input-search.ui-focus{-moz-box-shadow:0 0 12px #387bbe;-webkit-box-shadow:0 0 12px #387bbe;box-shadow:0 0 12px #387bbe}.ui-mobile-nosupport-boxshadow *{-moz-box-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}.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}.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}.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)}body.ui-mobile-viewport,div.ui-mobile-viewport{overflow-x:hidden}.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}.ui-page{outline:0}@media screen and (orientation:portrait){.ui-mobile .ui-page{min-height:420px}}@media screen and (orientation:landscape){.ui-mobile .ui-page{min-height:300px}}.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:0;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}.ui-mobile-rendering>*{visibility:hidden}.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}.ui-content{border-width:0;overflow:visible;overflow-x:hidden;padding:15px}.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}.ui-icon{width:18px;height:18px}.ui-nojs{position:absolute;left:-9999px}.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)}.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}}@-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)}}@-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}.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%)}}.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%)}}.viewport-flip{-webkit-perspective:1000;-moz-perspective:1000;perspective:1000;position:absolute}.flip{-webkit-backface-visibility:hidden;-webkit-transform:translateX(0);-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)}}.viewport-turn{-webkit-perspective:200px;-moz-perspective:200px;-ms-perspective:200px;perspective:200px;position:absolute}.turn{-webkit-backface-visibility:hidden;-webkit-transform:translateX(0);-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{-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)}}.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}.ui-grid-solo .ui-block-a{display:block;float:none}.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}.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}.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}.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}@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}}.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}.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}.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}.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-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}.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}.ui-mini.ui-btn-icon-bottom .ui-btn-inner,.ui-mini .ui-btn-icon-bottom .ui-btn-inner{padding-bottom:30px}.ui-btn-inner{-webkit-border-radius:inherit;border-radius:inherit}.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}.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:0;text-indent:-9999px}.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:400;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:0;background-image:none}.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:400;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}.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}.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}.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}.ui-dialog-contain{width:92.5%;max-width:500px;margin:10% auto 15px;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:0;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}.ui-popup-screen{background-image:url(data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==);top:0;left:0;right:0;bottom:1px;position:absolute;filter:Alpha(Opacity=0);opacity:0;z-index:1099}.ui-popup-screen.in{opacity:.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:700;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:400;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}.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;overflow:visible}.ui-field-contain:last-child{border-bottom-width:0}.ui-field-contain{max-width:100%}@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}.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}.ui-select .ui-disabled select{display:none}@-moz-document url-prefix(){.ui-select .ui-btn select{opacity:.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}label.ui-select{font-size:16px;line-height:1.4;font-weight:400;margin:0 0 .3em;display:block}.ui-select .ui-btn-text,.ui-selectmenu .ui-btn-text{display:block;min-height:1em;overflow:hidden!important}.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:.6em 46px .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%}}.ui-selectmenu .ui-header h1:after{content:'.';visibility:hidden}label.ui-input-text{font-size:16px;line-height:1.4;display:block;font-weight:400;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:0;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}input::-moz-placeholder,textarea::-moz-placeholder{color:#aaa}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}.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:0;border-width:0;height:0}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:700}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:400;counter-increment:listnumbering;content:counter(listnumbering) ". "}ol.ui-listview .ui-li-jsnumbering:before{content:""!important}.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:700;display:block;margin:.6em 0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ui-li-desc{font-size:12px;font-weight:400;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:700;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}@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:400;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}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:700;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:0;height:100%}.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:0}select.ui-slider-switch{display:none}div.ui-slider-switch{display:inline-block;height:32px;width:5.8em;margin:.5em 0;top:0}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:0}.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:700}.ui-table caption{text-align:left;margin-bottom:1.4em;opacity:.5}.table-stroke thead th{border-bottom:1px solid #d6d6d6;border-bottom:1px solid rgba(0,0,0,.1)}.table-stroke tbody th,.table-stroke tbody td{border-bottom:1px solid #e6e6e6;border-bottom:1px solid rgba(0,0,0,.05)}.table-stripe tbody tr:nth-child(odd) td,.table-stripe tbody tr:nth-child(odd) th{background-color:#eee;background-color:rgba(0,0,0,.04)}.table-stripe thead th,.table-stripe tbody tr:last-child{border-bottom:1px solid #d6d6d6;border-bottom:1px solid rgba(0,0,0,.1)}.ui-table-columntoggle-btn{float:right;margin-bottom:.8em}.ui-table-columntoggle-popup fieldset{margin:0}@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}}@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}}@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}}@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}}@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}}@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}}@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}}.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}.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}.ui-table-reflow td .ui-table-cell-label,.ui-table-reflow th .ui-table-cell-label{display:none}@media only all{.ui-table-reflow thead td,.ui-table-reflow thead th{display:none}.ui-table-reflow td,.ui-table-reflow th{text-align:left;display:block}.ui-table-reflow tbody th{margin-top:3em}.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}.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:400}}@media (min-width:35em){.ui-table-reflow.ui-responsive{display:table-row-group}.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}.ui-table-reflow.ui-responsive td .ui-table-cell-label,.ui-table-reflow.ui-responsive th .ui-table-cell-label{display:none}}@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}}.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;padding-bottom:1px}.ui-panel-display-overlay{z-index:1001}.ui-panel-display-reveal{z-index:0}.ui-panel-display-push{z-index:999}.ui-panel-inner{padding:15px}.ui-panel-content-wrap{position:relative;left:0;min-height:inherit;border:0;z-index:999}.ui-panel-content-wrap-display-overlay,.ui-panel-animate.ui-panel-content-wrap>.ui-header,.ui-panel-content-wrap-closed{position:static}.ui-panel-dismiss{position:absolute;top:0;left:0;height:100%;width:100%;z-index:1002;display:none}.ui-panel-dismiss-open{display:block}.ui-panel-animate{-webkit-transition:-webkit-transform 350ms ease;-moz-transition:-moz-transform 350ms ease;transition:transform 350ms ease}.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)}.ui-panel-position-left{left:-17em}.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)}.ui-panel-position-left.ui-panel-display-reveal,.ui-panel-position-left.ui-panel-open{left:0}.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}.ui-panel-position-right{right:-17em}.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)}.ui-panel-position-right.ui-panel-display-reveal,.ui-panel-position-right.ui-panel-open{right:0}.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}.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}.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)}.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}.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)}.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}.ui-page-active.ui-page-panel{overflow-x:hidden}.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}@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}}
\ No newline at end of file
追加: branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/jquery.mobile-1.3.1.min.js
===================================================================
--- branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/jquery.mobile-1.3.1.min.js (rev 0)
+++ branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/jquery.mobile-1.3.1.min.js 2013-05-19 20:42:41 UTC (rev 22825)
@@ -0,0 +1,7 @@
+/*! jQuery Mobile 1.3.1 | Git HEAD hash: 74b4bec <> 2013-04-10T21:57:23Z | (c) 2010, 2013 jQuery Foundation, Inc. | jquery.org/license */
+(function(e,t,i){"function"==typeof define&&define.amd?define(["jquery"],function(n){return i(n,e,t),n.mobile}):i(e.jQuery,e,t)})(this,document,function(e,t,i,n){(function(e){e.mobile={}})(e),function(e,t,n){var a={};e.mobile=e.extend(e.mobile,{version:"1.3.1",ns:"",subPageUrlKey:"ui-page",activePageClass:"ui-page-active",activeBtnClass:"ui-btn-active",focusClass:"ui-focus",ajaxEnabled:!0,hashListeningEnabled:!0,linkBindingEnabled:!0,defaultPageTransition:"fade",maxTransitionWidth:!1,minScrollBack:250,touchOverflowEnabled:!1,defaultDialogTransition:"pop",pageLoadErrorMessage:"Error Loading Page",pageLoadErrorMessageTheme:"e",phonegapNavigationEnabled:!1,autoInitializePage:!0,pushStateEnabled:!0,ignoreContentEnabled:!1,orientationChangeEnabled:!0,buttonMarkup:{hoverDelay:200},window:e(t),document:e(i),keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,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},behaviors:{},silentScroll:function(i){"number"!==e.type(i)&&(i=e.mobile.defaultHomeScroll),e.event.special.scrollstart.enabled=!1,setTimeout(function(){t.scrollTo(0,i),e.mobile.document.trigger("silentscroll",{x:0,y:i})},20),setTimeout(function(){e.event.special.scrollstart.enabled=!0},150)},nsNormalizeDict:a,nsNormalize:function(t){return t?a[t]||(a[t]=e.camelCase(e.mobile.ns+t)):n},getInheritedTheme:function(e,t){for(var i,n,a=e[0],o="",s=/ui-(bar|body|overlay)-([a-z])\b/;a&&(i=a.className||"",!(i&&(n=s.exec(i))&&(o=n[2])));)a=a.parentNode;return o||t||"a"},closestPageData:function(e){return e.closest(':jqmData(role="page"), :jqmData(role="dialog")').data("mobile-page")},enhanceable:function(e){return this.haveParents(e,"enhance")},hijackable:function(e){return this.haveParents(e,"ajax")},haveParents:function(t,i){if(!e.mobile.ignoreContentEnabled)return t;for(var n,a,o,s=t.length,r=e(),l=0;s>l;l++){for(a=t.eq(l),o=!1,n=t[l];n;){var d=n.getAttribute?n.getAttribute("data-"+e.mobile.ns+i):"";if("false"===d){o=!0;break}n=n.parentNode}o||(r=r.add(a))}return r},getScreenHeight:function(){return t.innerHeight||e.mobile.window.height()}},e.mobile),e.fn.jqmData=function(t,i){var a;return t!==n&&(t&&(t=e.mobile.nsNormalize(t)),a=2>arguments.length||i===n?this.data(t):this.data(t,i)),a},e.jqmData=function(t,i,a){var o;return i!==n&&(o=e.data(t,i?e.mobile.nsNormalize(i):i,a)),o},e.fn.jqmRemoveData=function(t){return this.removeData(e.mobile.nsNormalize(t))},e.jqmRemoveData=function(t,i){return e.removeData(t,e.mobile.nsNormalize(i))},e.fn.removeWithDependents=function(){e.removeWithDependents(this)},e.removeWithDependents=function(t){var i=e(t);(i.jqmData("dependents")||e()).remove(),i.remove()},e.fn.addDependents=function(t){e.addDependents(e(this),t)},e.addDependents=function(t,i){var n=e(t).jqmData("dependents")||e();e(t).jqmData("dependents",e.merge(n,i))},e.fn.getEncodedText=function(){return e("<div/>").text(e(this).text()).html()},e.fn.jqmEnhanceable=function(){return e.mobile.enhanceable(this)},e.fn.jqmHijackable=function(){return e.mobile.hijackable(this)};var o=e.find,s=/:jqmData\(([^)]*)\)/g;e.find=function(t,i,n,a){return t=t.replace(s,"[data-"+(e.mobile.ns||"")+"$1]"),o.call(this,t,i,n,a)},e.extend(e.find,o),e.find.matches=function(t,i){return e.find(t,null,null,i)},e.find.matchesSelector=function(t,i){return e.find(i,null,null,[t]).length>0}}(e,this),function(e,t){var i=0,n=Array.prototype.slice,a=e.cleanData;e.cleanData=function(t){for(var i,n=0;null!=(i=t[n]);n++)try{e(i).triggerHandler("remove")}catch(o){}a(t)},e.widget=function(i,n,a){var o,s,r,l,d=i.split(".")[0];i=i.split(".")[1],o=d+"-"+i,a||(a=n,n=e.Widget),e.expr[":"][o.toLowerCase()]=function(t){return!!e.data(t,o)},e[d]=e[d]||{},s=e[d][i],r=e[d][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new r(e,i)},e.extend(r,s,{version:a.version,_proto:e.extend({},a),_childConstructors:[]}),l=new n,l.options=e.widget.extend({},l.options),e.each(a,function(t,i){e.isFunction(i)&&(a[t]=function(){var e=function(){return n.prototype[t].apply(this,arguments)},a=function(e){return n.prototype[t].apply(this,e)};return function(){var t,n=this._super,o=this._superApply;return this._super=e,this._superApply=a,t=i.apply(this,arguments),this._super=n,this._superApply=o,t}}())}),r.prototype=e.widget.extend(l,{widgetEventPrefix:s?l.widgetEventPrefix:i},a,{constructor:r,namespace:d,widgetName:i,widgetFullName:o}),s?(e.each(s._childConstructors,function(t,i){var n=i.prototype;e.widget(n.namespace+"."+n.widgetName,r,i._proto)}),delete s._childConstructors):n._childConstructors.push(r),e.widget.bridge(i,r)},e.widget.extend=function(i){for(var a,o,s=n.call(arguments,1),r=0,l=s.length;l>r;r++)for(a in s[r])o=s[r][a],s[r].hasOwnProperty(a)&&o!==t&&(i[a]=e.isPlainObject(o)?e.isPlainObject(i[a])?e.widget.extend({},i[a],o):e.widget.extend({},o):o);return i},e.widget.bridge=function(i,a){var o=a.prototype.widgetFullName||i;e.fn[i]=function(s){var r="string"==typeof s,l=n.call(arguments,1),d=this;return s=!r&&l.length?e.widget.extend.apply(null,[s].concat(l)):s,r?this.each(function(){var n,a=e.data(this,o);return a?e.isFunction(a[s])&&"_"!==s.charAt(0)?(n=a[s].apply(a,l),n!==a&&n!==t?(d=n&&n.jquery?d.pushStack(n.get()):n,!1):t):e.error("no such method '"+s+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+s+"'")}):this.each(function(){var t=e.data(this,o);t?t.option(s||{})._init():e.data(this,o,new a(s,this))}),d}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,n){n=e(n||this.defaultElement||this)[0],this.element=e(n),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),n!==this&&(e.data(n,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===n&&this.destroy()}}),this.document=e(n.style?n.ownerDocument:n.document||n),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(i,n){var a,o,s,r=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(r={},a=i.split("."),i=a.shift(),a.length){for(o=r[i]=e.widget.extend({},this.options[i]),s=0;a.length-1>s;s++)o[a[s]]=o[a[s]]||{},o=o[a[s]];if(i=a.pop(),n===t)return o[i]===t?null:o[i];o[i]=n}else{if(n===t)return this.options[i]===t?null:this.options[i];r[i]=n}return this._setOptions(r),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,n,a){var o,s=this;"boolean"!=typeof i&&(a=n,n=i,i=!1),a?(n=o=e(n),this.bindings=this.bindings.add(n)):(a=n,n=this.element,o=this.widget()),e.each(a,function(a,r){function l(){return i||s.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof r?s[r]:r).apply(s,arguments):t}"string"!=typeof r&&(l.guid=r.guid=r.guid||l.guid||e.guid++);var d=a.match(/^(\w+)\s*(.*)$/),c=d[1]+s.eventNamespace,h=d[2];h?o.delegate(h,c,l):n.bind(c,l)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?n[e]:e).apply(n,arguments)}var n=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,n){var a,o,s=this.options[t];if(n=n||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(a in o)a in i||(i[a]=o[a]);return this.element.trigger(i,n),!(e.isFunction(s)&&s.apply(this.element[0],[i].concat(n))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(n,a,o){"string"==typeof a&&(a={effect:a});var s,r=a?a===!0||"number"==typeof a?i:a.effect||i:t;a=a||{},"number"==typeof a&&(a={duration:a}),s=!e.isEmptyObject(a),a.complete=o,a.delay&&n.delay(a.delay),s&&e.effects&&e.effects.effect[r]?n[t](a):r!==t&&n[r]?n[r](a.duration,a.easing,o):n.queue(function(i){e(this)[t](),o&&o.call(n[0]),i()})}})}(e),function(e,t){e.widget("mobile.widget",{_createWidget:function(){e.Widget.prototype._createWidget.apply(this,arguments),this._trigger("init")},_getCreateOptions:function(){var i=this.element,n={};return e.each(this.options,function(e){var a=i.jqmData(e.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()}));a!==t&&(n[e]=a)}),n},enhanceWithin:function(t,i){this.enhance(e(this.options.initSelector,e(t)),i)},enhance:function(t,i){var n,a,o=e(t);o=e.mobile.enhanceable(o),i&&o.length&&(n=e.mobile.closestPageData(o),a=n&&n.keepNativeSelector()||"",o=o.not(a)),o[this.widgetName]()},raise:function(e){throw"Widget ["+this.widgetName+"]: "+e}})}(e),function(e){e.extend(e.mobile,{loadingMessageTextVisible:n,loadingMessageTheme:n,loadingMessage:n,showPageLoadingMsg:function(t,i,n){e.mobile.loading("show",t,i,n)},hidePageLoadingMsg:function(){e.mobile.loading("hide")},loading:function(){this.loaderWidget.loader.apply(this.loaderWidget,arguments)}});var t="ui-loader",i=e("html"),a=e.mobile.window;e.widget("mobile.loader",{options:{theme:"a",textVisible:!1,html:"",text:"loading"},defaultHtml:"<div class='"+t+"'>"+"<span class='ui-icon ui-icon-loading'></span>"+"<h1></h1>"+"</div>",fakeFixLoader:function(){var t=e("."+e.mobile.activeBtnClass).first();this.element.css({top:e.support.scrollTop&&a.scrollTop()+a.height()/2||t.length&&t.offset().top||100})},checkLoaderPosition:function(){var t=this.element.offset(),i=a.scrollTop(),n=e.mobile.getScreenHeight();(i>t.top||t.top-i>n)&&(this.element.addClass("ui-loader-fakefix"),this.fakeFixLoader(),a.unbind("scroll",this.checkLoaderPosition).bind("scroll",e.proxy(this.fakeFixLoader,this)))},resetHtml:function(){this.element.html(e(this.defaultHtml).html())},show:function(o,s,r){var l,d,c;this.resetHtml(),"object"===e.type(o)?(c=e.extend({},this.options,o),o=c.theme||e.mobile.loadingMessageTheme):(c=this.options,o=o||e.mobile.loadingMessageTheme||c.theme),d=s||e.mobile.loadingMessage||c.text,i.addClass("ui-loading"),(e.mobile.loadingMessage!==!1||c.html)&&(l=e.mobile.loadingMessageTextVisible!==n?e.mobile.loadingMessageTextVisible:c.textVisible,this.element.attr("class",t+" ui-corner-all ui-body-"+o+" ui-loader-"+(l||s||o.text?"verbose":"default")+(c.textonly||r?" ui-loader-textonly":"")),c.html?this.element.html(c.html):this.element.find("h1").text(d),this.element.appendTo(e.mobile.pageContainer),this.checkLoaderPosition(),a.bind("scroll",e.proxy(this.checkLoaderPosition,this)))},hide:function(){i.removeClass("ui-loading"),e.mobile.loadingMessage&&this.element.removeClass("ui-loader-fakefix"),e.mobile.window.unbind("scroll",this.fakeFixLoader),e.mobile.window.unbind("scroll",this.checkLoaderPosition)}}),a.bind("pagecontainercreate",function(){e.mobile.loaderWidget=e.mobile.loaderWidget||e(e.mobile.loader.prototype.defaultHtml).loader()})}(e,this),function(e,t,n){function a(e){return e=e||location.href,"#"+e.replace(/^[^#]*#?(.*)$/,"$1")}var o,s="hashchange",r=i,l=e.event.special,d=r.documentMode,c="on"+s in t&&(d===n||d>7);e.fn[s]=function(e){return e?this.bind(s,e):this.trigger(s)},e.fn[s].delay=50,l[s]=e.extend(l[s],{setup:function(){return c?!1:(e(o.start),n)},teardown:function(){return c?!1:(e(o.stop),n)}}),o=function(){function i(){var n=a(),r=p(d);n!==d?(u(d=n,r),e(t).trigger(s)):r!==d&&(location.href=location.href.replace(/#.*/,"")+r),o=setTimeout(i,e.fn[s].delay)}var o,l={},d=a(),h=function(e){return e},u=h,p=h;return l.start=function(){o||i()},l.stop=function(){o&&clearTimeout(o),o=n},t.attachEvent&&!t.addEventListener&&!c&&function(){var t,n;l.start=function(){t||(n=e.fn[s].src,n=n&&n+a(),t=e('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){n||u(a()),i()}).attr("src",n||"javascript:0").insertAfter("body")[0].contentWindow,r.onpropertychange=function(){try{"title"===event.propertyName&&(t.document.title=r.title)}catch(e){}})},l.stop=h,p=function(){return a(t.location.href)},u=function(i,n){var a=t.document,o=e.fn[s].domain;i!==n&&(a.title=r.title,a.open(),o&&a.write('<script>document.domain="'+o+'"</script>'),a.close(),t.location.hash=i)}}(),l}()}(e,this),function(e){t.matchMedia=t.matchMedia||function(e){var t,i=e.documentElement,n=i.firstElementChild||i.firstChild,a=e.createElement("body"),o=e.createElement("div");return o.id="mq-test-1",o.style.cssText="position:absolute;top:-100em",a.style.background="none",a.appendChild(o),function(e){return o.innerHTML='­<style media="'+e+'"> #mq-test-1 { width: 42px; }</style>',i.insertBefore(a,n),t=42===o.offsetWidth,i.removeChild(a),{matches:t,media:e}}}(i),e.mobile.media=function(e){return t.matchMedia(e).matches}}(e),function(e){var t={touch:"ontouchend"in i};e.mobile.support=e.mobile.support||{},e.extend(e.support,t),e.extend(e.mobile.support,t)}(e),function(e){e.extend(e.support,{orientation:"orientation"in t&&"onorientationchange"in t})}(e),function(e,n){function a(e){var t=e.charAt(0).toUpperCase()+e.substr(1),i=(e+" "+p.join(t+" ")+t).split(" ");for(var a in i)if(u[i[a]]!==n)return!0}function o(e,t,n){for(var a,o=i.createElement("div"),s=function(e){return e.charAt(0).toUpperCase()+e.substr(1)},r=function(e){return""===e?"":"-"+e.charAt(0).toLowerCase()+e.substr(1)+"-"},l=function(i){var n=r(i)+e+": "+t+";",l=s(i),d=l+(""===l?e:s(e));o.setAttribute("style",n),o.style[d]&&(a=!0)},d=n?n:p,c=0;d.length>c;c++)l(d[c]);return!!a}function s(){var a="transform-3d",o=e.mobile.media("(-"+p.join("-"+a+"),(-")+"-"+a+"),("+a+")");if(o)return!!o;var s=i.createElement("div"),r={MozTransform:"-moz-transform",transform:"transform"};h.append(s);for(var l in r)s.style[l]!==n&&(s.style[l]="translate3d( 100px, 1px, 1px )",o=t.getComputedStyle(s).getPropertyValue(r[l]));return!!o&&"none"!==o}function r(){var t,i,n=location.protocol+"//"+location.host+location.pathname+"ui-dir/",a=e("head base"),o=null,s="";return a.length?s=a.attr("href"):a=o=e("<base>",{href:n}).appendTo("head"),t=e("<a href='testurl' />").prependTo(h),i=t[0].href,a[0].href=s||location.pathname,o&&o.remove(),0===i.indexOf(n)}function l(){var e,n=i.createElement("x"),a=i.documentElement,o=t.getComputedStyle;return"pointerEvents"in n.style?(n.style.pointerEvents="auto",n.style.pointerEvents="x",a.appendChild(n),e=o&&"auto"===o(n,"").pointerEvents,a.removeChild(n),!!e):!1}function d(){var e=i.createElement("div");return e.getBoundingClientRect!==n}function c(){var e=t,i=navigator.userAgent,n=navigator.platform,a=i.match(/AppleWebKit\/([0-9]+)/),o=!!a&&a[1],s=i.match(/Fennec\/([0-9]+)/),r=!!s&&s[1],l=i.match(/Opera Mobi\/([0-9]+)/),d=!!l&&l[1];return(n.indexOf("iPhone")>-1||n.indexOf("iPad")>-1||n.indexOf("iPod")>-1)&&o&&534>o||e.operamini&&"[object OperaMini]"==={}.toString.call(e.operamini)||l&&7458>d||i.indexOf("Android")>-1&&o&&533>o||r&&6>r||"palmGetResource"in t&&o&&534>o||i.indexOf("MeeGo")>-1&&i.indexOf("NokiaBrowser/8.5.0")>-1?!1:!0}var h=e("<body>").prependTo("html"),u=h[0].style,p=["Webkit","Moz","O"],m="palmGetResource"in t,f=t.opera,g=t.operamini&&"[object OperaMini]"==={}.toString.call(t.operamini),b=t.blackberry&&!a("-webkit-transform");e.extend(e.mobile,{browser:{}}),e.mobile.browser.oldIE=function(){var e=3,t=i.createElement("div"),n=t.all||[];do t.innerHTML="<!--[if gt IE "+ ++e+"]><br><![endif]-->";while(n[0]);return e>4?e:!e}(),e.extend(e.support,{cssTransitions:"WebKitTransitionEvent"in t||o("transition","height 100ms linear",["Webkit","Moz",""])&&!e.mobile.browser.oldIE&&!f,pushState:"pushState"in history&&"replaceState"in history&&!(t.navigator.userAgent.indexOf("Firefox")>=0&&t.top!==t)&&-1===t.navigator.userAgent.search(/CriOS/),mediaquery:e.mobile.media("only all"),cssPseudoElement:!!a("content"),touchOverflow:!!a("overflowScrolling"),cssTransform3d:s(),boxShadow:!!a("boxShadow")&&!b,fixedPosition:c(),scrollTop:("pageXOffset"in t||"scrollTop"in i.documentElement||"scrollTop"in h[0])&&!m&&!g,dynamicBaseTag:r(),cssPointerEvents:l(),boundingRect:d()}),h.remove();var v=function(){var e=t.navigator.userAgent;return e.indexOf("Nokia")>-1&&(e.indexOf("Symbian/3")>-1||e.indexOf("Series60/5")>-1)&&e.indexOf("AppleWebKit")>-1&&e.match(/(BrowserNG|NokiaBrowser)\/7\.[0-3]/)}();e.mobile.gradeA=function(){return(e.support.mediaquery||e.mobile.browser.oldIE&&e.mobile.browser.oldIE>=7)&&(e.support.boundingRect||null!==e.fn.jquery.match(/1\.[0-7+]\.[0-9+]?/))},e.mobile.ajaxBlacklist=t.blackberry&&!t.WebKitPoint||g||v,v&&e(function(){e("head link[rel='stylesheet']").attr("rel","alternate stylesheet").attr("rel","stylesheet")}),e.support.boxShadow||e("html").addClass("ui-mobile-nosupport-boxshadow")}(e),function(e,t){var i,n=e.mobile.window;e.event.special.navigate=i={bound:!1,pushStateEnabled:!0,originalEventName:t,isPushStateEnabled:function(){return e.support.pushState&&e.mobile.pushStateEnabled===!0&&this.isHashChangeEnabled()},isHashChangeEnabled:function(){return e.mobile.hashListeningEnabled===!0},popstate:function(t){var i=new e.Event("navigate"),a=new e.Event("beforenavigate"),o=t.originalEvent.state||{};location.href,n.trigger(a),a.isDefaultPrevented()||(t.historyState&&e.extend(o,t.historyState),i.originalEvent=t,setTimeout(function(){n.trigger(i,{state:o})},0))},hashchange:function(t){var i=new e.Event("navigate"),a=new e.Event("beforenavigate");n.trigger(a),a.isDefaultPrevented()||(i.originalEvent=t,n.trigger(i,{state:t.hashchangeState||{}}))},setup:function(){i.bound||(i.bound=!0,i.isPushStateEnabled()?(i.originalEventName="popstate",n.bind("popstate.navigate",i.popstate)):i.isHashChangeEnabled()&&(i.originalEventName="hashchange",n.bind("hashchange.navigate",i.hashchange)))}}}(e),function(e,i){var n,a,o="&ui-state=dialog";e.mobile.path=n={uiStateKey:"&ui-state",urlParseRE:/^\s*(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/,getLocation:function(e){var t=e?this.parseUrl(e):location,i=this.parseUrl(e||location.href).hash;return i="#"===i?"":i,t.protocol+"//"+t.host+t.pathname+t.search+i},parseLocation:function(){return this.parseUrl(this.getLocation())},parseUrl:function(t){if("object"===e.type(t))return t;var i=n.urlParseRE.exec(t||"")||[];return{href:i[0]||"",hrefNoHash:i[1]||"",hrefNoSearch:i[2]||"",domain:i[3]||"",protocol:i[4]||"",doubleSlash:i[5]||"",authority:i[6]||"",username:i[8]||"",password:i[9]||"",host:i[10]||"",hostname:i[11]||"",port:i[12]||"",pathname:i[13]||"",directory:i[14]||"",filename:i[15]||"",search:i[16]||"",hash:i[17]||""}},makePathAbsolute:function(e,t){if(e&&"/"===e.charAt(0))return e;e=e||"",t=t?t.replace(/^\/|(\/[^\/]*|[^\/]+)$/g,""):"";for(var i=t?t.split("/"):[],n=e.split("/"),a=0;n.length>a;a++){var o=n[a];switch(o){case".":break;case"..":i.length&&i.pop();break;default:i.push(o)}}return"/"+i.join("/")},isSameDomain:function(e,t){return n.parseUrl(e).domain===n.parseUrl(t).domain},isRelativeUrl:function(e){return""===n.parseUrl(e).protocol},isAbsoluteUrl:function(e){return""!==n.parseUrl(e).protocol},makeUrlAbsolute:function(e,t){if(!n.isRelativeUrl(e))return e;t===i&&(t=this.documentBase);var a=n.parseUrl(e),o=n.parseUrl(t),s=a.protocol||o.protocol,r=a.protocol?a.doubleSlash:a.doubleSlash||o.doubleSlash,l=a.authority||o.authority,d=""!==a.pathname,c=n.makePathAbsolute(a.pathname||o.filename,o.pathname),h=a.search||!d&&o.search||"",u=a.hash;return s+r+l+c+h+u},addSearchParams:function(t,i){var a=n.parseUrl(t),o="object"==typeof i?e.param(i):i,s=a.search||"?";return a.hrefNoSearch+s+("?"!==s.charAt(s.length-1)?"&":"")+o+(a.hash||"")},convertUrlToDataUrl:function(e){var i=n.parseUrl(e);return n.isEmbeddedPage(i)?i.hash.split(o)[0].replace(/^#/,"").replace(/\?.*$/,""):n.isSameDomain(i,this.documentBase)?i.hrefNoHash.replace(this.documentBase.domain,"").split(o)[0]:t.decodeURIComponent(e)},get:function(e){return e===i&&(e=n.parseLocation().hash),n.stripHash(e).replace(/[^\/]*\.[^\/*]+$/,"")},set:function(e){location.hash=e},isPath:function(e){return/\//.test(e)},clean:function(e){return e.replace(this.documentBase.domain,"")},stripHash:function(e){return e.replace(/^#/,"")},stripQueryParams:function(e){return e.replace(/\?.*$/,"")},cleanHash:function(e){return n.stripHash(e.replace(/\?.*$/,"").replace(o,""))},isHashValid:function(e){return/^#[^#]+$/.test(e)},isExternal:function(e){var t=n.parseUrl(e);return t.protocol&&t.domain!==this.documentUrl.domain?!0:!1},hasProtocol:function(e){return/^(:?\w+:)/.test(e)},isEmbeddedPage:function(e){var t=n.parseUrl(e);return""!==t.protocol?!this.isPath(t.hash)&&t.hash&&(t.hrefNoHash===this.documentUrl.hrefNoHash||this.documentBaseDiffers&&t.hrefNoHash===this.documentBase.hrefNoHash):/^#/.test(t.href)},squash:function(e,t){var i,a,o,s,r=this.isPath(e),l=this.parseUrl(e),d=l.hash,c="";return t=t||(n.isPath(e)?n.getLocation():n.getDocumentUrl()),a=r?n.stripHash(e):e,a=n.isPath(l.hash)?n.stripHash(l.hash):a,s=a.indexOf(this.uiStateKey),s>-1&&(c=a.slice(s),a=a.slice(0,s)),i=n.makeUrlAbsolute(a,t),o=this.parseUrl(i).search,r?((n.isPath(d)||0===d.replace("#","").indexOf(this.uiStateKey))&&(d=""),c&&-1===d.indexOf(this.uiStateKey)&&(d+=c),-1===d.indexOf("#")&&""!==d&&(d="#"+d),i=n.parseUrl(i),i=i.protocol+"//"+i.host+i.pathname+o+d):i+=i.indexOf("#")>-1?c:"#"+c,i},isPreservableHash:function(e){return 0===e.replace("#","").indexOf(this.uiStateKey)}},n.documentUrl=n.parseLocation(),a=e("head").find("base"),n.documentBase=a.length?n.parseUrl(n.makeUrlAbsolute(a.attr("href"),n.documentUrl.href)):n.documentUrl,n.documentBaseDiffers=n.documentUrl.hrefNoHash!==n.documentBase.hrefNoHash,n.getDocumentUrl=function(t){return t?e.extend({},n.documentUrl):n.documentUrl.href},n.getDocumentBase=function(t){return t?e.extend({},n.documentBase):n.documentBase.href}}(e),function(e,t){e.mobile.path,e.mobile.History=function(e,t){this.stack=e||[],this.activeIndex=t||0},e.extend(e.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]},add:function(e,t){t=t||{},this.getNext()&&this.clearForward(),t.hash&&-1===t.hash.indexOf("#")&&(t.hash="#"+t.hash),t.url=e,this.stack.push(t),this.activeIndex=this.stack.length-1},clearForward:function(){this.stack=this.stack.slice(0,this.activeIndex+1)},find:function(e,t,i){t=t||this.stack;var n,a,o,s=t.length;for(a=0;s>a;a++)if(n=t[a],(decodeURIComponent(e)===decodeURIComponent(n.url)||decodeURIComponent(e)===decodeURIComponent(n.hash))&&(o=a,i))return o;return o},closest:function(e){var i,n=this.activeIndex;return i=this.find(e,this.stack.slice(0,n)),i===t&&(i=this.find(e,this.stack.slice(n),!0),i=i===t?i:i+n),i},direct:function(i){var n=this.closest(i.url),a=this.activeIndex;n!==t&&(this.activeIndex=n,this.previousIndex=a),a>n?(i.present||i.back||e.noop)(this.getActive(),"back"):n>a?(i.present||i.forward||e.noop)(this.getActive(),"forward"):n===t&&i.missing&&i.missing(this.getActive())}})}(e),function(e){var a=e.mobile.path,o=location.href;e.mobile.Navigator=function(t){this.history=t,this.ignoreInitialHashChange=!0,e.mobile.window.bind({"popstate.history":e.proxy(this.popstate,this),"hashchange.history":e.proxy(this.hashchange,this)})},e.extend(e.mobile.Navigator.prototype,{squash:function(n,o){var s,r,l=a.isPath(n)?a.stripHash(n):n;return r=a.squash(n),s=e.extend({hash:l,url:r},o),t.history.replaceState(s,s.title||i.title,r),s},hash:function(e,t){var i,n,o;if(i=a.parseUrl(e),n=a.parseLocation(),n.pathname+n.search===i.pathname+i.search)o=i.hash?i.hash:i.pathname+i.search;else if(a.isPath(e)){var s=a.parseUrl(t);o=s.pathname+s.search+(a.isPreservableHash(s.hash)?s.hash.replace("#",""):"")}else o=e;return o},go:function(n,o,s){var r,l,d,c,h=e.event.special.navigate.isPushStateEnabled();l=a.squash(n),d=this.hash(n,l),s&&d!==a.stripHash(a.parseLocation().hash)&&(this.preventNextHashChange=s),this.preventHashAssignPopState=!0,t.location.hash=d,this.preventHashAssignPopState=!1,r=e.extend({url:l,hash:d,title:i.title},o),h&&(c=new e.Event("popstate"),c.originalEvent={type:"popstate",state:null},this.squash(n,r),s||(this.ignorePopState=!0,e.mobile.window.trigger(c))),this.history.add(r.url,r)},popstate:function(t){var i,s;if(e.event.special.navigate.isPushStateEnabled())return this.preventHashAssignPopState?(this.preventHashAssignPopState=!1,t.stopImmediatePropagation(),n):this.ignorePopState?(this.ignorePopState=!1,n):!t.originalEvent.state&&1===this.history.stack.length&&this.ignoreInitialHashChange&&(this.ignoreInitialHashChange=!1,location.href===o)?(t.preventDefault(),n):(i=a.parseLocation().hash,!t.originalEvent.state&&i?(s=this.squash(i),this.history.add(s.url,s),t.historyState=s,n):(this.history.direct({url:(t.originalEvent.state||{}).url||i,present:function(i,n){t.historyState=e.extend({},i),t.historyState.direction=n}}),n))},hashchange:function(t){var o,s;if(e.event.special.navigate.isHashChangeEnabled()&&!e.event.special.navigate.isPushStateEnabled()){if(this.preventNextHashChange)return this.preventNextHashChange=!1,t.stopImmediatePropagation(),n;o=this.history,s=a.parseLocation().hash,this.history.direct({url:s,present:function(i,n){t.hashchangeState=e.extend({},i),t.hashchangeState.direction=n},missing:function(){o.add(s,{hash:s,title:i.title})}})}}})}(e),function(e){e.mobile.navigate=function(t,i,n){e.mobile.navigate.navigator.go(t,i,n)},e.mobile.navigate.history=new e.mobile.History,e.mobile.navigate.navigator=new e.mobile.Navigator(e.mobile.navigate.history);var t=e.mobile.path.parseLocation();e.mobile.navigate.history.add(t.href,{hash:t.hash})}(e),function(e,t,i,n){function a(e){for(;e&&e.originalEvent!==n;)e=e.originalEvent;return e}function o(t,i){var o,s,r,l,d,c,h,u,p,m=t.type;if(t=e.Event(t),t.type=i,o=t.originalEvent,s=e.event.props,m.search(/^(mouse|click)/)>-1&&(s=q),o)for(h=s.length,l;h;)l=s[--h],t[l]=o[l];if(m.search(/mouse(down|up)|click/)>-1&&!t.which&&(t.which=1),-1!==m.search(/^touch/)&&(r=a(o),m=r.touches,d=r.changedTouches,c=m&&m.length?m[0]:d&&d.length?d[0]:n))for(u=0,p=k.length;p>u;u++)l=k[u],t[l]=c[l];return t}function s(t){for(var i,n,a={};t;){i=e.data(t,T);for(n in i)i[n]&&(a[n]=a.hasVirtualBinding=!0);t=t.parentNode}return a}function r(t,i){for(var n;t;){if(n=e.data(t,T),n&&(!i||n[i]))return t;t=t.parentNode}return null}function l(){M=!1}function d(){M=!0}function c(){U=0,O.length=0,H=!1,d()}function h(){l()}function u(){p(),S=setTimeout(function(){S=0,c()},e.vmouse.resetTimerDuration)}function p(){S&&(clearTimeout(S),S=0)}function m(t,i,n){var a;return(n&&n[t]||!n&&r(i.target,t))&&(a=o(i,t),e(i.target).trigger(a)),a}function f(t){var i=e.data(t.target,D);if(!(H||U&&U===i)){var n=m("v"+t.type,t);n&&(n.isDefaultPrevented()&&t.preventDefault(),n.isPropagationStopped()&&t.stopPropagation(),n.isImmediatePropagationStopped()&&t.stopImmediatePropagation())}}function g(t){var i,n,o=a(t).touches;if(o&&1===o.length&&(i=t.target,n=s(i),n.hasVirtualBinding)){U=L++,e.data(i,D,U),p(),h(),I=!1;var r=a(t).touches[0];A=r.pageX,N=r.pageY,m("vmouseover",t,n),m("vmousedown",t,n)}}function b(e){M||(I||m("vmousecancel",e,s(e.target)),I=!0,u())}function v(t){if(!M){var i=a(t).touches[0],n=I,o=e.vmouse.moveDistanceThreshold,r=s(t.target);I=I||Math.abs(i.pageX-A)>o||Math.abs(i.pageY-N)>o,I&&!n&&m("vmousecancel",t,r),m("vmousemove",t,r),u()}}function _(e){if(!M){d();var t,i=s(e.target);if(m("vmouseup",e,i),!I){var n=m("vclick",e,i);n&&n.isDefaultPrevented()&&(t=a(e).changedTouches[0],O.push({touchID:U,x:t.clientX,y:t.clientY}),H=!0)}m("vmouseout",e,i),I=!1,u()}}function C(t){var i,n=e.data(t,T);if(n)for(i in n)if(n[i])return!0;return!1}function x(){}function y(t){var i=t.substr(1);return{setup:function(){C(this)||e.data(this,T,{});var n=e.data(this,T);n[t]=!0,j[t]=(j[t]||0)+1,1===j[t]&&B.bind(i,f),e(this).bind(i,x),F&&(j.touchstart=(j.touchstart||0)+1,1===j.touchstart&&B.bind("touchstart",g).bind("touchend",_).bind("touchmove",v).bind("scroll",b))},teardown:function(){--j[t],j[t]||B.unbind(i,f),F&&(--j.touchstart,j.touchstart||B.unbind("touchstart",g).unbind("touchmove",v).unbind("touchend",_).unbind("scroll",b));var n=e(this),a=e.data(this,T);a&&(a[t]=!1),n.unbind(i,x),C(this)||n.removeData(T)}}}var w,T="virtualMouseBindings",D="virtualTouchID",P="vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "),k="clientX clientY pageX pageY screenX screenY".split(" "),E=e.event.mouseHooks?e.event.mouseHooks.props:[],q=e.event.props.concat(E),j={},S=0,A=0,N=0,I=!1,O=[],H=!1,M=!1,F="addEventListener"in i,B=e(i),L=1,U=0;e.vmouse={moveDistanceThreshold:10,clickDistanceThreshold:10,resetTimerDuration:1500};for(var z=0;P.length>z;z++)e.event.special[P[z]]=y(P[z]);F&&i.addEventListener("click",function(t){var i,a,o,s,r,l,d=O.length,c=t.target;if(d)for(i=t.clientX,a=t.clientY,w=e.vmouse.clickDistanceThreshold,o=c;o;){for(s=0;d>s;s++)if(r=O[s],l=0,o===c&&w>Math.abs(r.x-i)&&w>Math.abs(r.y-a)||e.data(o,D)===r.touchID)return t.preventDefault(),t.stopPropagation(),n;o=o.parentNode}},!0)}(e,t,i),function(e,t,n){function a(t,i,n){var a=n.type;n.type=i,e.event.dispatch.call(t,n),n.type=a}var o=e(i);e.each("touchstart touchmove touchend tap taphold swipe swipeleft swiperight scrollstart scrollstop".split(" "),function(t,i){e.fn[i]=function(e){return e?this.bind(i,e):this.trigger(i)},e.attrFn&&(e.attrFn[i]=!0)});var s=e.mobile.support.touch,r="touchmove scroll",l=s?"touchstart":"mousedown",d=s?"touchend":"mouseup",c=s?"touchmove":"mousemove";e.event.special.scrollstart={enabled:!0,setup:function(){function t(e,t){i=t,a(o,i?"scrollstart":"scrollstop",e)}var i,n,o=this,s=e(o);s.bind(r,function(a){e.event.special.scrollstart.enabled&&(i||t(a,!0),clearTimeout(n),n=setTimeout(function(){t(a,!1)},50))})}},e.event.special.tap={tapholdThreshold:750,setup:function(){var t=this,i=e(t);i.bind("vmousedown",function(n){function s(){clearTimeout(d)}function r(){s(),i.unbind("vclick",l).unbind("vmouseup",s),o.unbind("vmousecancel",r)}function l(e){r(),c===e.target&&a(t,"tap",e)}if(n.which&&1!==n.which)return!1;var d,c=n.target;n.originalEvent,i.bind("vmouseup",s).bind("vclick",l),o.bind("vmousecancel",r),d=setTimeout(function(){a(t,"taphold",e.Event("taphold",{target:c}))
+},e.event.special.tap.tapholdThreshold)})}},e.event.special.swipe={scrollSupressionThreshold:30,durationThreshold:1e3,horizontalDistanceThreshold:30,verticalDistanceThreshold:75,start:function(t){var i=t.originalEvent.touches?t.originalEvent.touches[0]:t;return{time:(new Date).getTime(),coords:[i.pageX,i.pageY],origin:e(t.target)}},stop:function(e){var t=e.originalEvent.touches?e.originalEvent.touches[0]:e;return{time:(new Date).getTime(),coords:[t.pageX,t.pageY]}},handleSwipe:function(t,i){i.time-t.time<e.event.special.swipe.durationThreshold&&Math.abs(t.coords[0]-i.coords[0])>e.event.special.swipe.horizontalDistanceThreshold&&Math.abs(t.coords[1]-i.coords[1])<e.event.special.swipe.verticalDistanceThreshold&&t.origin.trigger("swipe").trigger(t.coords[0]>i.coords[0]?"swipeleft":"swiperight")},setup:function(){var t=this,i=e(t);i.bind(l,function(t){function a(t){s&&(o=e.event.special.swipe.stop(t),Math.abs(s.coords[0]-o.coords[0])>e.event.special.swipe.scrollSupressionThreshold&&t.preventDefault())}var o,s=e.event.special.swipe.start(t);i.bind(c,a).one(d,function(){i.unbind(c,a),s&&o&&e.event.special.swipe.handleSwipe(s,o),s=o=n})})}},e.each({scrollstop:"scrollstart",taphold:"tap",swipeleft:"swipe",swiperight:"swipe"},function(t,i){e.event.special[t]={setup:function(){e(this).bind(i,e.noop)}}})}(e,this),function(e){e.event.special.throttledresize={setup:function(){e(this).bind("resize",o)},teardown:function(){e(this).unbind("resize",o)}};var t,i,n,a=250,o=function(){i=(new Date).getTime(),n=i-s,n>=a?(s=i,e(this).trigger("throttledresize")):(t&&clearTimeout(t),t=setTimeout(o,a-n))},s=0}(e),function(e,t){function a(){var e=o();e!==s&&(s=e,d.trigger(c))}var o,s,r,l,d=e(t),c="orientationchange",h={0:!0,180:!0};if(e.support.orientation){var u=t.innerWidth||d.width(),p=t.innerHeight||d.height(),m=50;r=u>p&&u-p>m,l=h[t.orientation],(r&&l||!r&&!l)&&(h={"-90":!0,90:!0})}e.event.special.orientationchange=e.extend({},e.event.special.orientationchange,{setup:function(){return e.support.orientation&&!e.event.special.orientationchange.disabled?!1:(s=o(),d.bind("throttledresize",a),n)},teardown:function(){return e.support.orientation&&!e.event.special.orientationchange.disabled?!1:(d.unbind("throttledresize",a),n)},add:function(e){var t=e.handler;e.handler=function(e){return e.orientation=o(),t.apply(this,arguments)}}}),e.event.special.orientationchange.orientation=o=function(){var n=!0,a=i.documentElement;return n=e.support.orientation?h[t.orientation]:a&&1.1>a.clientWidth/a.clientHeight,n?"portrait":"landscape"},e.fn[c]=function(e){return e?this.bind(c,e):this.trigger(c)},e.attrFn&&(e.attrFn[c]=!0)}(e,this),function(e){e.widget("mobile.page",e.mobile.widget,{options:{theme:"c",domCache:!1,keepNativeDefault:":jqmData(role='none'), :jqmData(role='nojs')"},_create:function(){return this._trigger("beforecreate")===!1?!1:(this.element.attr("tabindex","0").addClass("ui-page ui-body-"+this.options.theme),this._on(this.element,{pagebeforehide:"removeContainerBackground",pagebeforeshow:"_handlePageBeforeShow"}),n)},_handlePageBeforeShow:function(){this.setContainerBackground()},removeContainerBackground:function(){e.mobile.pageContainer.removeClass("ui-overlay-"+e.mobile.getInheritedTheme(this.element.parent()))},setContainerBackground:function(t){this.options.theme&&e.mobile.pageContainer.addClass("ui-overlay-"+(t||this.options.theme))},keepNativeSelector:function(){var t=this.options,i=t.keepNative&&e.trim(t.keepNative);return i&&t.keepNative!==t.keepNativeDefault?[t.keepNative,t.keepNativeDefault].join(", "):t.keepNativeDefault}})}(e),function(e,t,i){var n=function(n){return n===i&&(n=!0),function(i,a,o,s){var r=new e.Deferred,l=a?" reverse":"",d=e.mobile.urlHistory.getActive(),c=d.lastScroll||e.mobile.defaultHomeScroll,h=e.mobile.getScreenHeight(),u=e.mobile.maxTransitionWidth!==!1&&e.mobile.window.width()>e.mobile.maxTransitionWidth,p=!e.support.cssTransitions||u||!i||"none"===i||Math.max(e.mobile.window.scrollTop(),c)>e.mobile.getMaxScrollForTransition(),m=" ui-page-pre-in",f=function(){e.mobile.pageContainer.toggleClass("ui-mobile-viewport-transitioning viewport-"+i)},g=function(){e.event.special.scrollstart.enabled=!1,t.scrollTo(0,c),setTimeout(function(){e.event.special.scrollstart.enabled=!0},150)},b=function(){s.removeClass(e.mobile.activePageClass+" out in reverse "+i).height("")},v=function(){n?s.animationComplete(_):_(),s.height(h+e.mobile.window.scrollTop()).addClass(i+" out"+l)},_=function(){s&&n&&b(),C()},C=function(){o.css("z-index",-10),o.addClass(e.mobile.activePageClass+m),e.mobile.focusPage(o),o.height(h+c),g(),o.css("z-index",""),p||o.animationComplete(x),o.removeClass(m).addClass(i+" in"+l),p&&x()},x=function(){n||s&&b(),o.removeClass("out in reverse "+i).height(""),f(),e.mobile.window.scrollTop()!==c&&g(),r.resolve(i,a,o,s,!0)};return f(),s&&!p?v():_(),r.promise()}},a=n(),o=n(!1),s=function(){return 3*e.mobile.getScreenHeight()};e.mobile.defaultTransitionHandler=a,e.mobile.transitionHandlers={"default":e.mobile.defaultTransitionHandler,sequential:a,simultaneous:o},e.mobile.transitionFallbacks={},e.mobile._maybeDegradeTransition=function(t){return t&&!e.support.cssTransform3d&&e.mobile.transitionFallbacks[t]&&(t=e.mobile.transitionFallbacks[t]),t},e.mobile.getMaxScrollForTransition=e.mobile.getMaxScrollForTransition||s}(e,this),function(e,n){function a(t){!f||f.closest("."+e.mobile.activePageClass).length&&!t||f.removeClass(e.mobile.activeBtnClass),f=null}function o(){_=!1,v.length>0&&e.mobile.changePage.apply(null,v.pop())}function s(t,i,n,a){i&&i.data("mobile-page")._trigger("beforehide",null,{nextPage:t}),t.data("mobile-page")._trigger("beforeshow",null,{prevPage:i||e("")}),e.mobile.hidePageLoadingMsg(),n=e.mobile._maybeDegradeTransition(n);var o=e.mobile.transitionHandlers[n||"default"]||e.mobile.defaultTransitionHandler,s=o(n,a,t,i);return s.done(function(){i&&i.data("mobile-page")._trigger("hide",null,{nextPage:t}),t.data("mobile-page")._trigger("show",null,{prevPage:i||e("")})}),s}function r(t,i){i&&t.attr("data-"+e.mobile.ns+"role",i),t.page()}function l(){var t=e.mobile.activePage&&c(e.mobile.activePage);return t||w.hrefNoHash}function d(e){for(;e&&("string"!=typeof e.nodeName||"a"!==e.nodeName.toLowerCase());)e=e.parentNode;return e}function c(t){var i=e(t).closest(".ui-page").jqmData("url"),n=w.hrefNoHash;return i&&p.isPath(i)||(i=n),p.makeUrlAbsolute(i,n)}var h=e.mobile.window,u=(e("html"),e("head")),p=e.extend(e.mobile.path,{getFilePath:function(t){var i="&"+e.mobile.subPageUrlKey;return t&&t.split(i)[0].split(C)[0]},isFirstPageUrl:function(t){var i=p.parseUrl(p.makeUrlAbsolute(t,this.documentBase)),a=i.hrefNoHash===this.documentUrl.hrefNoHash||this.documentBaseDiffers&&i.hrefNoHash===this.documentBase.hrefNoHash,o=e.mobile.firstPage,s=o&&o[0]?o[0].id:n;return a&&(!i.hash||"#"===i.hash||s&&i.hash.replace(/^#/,"")===s)},isPermittedCrossDomainRequest:function(t,i){return e.mobile.allowCrossDomainPages&&"file:"===t.protocol&&-1!==i.search(/^https?:/)}}),m=null,f=null,g=e.Deferred(),b=e.mobile.navigate.history,v=[],_=!1,C="&ui-state=dialog",x=u.children("base"),y=p.documentUrl,w=p.documentBase,T=(p.documentBaseDiffers,e.mobile.getScreenHeight),D=e.support.dynamicBaseTag?{element:x.length?x:e("<base>",{href:w.hrefNoHash}).prependTo(u),set:function(e){e=p.parseUrl(e).hrefNoHash,D.element.attr("href",p.makeUrlAbsolute(e,w))},reset:function(){D.element.attr("href",w.hrefNoSearch)}}:n;e.mobile.getDocumentUrl=p.getDocumentUrl,e.mobile.getDocumentBase=p.getDocumentBase,e.mobile.back=function(){var e=t.navigator;this.phonegapNavigationEnabled&&e&&e.app&&e.app.backHistory?e.app.backHistory():t.history.back()},e.mobile.focusPage=function(e){var t=e.find("[autofocus]"),i=e.find(".ui-title:eq(0)");return t.length?(t.focus(),n):(i.length?i.focus():e.focus(),n)};var P,k,E=!0;P=function(){if(E){var t=e.mobile.urlHistory.getActive();if(t){var i=h.scrollTop();t.lastScroll=e.mobile.minScrollBack>i?e.mobile.defaultHomeScroll:i}}},k=function(){setTimeout(P,100)},h.bind(e.support.pushState?"popstate":"hashchange",function(){E=!1}),h.one(e.support.pushState?"popstate":"hashchange",function(){E=!0}),h.one("pagecontainercreate",function(){e.mobile.pageContainer.bind("pagechange",function(){E=!0,h.unbind("scrollstop",k),h.bind("scrollstop",k)})}),h.bind("scrollstop",k),e.mobile._maybeDegradeTransition=e.mobile._maybeDegradeTransition||function(e){return e},e.mobile.resetActivePageHeight=function(t){var i=e("."+e.mobile.activePageClass),n=parseFloat(i.css("padding-top")),a=parseFloat(i.css("padding-bottom")),o=parseFloat(i.css("border-top-width")),s=parseFloat(i.css("border-bottom-width"));t="number"==typeof t?t:T(),i.css("min-height",t-n-a-o-s)},e.fn.animationComplete=function(t){return e.support.cssTransitions?e(this).one("webkitAnimationEnd animationend",t):(setTimeout(t,0),e(this))},e.mobile.path=p,e.mobile.base=D,e.mobile.urlHistory=b,e.mobile.dialogHashKey=C,e.mobile.allowCrossDomainPages=!1,e.mobile._bindPageRemove=function(){var t=e(this);!t.data("mobile-page").options.domCache&&t.is(":jqmData(external-page='true')")&&t.bind("pagehide.remove",function(){var t=e(this),i=new e.Event("pageremove");t.trigger(i),i.isDefaultPrevented()||t.removeWithDependents()})},e.mobile.loadPage=function(t,i){var a=e.Deferred(),o=e.extend({},e.mobile.loadPage.defaults,i),s=null,d=null,c=p.makeUrlAbsolute(t,l());o.data&&"get"===o.type&&(c=p.addSearchParams(c,o.data),o.data=n),o.data&&"post"===o.type&&(o.reloadPage=!0);var h=p.getFilePath(c),u=p.convertUrlToDataUrl(c);if(o.pageContainer=o.pageContainer||e.mobile.pageContainer,s=o.pageContainer.children("[data-"+e.mobile.ns+"url='"+u+"']"),0===s.length&&u&&!p.isPath(u)&&(s=o.pageContainer.children("#"+u).attr("data-"+e.mobile.ns+"url",u).jqmData("url",u)),0===s.length)if(e.mobile.firstPage&&p.isFirstPageUrl(h))e.mobile.firstPage.parent().length&&(s=e(e.mobile.firstPage));else if(p.isEmbeddedPage(h))return a.reject(c,i),a.promise();if(s.length){if(!o.reloadPage)return r(s,o.role),a.resolve(c,i,s),D&&!i.prefetch&&D.set(t),a.promise();d=s}var m=o.pageContainer,f=new e.Event("pagebeforeload"),g={url:t,absUrl:c,dataUrl:u,deferred:a,options:o};if(m.trigger(f,g),f.isDefaultPrevented())return a.promise();if(o.showLoadMsg)var b=setTimeout(function(){e.mobile.showPageLoadingMsg()},o.loadMsgDelay),v=function(){clearTimeout(b),e.mobile.hidePageLoadingMsg()};return D&&i.prefetch===n&&D.reset(),e.mobile.allowCrossDomainPages||p.isSameDomain(y,c)?e.ajax({url:h,type:o.type,data:o.data,contentType:o.contentType,dataType:"html",success:function(l,m,f){var b=e("<div></div>"),_=l.match(/<title[^>]*>([^<]*)/)&&RegExp.$1,C=RegExp("(<[^>]+\\bdata-"+e.mobile.ns+"role=[\"']?page[\"']?[^>]*>)"),x=RegExp("\\bdata-"+e.mobile.ns+"url=[\"']?([^\"'>]*)[\"']?");if(C.test(l)&&RegExp.$1&&x.test(RegExp.$1)&&RegExp.$1&&(t=h=p.getFilePath(e("<div>"+RegExp.$1+"</div>").text())),D&&i.prefetch===n&&D.set(h),b.get(0).innerHTML=l,s=b.find(":jqmData(role='page'), :jqmData(role='dialog')").first(),s.length||(s=e("<div data-"+e.mobile.ns+"role='page'>"+(l.split(/<\/?body[^>]*>/gim)[1]||"")+"</div>")),_&&!s.jqmData("title")&&(~_.indexOf("&")&&(_=e("<div>"+_+"</div>").text()),s.jqmData("title",_)),!e.support.dynamicBaseTag){var y=p.get(h);s.find("[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]").each(function(){var t=e(this).is("[href]")?"href":e(this).is("[src]")?"src":"action",i=e(this).attr(t);i=i.replace(location.protocol+"//"+location.host+location.pathname,""),/^(\w+:|#|\/)/.test(i)||e(this).attr(t,y+i)})}s.attr("data-"+e.mobile.ns+"url",p.convertUrlToDataUrl(h)).attr("data-"+e.mobile.ns+"external-page",!0).appendTo(o.pageContainer),s.one("pagecreate",e.mobile._bindPageRemove),r(s,o.role),c.indexOf("&"+e.mobile.subPageUrlKey)>-1&&(s=o.pageContainer.children("[data-"+e.mobile.ns+"url='"+u+"']")),o.showLoadMsg&&v(),g.xhr=f,g.textStatus=m,g.page=s,o.pageContainer.trigger("pageload",g),a.resolve(c,i,s,d)},error:function(t,n,s){D&&D.set(p.get()),g.xhr=t,g.textStatus=n,g.errorThrown=s;var r=new e.Event("pageloadfailed");o.pageContainer.trigger(r,g),r.isDefaultPrevented()||(o.showLoadMsg&&(v(),e.mobile.showPageLoadingMsg(e.mobile.pageLoadErrorMessageTheme,e.mobile.pageLoadErrorMessage,!0),setTimeout(e.mobile.hidePageLoadingMsg,1500)),a.reject(c,i))}}):a.reject(c,i),a.promise()},e.mobile.loadPage.defaults={type:"get",data:n,reloadPage:!1,role:n,showLoadMsg:!1,pageContainer:n,loadMsgDelay:50},e.mobile.changePage=function(t,d){if(_)return v.unshift(arguments),n;var c,h=e.extend({},e.mobile.changePage.defaults,d);h.pageContainer=h.pageContainer||e.mobile.pageContainer,h.fromPage=h.fromPage||e.mobile.activePage,c="string"==typeof t;var u=h.pageContainer,m=new e.Event("pagebeforechange"),f={toPage:t,options:h};if(f.absUrl=c?p.makeUrlAbsolute(t,l()):t.data("absUrl"),u.trigger(m,f),!m.isDefaultPrevented()){if(t=f.toPage,c="string"==typeof t,_=!0,c)return h.target=t,e.mobile.loadPage(t,h).done(function(t,i,n,a){_=!1,i.duplicateCachedPage=a,n.data("absUrl",f.absUrl),e.mobile.changePage(n,i)}).fail(function(){a(!0),o(),h.pageContainer.trigger("pagechangefailed",f)}),n;t[0]!==e.mobile.firstPage[0]||h.dataUrl||(h.dataUrl=y.hrefNoHash);var g=h.fromPage,x=h.dataUrl&&p.convertUrlToDataUrl(h.dataUrl)||t.jqmData("url"),w=x,T=(p.getFilePath(x),b.getActive()),D=0===b.activeIndex,P=0,k=i.title,E="dialog"===h.role||"dialog"===t.jqmData("role");if(g&&g[0]===t[0]&&!h.allowSamePageTransition)return _=!1,u.trigger("pagechange",f),h.fromHashChange&&b.direct({url:x}),n;r(t,h.role),h.fromHashChange&&(P="back"===d.direction?-1:1);try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()?e(i.activeElement).blur():e("input:focus, textarea:focus, select:focus").blur()}catch(q){}var j=!1;E&&T&&(T.url&&T.url.indexOf(C)>-1&&e.mobile.activePage&&!e.mobile.activePage.is(".ui-dialog")&&b.activeIndex>0&&(h.changeHash=!1,j=!0),x=T.url||"",x+=!j&&x.indexOf("#")>-1?C:"#"+C,0===b.activeIndex&&x===b.initialDst&&(x+=C));var S=T?t.jqmData("title")||t.children(":jqmData(role='header')").find(".ui-title").text():k;if(S&&k===i.title&&(k=S),t.jqmData("title")||t.jqmData("title",k),h.transition=h.transition||(P&&!D?T.transition:n)||(E?e.mobile.defaultDialogTransition:e.mobile.defaultPageTransition),!P&&j&&(b.getActive().pageUrl=w),x&&!h.fromHashChange){var A;!p.isPath(x)&&0>x.indexOf("#")&&(x="#"+x),A={transition:h.transition,title:k,pageUrl:w,role:h.role},h.changeHash!==!1&&e.mobile.hashListeningEnabled?e.mobile.navigate(x,A,!0):t[0]!==e.mobile.firstPage[0]&&e.mobile.navigate.history.add(x,A)}i.title=k,e.mobile.activePage=t,h.reverse=h.reverse||0>P,s(t,g,h.transition,h.reverse).done(function(i,n,s,r,l){a(),h.duplicateCachedPage&&h.duplicateCachedPage.remove(),l||e.mobile.focusPage(t),o(),u.trigger("pagechange",f)})}},e.mobile.changePage.defaults={transition:n,reverse:!1,changeHash:!0,fromHashChange:!1,role:n,duplicateCachedPage:n,pageContainer:n,showLoadMsg:!0,dataUrl:n,fromPage:n,allowSamePageTransition:!1},e.mobile.navreadyDeferred=e.Deferred(),e.mobile._registerInternalEvents=function(){var i=function(t,i){var a,o,s,r,l=!0;return!e.mobile.ajaxEnabled||t.is(":jqmData(ajax='false')")||!t.jqmHijackable().length||t.attr("target")?!1:(a=t.attr("action"),r=(t.attr("method")||"get").toLowerCase(),a||(a=c(t),"get"===r&&(a=p.parseUrl(a).hrefNoSearch),a===w.hrefNoHash&&(a=y.hrefNoSearch)),a=p.makeUrlAbsolute(a,c(t)),p.isExternal(a)&&!p.isPermittedCrossDomainRequest(y,a)?!1:(i||(o=t.serializeArray(),m&&m[0].form===t[0]&&(s=m.attr("name"),s&&(e.each(o,function(e,t){return t.name===s?(s="",!1):n}),s&&o.push({name:s,value:m.attr("value")}))),l={url:a,options:{type:r,data:e.param(o),transition:t.jqmData("transition"),reverse:"reverse"===t.jqmData("direction"),reloadPage:!0}}),l))};e.mobile.document.delegate("form","submit",function(t){var n=i(e(this));n&&(e.mobile.changePage(n.url,n.options),t.preventDefault())}),e.mobile.document.bind("vclick",function(t){var n,o,s=t.target,r=!1;if(!(t.which>1)&&e.mobile.linkBindingEnabled){if(m=e(s),e.data(s,"mobile-button")){if(!i(e(s).closest("form"),!0))return;s.parentNode&&(s=s.parentNode)}else{if(s=d(s),!s||"#"===p.parseUrl(s.getAttribute("href")||"#").hash)return;if(!e(s).jqmHijackable().length)return}~s.className.indexOf("ui-link-inherit")?s.parentNode&&(o=e.data(s.parentNode,"buttonElements")):o=e.data(s,"buttonElements"),o?s=o.outer:r=!0,n=e(s),r&&(n=n.closest(".ui-btn")),n.length>0&&!n.hasClass("ui-disabled")&&(a(!0),f=n,f.addClass(e.mobile.activeBtnClass))}}),e.mobile.document.bind("click",function(i){if(e.mobile.linkBindingEnabled&&!i.isDefaultPrevented()){var o,s=d(i.target),r=e(s);if(s&&!(i.which>1)&&r.jqmHijackable().length){if(o=function(){t.setTimeout(function(){a(!0)},200)},r.is(":jqmData(rel='back')"))return e.mobile.back(),!1;var l=c(r),h=p.makeUrlAbsolute(r.attr("href")||"#",l);if(!e.mobile.ajaxEnabled&&!p.isEmbeddedPage(h))return o(),n;if(-1!==h.search("#")){if(h=h.replace(/[^#]*#/,""),!h)return i.preventDefault(),n;h=p.isPath(h)?p.makeUrlAbsolute(h,l):p.makeUrlAbsolute("#"+h,y.hrefNoHash)}var u=r.is("[rel='external']")||r.is(":jqmData(ajax='false')")||r.is("[target]"),m=u||p.isExternal(h)&&!p.isPermittedCrossDomainRequest(y,h);if(m)return o(),n;var f=r.jqmData("transition"),g="reverse"===r.jqmData("direction")||r.jqmData("back"),b=r.attr("data-"+e.mobile.ns+"rel")||n;e.mobile.changePage(h,{transition:f,reverse:g,role:b,link:r}),i.preventDefault()}}}),e.mobile.document.delegate(".ui-page","pageshow.prefetch",function(){var t=[];e(this).find("a:jqmData(prefetch)").each(function(){var i=e(this),n=i.attr("href");n&&-1===e.inArray(n,t)&&(t.push(n),e.mobile.loadPage(n,{role:i.attr("data-"+e.mobile.ns+"rel"),prefetch:!0}))})}),e.mobile._handleHashChange=function(i,a){var o=p.stripHash(i),s=0===e.mobile.urlHistory.stack.length?"none":n,r={changeHash:!1,fromHashChange:!0,reverse:"back"===a.direction};if(e.extend(r,a,{transition:(b.getLast()||{}).transition||s}),b.activeIndex>0&&o.indexOf(C)>-1&&b.initialDst!==o){if(e.mobile.activePage&&!e.mobile.activePage.is(".ui-dialog"))return"back"===a.direction?e.mobile.back():t.history.forward(),n;o=a.pageUrl;var l=e.mobile.urlHistory.getActive();e.extend(r,{role:l.role,transition:l.transition,reverse:"back"===a.direction})}o?(o=p.isPath(o)?o:p.makeUrlAbsolute("#"+o,w),o===p.makeUrlAbsolute("#"+b.initialDst,w)&&b.stack.length&&b.stack[0].url!==b.initialDst.replace(C,"")&&(o=e.mobile.firstPage),e.mobile.changePage(o,r)):e.mobile.changePage(e.mobile.firstPage,r)},h.bind("navigate",function(t,i){var n;t.originalEvent&&t.originalEvent.isDefaultPrevented()||(n=e.event.special.navigate.originalEventName.indexOf("hashchange")>-1?i.state.hash:i.state.url,n||(n=e.mobile.path.parseLocation().hash),n&&"#"!==n&&0!==n.indexOf("#"+e.mobile.path.uiStateKey)||(n=location.href),e.mobile._handleHashChange(n,i.state))}),e.mobile.document.bind("pageshow",e.mobile.resetActivePageHeight),e.mobile.window.bind("throttledresize",e.mobile.resetActivePageHeight)},e(function(){g.resolve()}),e.when(g,e.mobile.navreadyDeferred).done(function(){e.mobile._registerInternalEvents()})}(e),function(e){e.mobile.transitionFallbacks.flip="fade"}(e,this),function(e){e.mobile.transitionFallbacks.flow="fade"}(e,this),function(e){e.mobile.transitionFallbacks.pop="fade"}(e,this),function(e){e.mobile.transitionHandlers.slide=e.mobile.transitionHandlers.simultaneous,e.mobile.transitionFallbacks.slide="fade"}(e,this),function(e){e.mobile.transitionFallbacks.slidedown="fade"}(e,this),function(e){e.mobile.transitionFallbacks.slidefade="fade"}(e,this),function(e){e.mobile.transitionFallbacks.slideup="fade"}(e,this),function(e){e.mobile.transitionFallbacks.turn="fade"}(e,this),function(e){e.mobile.page.prototype.options.degradeInputs={color:!1,date:!1,datetime:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:"number",search:"text",tel:!1,time:!1,url:!1,week:!1},e.mobile.document.bind("pagecreate create",function(t){var i,n=e.mobile.closestPageData(e(t.target));n&&(i=n.options,e(t.target).find("input").not(n.keepNativeSelector()).each(function(){var t=e(this),n=this.getAttribute("type"),a=i.degradeInputs[n]||"text";if(i.degradeInputs[n]){var o=e("<div>").html(t.clone()).html(),s=o.indexOf(" type=")>-1,r=s?/\s+type=["']?\w+['"]?/:/\/?>/,l=' type="'+a+'" data-'+e.mobile.ns+'type="'+n+'"'+(s?"":">");t.replaceWith(o.replace(r,l))}}))})}(e),function(e){e.widget("mobile.dialog",e.mobile.widget,{options:{closeBtn:"left",closeBtnText:"Close",overlayTheme:"a",corners:!0,initSelector:":jqmData(role='dialog')"},_handlePageBeforeShow:function(){this._isCloseable=!0,this.options.overlayTheme&&this.element.page("removeContainerBackground").page("setContainerBackground",this.options.overlayTheme)},_create:function(){var t=this.element,i=this.options.corners?" ui-corner-all":"",n=e("<div/>",{role:"dialog","class":"ui-dialog-contain ui-overlay-shadow"+i});t.addClass("ui-dialog ui-overlay-"+this.options.overlayTheme),t.wrapInner(n),t.bind("vclick submit",function(t){var i,n=e(t.target).closest("vclick"===t.type?"a":"form");n.length&&!n.jqmData("transition")&&(i=e.mobile.urlHistory.getActive()||{},n.attr("data-"+e.mobile.ns+"transition",i.transition||e.mobile.defaultDialogTransition).attr("data-"+e.mobile.ns+"direction","reverse"))}),this._on(t,{pagebeforeshow:"_handlePageBeforeShow"}),e.extend(this,{_createComplete:!1}),this._setCloseBtn(this.options.closeBtn)},_setCloseBtn:function(t){var i,n,a=this;this._headerCloseButton&&(this._headerCloseButton.remove(),this._headerCloseButton=null),"none"!==t&&(n="left"===t?"left":"right",i=e("<a href='#' class='ui-btn-"+n+"' data-"+e.mobile.ns+"icon='delete' data-"+e.mobile.ns+"iconpos='notext'>"+this.options.closeBtnText+"</a>"),this.element.children().find(":jqmData(role='header')").first().prepend(i),this._createComplete&&e.fn.buttonMarkup&&i.buttonMarkup(),this._createComplete=!0,i.bind("click",function(){a.close()}),this._headerCloseButton=i)},_setOption:function(e,t){"closeBtn"===e&&this._setCloseBtn(t),this._super(e,t)},close:function(){var t,i,n=e.mobile.navigate.history;this._isCloseable&&(this._isCloseable=!1,e.mobile.hashListeningEnabled&&n.activeIndex>0?e.mobile.back():(t=Math.max(0,n.activeIndex-1),i=n.stack[t].pageUrl||n.stack[t].url,n.previousIndex=n.activeIndex,n.activeIndex=t,e.mobile.path.isPath(i)||(i=e.mobile.path.makeUrlAbsolute("#"+i)),e.mobile.changePage(i,{direction:"back",changeHash:!1,fromHashChange:!0})))}}),e.mobile.document.delegate(e.mobile.dialog.prototype.options.initSelector,"pagecreate",function(){e.mobile.dialog.prototype.enhance(this)})}(e,this),function(e){e.mobile.page.prototype.options.backBtnText="Back",e.mobile.page.prototype.options.addBackBtn=!1,e.mobile.page.prototype.options.backBtnTheme=null,e.mobile.page.prototype.options.headerTheme="a",e.mobile.page.prototype.options.footerTheme="a",e.mobile.page.prototype.options.contentTheme=null,e.mobile.document.bind("pagecreate",function(t){var i=e(t.target),n=i.data("mobile-page").options,a=i.jqmData("role"),o=n.theme;e(":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')",i).jqmEnhanceable().each(function(){var t,s,r,l,d=e(this),c=d.jqmData("role"),h=d.jqmData("theme"),u=h||n.contentTheme||"dialog"===a&&o;if(d.addClass("ui-"+c),"header"===c||"footer"===c){var p=h||("header"===c?n.headerTheme:n.footerTheme)||o;d.addClass("ui-bar-"+p).attr("role","header"===c?"banner":"contentinfo"),"header"===c&&(t=d.children("a, button"),s=t.hasClass("ui-btn-left"),r=t.hasClass("ui-btn-right"),s=s||t.eq(0).not(".ui-btn-right").addClass("ui-btn-left").length,r=r||t.eq(1).addClass("ui-btn-right").length),n.addBackBtn&&"header"===c&&e(".ui-page").length>1&&i.jqmData("url")!==e.mobile.path.stripHash(location.hash)&&!s&&(l=e("<a href='javascript:void(0);' class='ui-btn-left' data-"+e.mobile.ns+"rel='back' data-"+e.mobile.ns+"icon='arrow-l'>"+n.backBtnText+"</a>").attr("data-"+e.mobile.ns+"theme",n.backBtnTheme||p).prependTo(d)),d.children("h1, h2, h3, h4, h5, h6").addClass("ui-title").attr({role:"heading","aria-level":"1"})}else"content"===c&&(u&&d.addClass("ui-body-"+u),d.attr("role","main"))})})}(e),function(e,t){function n(e){for(var t;e&&(t="string"==typeof e.className&&e.className+" ",!(t&&t.indexOf("ui-btn ")>-1&&0>t.indexOf("ui-disabled ")));)e=e.parentNode;return e}function a(n,a,o,s,r){var l=e.data(n[0],"buttonElements");n.removeClass(a).addClass(o),l&&(l.bcls=e(i.createElement("div")).addClass(l.bcls+" "+o).removeClass(a).attr("class"),s!==t&&(l.hover=s),l.state=r)}var o=function(e,i){var n=e.getAttribute(i);return"true"===n?!0:"false"===n?!1:null===n?t:n};e.fn.buttonMarkup=function(n){var a,r=this,l="data-"+e.mobile.ns;n=n&&"object"===e.type(n)?n:{};for(var d=0;r.length>d;d++){var c,h,u,p,m,f,g=r.eq(d),b=g[0],v=e.extend({},e.fn.buttonMarkup.defaults,{icon:n.icon!==t?n.icon:o(b,l+"icon"),iconpos:n.iconpos!==t?n.iconpos:o(b,l+"iconpos"),theme:n.theme!==t?n.theme:o(b,l+"theme")||e.mobile.getInheritedTheme(g,"c"),inline:n.inline!==t?n.inline:o(b,l+"inline"),shadow:n.shadow!==t?n.shadow:o(b,l+"shadow"),corners:n.corners!==t?n.corners:o(b,l+"corners"),iconshadow:n.iconshadow!==t?n.iconshadow:o(b,l+"iconshadow"),mini:n.mini!==t?n.mini:o(b,l+"mini")},n),_="ui-btn-inner",C="ui-btn-text",x=!1,y="up";for(a in v)v[a]===t||null===v[a]?g.removeAttr(l+a):b.setAttribute(l+a,v[a]);for("popup"===o(b,l+"rel")&&g.attr("href")&&(b.setAttribute("aria-haspopup",!0),b.setAttribute("aria-owns",g.attr("href"))),f=e.data("INPUT"===b.tagName||"BUTTON"===b.tagName?b.parentNode:b,"buttonElements"),f?(b=f.outer,g=e(b),u=f.inner,p=f.text,e(f.icon).remove(),f.icon=null,x=f.hover,y=f.state):(u=i.createElement(v.wrapperEls),p=i.createElement(v.wrapperEls)),m=v.icon?i.createElement("span"):null,s&&!f&&s(),v.theme||(v.theme=e.mobile.getInheritedTheme(g,"c")),c="ui-btn ",c+=x?"ui-btn-hover-"+v.theme:"",c+=y?" ui-btn-"+y+"-"+v.theme:"",c+=v.shadow?" ui-shadow":"",c+=v.corners?" ui-btn-corner-all":"",v.mini!==t&&(c+=v.mini===!0?" ui-mini":" ui-fullsize"),v.inline!==t&&(c+=v.inline===!0?" ui-btn-inline":" ui-btn-block"),v.icon&&(v.icon="ui-icon-"+v.icon,v.iconpos=v.iconpos||"left",h="ui-icon "+v.icon,v.iconshadow&&(h+=" ui-icon-shadow")),v.iconpos&&(c+=" ui-btn-icon-"+v.iconpos,"notext"!==v.iconpos||g.attr("title")||g.attr("title",g.getEncodedText())),f&&g.removeClass(f.bcls||""),g.removeClass("ui-link").addClass(c),u.className=_,p.className=C,f||u.appendChild(p),m&&(m.className=h,f&&f.icon||(m.innerHTML=" ",u.appendChild(m)));b.firstChild&&!f;)p.appendChild(b.firstChild);f||b.appendChild(u),f={hover:x,state:y,bcls:c,outer:b,inner:u,text:p,icon:m},e.data(b,"buttonElements",f),e.data(u,"buttonElements",f),e.data(p,"buttonElements",f),m&&e.data(m,"buttonElements",f)}return this},e.fn.buttonMarkup.defaults={corners:!0,shadow:!0,iconshadow:!0,wrapperEls:"span"};var s=function(){var i,o,r=e.mobile.buttonMarkup.hoverDelay;e.mobile.document.bind({"vmousedown vmousecancel vmouseup vmouseover vmouseout focus blur scrollstart":function(s){var l,d=e(n(s.target)),c=s.originalEvent&&/^touch/.test(s.originalEvent.type),h=s.type;d.length&&(l=d.attr("data-"+e.mobile.ns+"theme"),"vmousedown"===h?c?i=setTimeout(function(){a(d,"ui-btn-up-"+l,"ui-btn-down-"+l,t,"down")},r):a(d,"ui-btn-up-"+l,"ui-btn-down-"+l,t,"down"):"vmousecancel"===h||"vmouseup"===h?a(d,"ui-btn-down-"+l,"ui-btn-up-"+l,t,"up"):"vmouseover"===h||"focus"===h?c?o=setTimeout(function(){a(d,"ui-btn-up-"+l,"ui-btn-hover-"+l,!0,"")},r):a(d,"ui-btn-up-"+l,"ui-btn-hover-"+l,!0,""):("vmouseout"===h||"blur"===h||"scrollstart"===h)&&(a(d,"ui-btn-hover-"+l+" ui-btn-down-"+l,"ui-btn-up-"+l,!1,"up"),i&&clearTimeout(i),o&&clearTimeout(o)))},"focusin focus":function(t){e(n(t.target)).addClass(e.mobile.focusClass)},"focusout blur":function(t){e(n(t.target)).removeClass(e.mobile.focusClass)}}),s=null};e.mobile.document.bind("pagecreate create",function(t){e(":jqmData(role='button'), .ui-bar > a, .ui-header > a, .ui-footer > a, .ui-bar > :jqmData(role='controlgroup') > a",t.target).jqmEnhanceable().not("button, input, .ui-btn, :jqmData(role='none'), :jqmData(role='nojs')").buttonMarkup()})}(e),function(e,t){e.widget("mobile.collapsible",e.mobile.widget,{options:{expandCueText:" click to expand contents",collapseCueText:" click to collapse contents",collapsed:!0,heading:"h1,h2,h3,h4,h5,h6,legend",collapsedIcon:"plus",expandedIcon:"minus",iconpos:"left",theme:null,contentTheme:null,inset:!0,corners:!0,mini:!1,initSelector:":jqmData(role='collapsible')"},_create:function(){var i=this.element,n=this.options,a=i.addClass("ui-collapsible"),o=i.children(n.heading).first(),s=a.wrapInner("<div class='ui-collapsible-content'></div>").children(".ui-collapsible-content"),r=i.closest(":jqmData(role='collapsible-set')").addClass("ui-collapsible-set"),l="";o.is("legend")&&(o=e("<div role='heading'>"+o.html()+"</div>").insertBefore(o),o.next().remove()),r.length?(n.theme||(n.theme=r.jqmData("theme")||e.mobile.getInheritedTheme(r,"c")),n.contentTheme||(n.contentTheme=r.jqmData("content-theme")),n.collapsedIcon=i.jqmData("collapsed-icon")||r.jqmData("collapsed-icon")||n.collapsedIcon,n.expandedIcon=i.jqmData("expanded-icon")||r.jqmData("expanded-icon")||n.expandedIcon,n.iconpos=i.jqmData("iconpos")||r.jqmData("iconpos")||n.iconpos,n.inset=r.jqmData("inset")!==t?r.jqmData("inset"):!0,n.corners=!1,n.mini||(n.mini=r.jqmData("mini"))):n.theme||(n.theme=e.mobile.getInheritedTheme(i,"c")),n.inset&&(l+=" ui-collapsible-inset",n.corners&&(l+=" ui-corner-all")),n.contentTheme&&(l+=" ui-collapsible-themed-content",s.addClass("ui-body-"+n.contentTheme)),""!==l&&a.addClass(l),o.insertBefore(s).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:!1,corners:!1,iconpos:n.iconpos,icon:n.collapsedIcon,mini:n.mini,theme:n.theme}),a.bind("expand collapse",function(t){if(!t.isDefaultPrevented()){var i=e(this),a="collapse"===t.type;t.preventDefault(),o.toggleClass("ui-collapsible-heading-collapsed",a).find(".ui-collapsible-heading-status").text(a?n.expandCueText:n.collapseCueText).end().find(".ui-icon").toggleClass("ui-icon-"+n.expandedIcon,!a).toggleClass("ui-icon-"+n.collapsedIcon,a||n.expandedIcon===n.collapsedIcon).end().find("a").first().removeClass(e.mobile.activeBtnClass),i.toggleClass("ui-collapsible-collapsed",a),s.toggleClass("ui-collapsible-content-collapsed",a).attr("aria-hidden",a),s.trigger("updatelayout")}}).trigger(n.collapsed?"collapse":"expand"),o.bind("tap",function(){o.find("a").first().addClass(e.mobile.activeBtnClass)}).bind("click",function(e){var t=o.is(".ui-collapsible-heading-collapsed")?"expand":"collapse";a.trigger(t),e.preventDefault(),e.stopPropagation()})}}),e.mobile.document.bind("pagecreate create",function(t){e.mobile.collapsible.prototype.enhanceWithin(t.target)})}(e),function(e){e.mobile.behaviors.addFirstLastClasses={_getVisibles:function(e,t){var i;return t?i=e.not(".ui-screen-hidden"):(i=e.filter(":visible"),0===i.length&&(i=e.not(".ui-screen-hidden"))),i},_addFirstLastClasses:function(e,t,i){e.removeClass("ui-first-child ui-last-child"),t.eq(0).addClass("ui-first-child").end().last().addClass("ui-last-child"),i||this.element.trigger("updatelayout")}}}(e),function(e,t){e.widget("mobile.collapsibleset",e.mobile.widget,e.extend({options:{initSelector:":jqmData(role='collapsible-set')"},_create:function(){var i=this.element.addClass("ui-collapsible-set"),n=this.options;n.theme||(n.theme=e.mobile.getInheritedTheme(i,"c")),n.contentTheme||(n.contentTheme=i.jqmData("content-theme")),n.corners||(n.corners=i.jqmData("corners")),i.jqmData("inset")!==t&&(n.inset=i.jqmData("inset")),n.inset=n.inset!==t?n.inset:!0,n.corners=n.corners!==t?n.corners:!0,n.corners&&n.inset&&i.addClass("ui-corner-all"),i.jqmData("collapsiblebound")||i.jqmData("collapsiblebound",!0).bind("expand",function(t){var i=e(t.target).closest(".ui-collapsible");i.parent().is(":jqmData(role='collapsible-set')")&&i.siblings(".ui-collapsible").trigger("collapse")})},_init:function(){var e=this.element,t=e.children(":jqmData(role='collapsible')"),i=t.filter(":jqmData(collapsed='false')");
+this._refresh("true"),i.trigger("expand")},_refresh:function(t){var i=this.element.children(":jqmData(role='collapsible')");e.mobile.collapsible.prototype.enhance(i.not(".ui-collapsible")),this._addFirstLastClasses(i,this._getVisibles(i,t),t)},refresh:function(){this._refresh(!1)}},e.mobile.behaviors.addFirstLastClasses)),e.mobile.document.bind("pagecreate create",function(t){e.mobile.collapsibleset.prototype.enhanceWithin(t.target)})}(e),function(e){e.fn.fieldcontain=function(){return this.addClass("ui-field-contain ui-body ui-br").contents().filter(function(){return 3===this.nodeType&&!/\S/.test(this.nodeValue)}).remove()},e(i).bind("pagecreate create",function(t){e(":jqmData(role='fieldcontain')",t.target).jqmEnhanceable().fieldcontain()})}(e),function(e){e.fn.grid=function(t){return this.each(function(){var i,n=e(this),a=e.extend({grid:null},t),o=n.children(),s={solo:1,a:2,b:3,c:4,d:5},r=a.grid;if(!r)if(5>=o.length)for(var l in s)s[l]===o.length&&(r=l);else r="a",n.addClass("ui-grid-duo");i=s[r],n.addClass("ui-grid-"+r),o.filter(":nth-child("+i+"n+1)").addClass("ui-block-a"),i>1&&o.filter(":nth-child("+i+"n+2)").addClass("ui-block-b"),i>2&&o.filter(":nth-child("+i+"n+3)").addClass("ui-block-c"),i>3&&o.filter(":nth-child("+i+"n+4)").addClass("ui-block-d"),i>4&&o.filter(":nth-child("+i+"n+5)").addClass("ui-block-e")})}}(e),function(e,t){e.widget("mobile.navbar",e.mobile.widget,{options:{iconpos:"top",grid:null,initSelector:":jqmData(role='navbar')"},_create:function(){var n=this.element,a=n.find("a"),o=a.filter(":jqmData(icon)").length?this.options.iconpos:t;n.addClass("ui-navbar ui-mini").attr("role","navigation").find("ul").jqmEnhanceable().grid({grid:this.options.grid}),a.buttonMarkup({corners:!1,shadow:!1,inline:!0,iconpos:o}),n.delegate("a","vclick",function(t){var n=e(t.target).is("a")?e(this):e(this).parent("a");if(!n.is(".ui-disabled, .ui-btn-active")){a.removeClass(e.mobile.activeBtnClass),e(this).addClass(e.mobile.activeBtnClass);var o=e(this);e(i).one("pagehide",function(){o.removeClass(e.mobile.activeBtnClass)})}}),n.closest(".ui-page").bind("pagebeforeshow",function(){a.filter(".ui-state-persist").addClass(e.mobile.activeBtnClass)})}}),e.mobile.document.bind("pagecreate create",function(t){e.mobile.navbar.prototype.enhanceWithin(t.target)})}(e),function(e){var t={};e.widget("mobile.listview",e.mobile.widget,e.extend({options:{theme:null,countTheme:"c",headerTheme:"b",dividerTheme:"b",icon:"arrow-r",splitIcon:"arrow-r",splitTheme:"b",corners:!0,shadow:!0,inset:!1,initSelector:":jqmData(role='listview')"},_create:function(){var e=this,t="";t+=e.options.inset?" ui-listview-inset":"",e.options.inset&&(t+=e.options.corners?" ui-corner-all":"",t+=e.options.shadow?" ui-shadow":""),e.element.addClass(function(e,i){return i+" ui-listview"+t}),e.refresh(!0)},_findFirstElementByTagName:function(e,t,i,n){var a={};for(a[i]=a[n]=!0;e;){if(a[e.nodeName])return e;e=e[t]}return null},_getChildrenByTagName:function(t,i,n){var a=[],o={};for(o[i]=o[n]=!0,t=t.firstChild;t;)o[t.nodeName]&&a.push(t),t=t.nextSibling;return e(a)},_addThumbClasses:function(t){var i,n,a=t.length;for(i=0;a>i;i++)n=e(this._findFirstElementByTagName(t[i].firstChild,"nextSibling","img","IMG")),n.length&&(n.addClass("ui-li-thumb"),e(this._findFirstElementByTagName(n[0].parentNode,"parentNode","li","LI")).addClass(n.is(".ui-li-icon")?"ui-li-has-icon":"ui-li-has-thumb"))},refresh:function(t){this.parentPage=this.element.closest(".ui-page"),this._createSubPages();var n,a,o,s,r,l,d,c,h,u,p,m,f=this.options,g=this.element,b=g.jqmData("dividertheme")||f.dividerTheme,v=g.jqmData("splittheme"),_=g.jqmData("spliticon"),C=g.jqmData("icon"),x=this._getChildrenByTagName(g[0],"li","LI"),y=!!e.nodeName(g[0],"ol"),w=!e.support.cssPseudoElement,T=g.attr("start"),D={};y&&w&&g.find(".ui-li-dec").remove(),y&&(T||0===T?w?d=parseInt(T,10):(c=parseInt(T,10)-1,g.css("counter-reset","listnumbering "+c)):w&&(d=1)),f.theme||(f.theme=e.mobile.getInheritedTheme(this.element,"c"));for(var P=0,k=x.length;k>P;P++){if(n=x.eq(P),a="ui-li",t||!n.hasClass("ui-li")){o=n.jqmData("theme")||f.theme,s=this._getChildrenByTagName(n[0],"a","A");var E="list-divider"===n.jqmData("role");s.length&&!E?(p=n.jqmData("icon"),n.buttonMarkup({wrapperEls:"div",shadow:!1,corners:!1,iconpos:"right",icon:s.length>1||p===!1?!1:p||C||f.icon,theme:o}),p!==!1&&1===s.length&&n.addClass("ui-li-has-arrow"),s.first().removeClass("ui-link").addClass("ui-link-inherit"),s.length>1&&(a+=" ui-li-has-alt",r=s.last(),l=v||r.jqmData("theme")||f.splitTheme,m=r.jqmData("icon"),r.appendTo(n).attr("title",e.trim(r.getEncodedText())).addClass("ui-li-link-alt").empty().buttonMarkup({shadow:!1,corners:!1,theme:o,icon:!1,iconpos:"notext"}).find(".ui-btn-inner").append(e(i.createElement("span")).buttonMarkup({shadow:!0,corners:!0,theme:l,iconpos:"notext",icon:m||p||_||f.splitIcon})))):E?(a+=" ui-li-divider ui-bar-"+(n.jqmData("theme")||b),n.attr("role","heading"),y&&(T||0===T?w?d=parseInt(T,10):(h=parseInt(T,10)-1,n.css("counter-reset","listnumbering "+h)):w&&(d=1))):a+=" ui-li-static ui-btn-up-"+o}y&&w&&0>a.indexOf("ui-li-divider")&&(u=a.indexOf("ui-li-static")>0?n:n.find(".ui-link-inherit"),u.addClass("ui-li-jsnumbering").prepend("<span class='ui-li-dec'>"+d++ +". </span>")),D[a]||(D[a]=[]),D[a].push(n[0])}for(a in D)e(D[a]).addClass(a).children(".ui-btn-inner").addClass(a);g.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 t=e(this);t.prependTo(t.parent())}).end().find(".ui-li-count").each(function(){e(this).closest("li").addClass("ui-li-has-count")}).addClass("ui-btn-up-"+(g.jqmData("counttheme")||this.options.countTheme)+" ui-btn-corner-all"),this._addThumbClasses(x),this._addThumbClasses(g.find(".ui-link-inherit")),this._addFirstLastClasses(x,this._getVisibles(x,t),t),this._trigger("afterrefresh")},_idStringEscape:function(e){return e.replace(/[^a-zA-Z0-9]/g,"-")},_createSubPages:function(){var i,a=this.element,o=a.closest(".ui-page"),s=o.jqmData("url"),r=s||o[0][e.expando],l=a.attr("id"),d=this.options,c="data-"+e.mobile.ns,h=this,u=o.find(":jqmData(role='footer')").jqmData("id");if(t[r]===n&&(t[r]=-1),l=l||++t[r],e(a.find("li>ul, li>ol").toArray().reverse()).each(function(t){var n,o,r=e(this),h=r.attr("id")||l+"-"+t,p=r.parent(),m=e(r.prevAll().toArray().reverse()),f=m.length?m:e("<span>"+e.trim(p.contents()[0].nodeValue)+"</span>"),g=f.first().getEncodedText(),b=(s||"")+"&"+e.mobile.subPageUrlKey+"="+h,v=r.jqmData("theme")||d.theme,_=r.jqmData("counttheme")||a.jqmData("counttheme")||d.countTheme;i=!0,n=r.detach().wrap("<div "+c+"role='page' "+c+"url='"+b+"' "+c+"theme='"+v+"' "+c+"count-theme='"+_+"'><div "+c+"role='content'></div></div>").parent().before("<div "+c+"role='header' "+c+"theme='"+d.headerTheme+"'><div class='ui-title'>"+g+"</div></div>").after(u?e("<div "+c+"role='footer' "+c+"id='"+u+"'>"):"").parent().appendTo(e.mobile.pageContainer),n.page(),o=p.find("a:first"),o.length||(o=e("<a/>").html(f||g).prependTo(p.empty())),o.attr("href","#"+b)}).listview(),i&&o.is(":jqmData(external-page='true')")&&o.data("mobile-page").options.domCache===!1){var p=function(t,i){var n,a=i.nextPage,r=new e.Event("pageremove");i.nextPage&&(n=a.jqmData("url"),0!==n.indexOf(s+"&"+e.mobile.subPageUrlKey)&&(h.childPages().remove(),o.trigger(r),r.isDefaultPrevented()||o.removeWithDependents()))};o.unbind("pagehide.remove").bind("pagehide.remove",p)}},childPages:function(){var t=this.parentPage.jqmData("url");return e(":jqmData(url^='"+t+"&"+e.mobile.subPageUrlKey+"')")}},e.mobile.behaviors.addFirstLastClasses)),e.mobile.document.bind("pagecreate create",function(t){e.mobile.listview.prototype.enhanceWithin(t.target)})}(e),function(e){var t=e("meta[name=viewport]"),i=t.attr("content"),n=i+",maximum-scale=1, user-scalable=no",a=i+",maximum-scale=10, user-scalable=yes",o=/(user-scalable[\s]*=[\s]*no)|(maximum-scale[\s]*=[\s]*1)[$,\s]/.test(i);e.mobile.zoom=e.extend({},{enabled:!o,locked:!1,disable:function(i){o||e.mobile.zoom.locked||(t.attr("content",n),e.mobile.zoom.enabled=!1,e.mobile.zoom.locked=i||!1)},enable:function(i){o||e.mobile.zoom.locked&&i!==!0||(t.attr("content",a),e.mobile.zoom.enabled=!0,e.mobile.zoom.locked=!1)},restore:function(){o||(t.attr("content",i),e.mobile.zoom.enabled=!0)}})}(e),function(e){e.widget("mobile.textinput",e.mobile.widget,{options:{theme:null,mini:!1,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:!1,clearSearchButtonText:null,clearBtnText:"clear text",disabled:!1},_create:function(){function t(){setTimeout(function(){a.toggleClass("ui-input-clear-hidden",!s.val())},0)}var i,a,o=this,s=this.element,r=this.options,l=r.theme||e.mobile.getInheritedTheme(this.element,"c"),d=" ui-body-"+l,c=r.mini?" ui-mini":"",h=s.is("[type='search'], :jqmData(type='search')"),u=r.clearSearchButtonText||r.clearBtnText,p=s.is("textarea, :jqmData(type='range')"),m=!!r.clearBtn&&!p,f=s.is("input")&&!s.is(":jqmData(type='range')");if(e("label[for='"+s.attr("id")+"']").addClass("ui-input-text"),i=s.addClass("ui-input-text ui-body-"+l),s[0].autocorrect===n||e.support.touchOverflow||(s[0].setAttribute("autocorrect","off"),s[0].setAttribute("autocomplete","off")),h?i=s.wrap("<div class='ui-input-search ui-shadow-inset ui-btn-corner-all ui-btn-shadow ui-icon-searchfield"+d+c+"'></div>").parent():f&&(i=s.wrap("<div class='ui-input-text ui-shadow-inset ui-corner-all ui-btn-shadow"+d+c+"'></div>").parent()),m||h?(a=e("<a href='#' class='ui-input-clear' title='"+u+"'>"+u+"</a>").bind("click",function(e){s.val("").focus().trigger("change"),a.addClass("ui-input-clear-hidden"),e.preventDefault()}).appendTo(i).buttonMarkup({icon:"delete",iconpos:"notext",corners:!0,shadow:!0,mini:r.mini}),h||i.addClass("ui-input-has-clear"),t(),s.bind("paste cut keyup input focus change blur",t)):f||h||s.addClass("ui-corner-all ui-shadow-inset"+d+c),s.focus(function(){r.preventFocusZoom&&e.mobile.zoom.disable(!0),i.addClass(e.mobile.focusClass)}).blur(function(){i.removeClass(e.mobile.focusClass),r.preventFocusZoom&&e.mobile.zoom.enable(!0)}),s.is("textarea")){var g,b=15,v=100;this._keyup=function(){var e=s[0].scrollHeight,t=s[0].clientHeight;if(e>t){var i=parseFloat(s.css("padding-top")),n=parseFloat(s.css("padding-bottom")),a=i+n;s.height(e-a+b)}},s.on("keyup change input paste",function(){clearTimeout(g),g=setTimeout(o._keyup,v)}),this._on(!0,e.mobile.document,{pagechange:"_keyup"}),e.trim(s.val())&&this._on(!0,e.mobile.window,{load:"_keyup"})}s.attr("disabled")&&this.disable()},disable:function(){var e,t=this.element.is("[type='search'], :jqmData(type='search')"),i=this.element.is("input")&&!this.element.is(":jqmData(type='range')"),n=this.element.attr("disabled",!0)&&(i||t);return e=n?this.element.parent():this.element,e.addClass("ui-disabled"),this._setOption("disabled",!0)},enable:function(){var e,t=this.element.is("[type='search'], :jqmData(type='search')"),i=this.element.is("input")&&!this.element.is(":jqmData(type='range')"),n=this.element.attr("disabled",!1)&&(i||t);return e=n?this.element.parent():this.element,e.removeClass("ui-disabled"),this._setOption("disabled",!1)}}),e.mobile.document.bind("pagecreate create",function(t){e.mobile.textinput.prototype.enhanceWithin(t.target,!0)})}(e),function(e){e.mobile.listview.prototype.options.filter=!1,e.mobile.listview.prototype.options.filterPlaceholder="Filter items...",e.mobile.listview.prototype.options.filterTheme="c",e.mobile.listview.prototype.options.filterReveal=!1;var t=function(e,t){return-1===(""+e).toLowerCase().indexOf(t)};e.mobile.listview.prototype.options.filterCallback=t,e.mobile.document.delegate("ul, ol","listviewcreate",function(){var i=e(this),n=i.data("mobile-listview");if(n&&n.options.filter){n.options.filterReveal&&i.children().addClass("ui-screen-hidden");var a=e("<form>",{"class":"ui-listview-filter ui-bar-"+n.options.filterTheme,role:"search"}).submit(function(e){e.preventDefault(),s.blur()}),o=function(){var a,o=e(this),s=this.value.toLowerCase(),r=null,l=i.children(),d=o.jqmData("lastval")+"",c=!1,h="",u=n.options.filterCallback!==t;if(!d||d!==s){if(n._trigger("beforefilter","beforefilter",{input:this}),o.jqmData("lastval",s),u||s.length<d.length||0!==s.indexOf(d)?r=i.children():(r=i.children(":not(.ui-screen-hidden)"),!r.length&&n.options.filterReveal&&(r=i.children(".ui-screen-hidden"))),s){for(var p=r.length-1;p>=0;p--)a=e(r[p]),h=a.jqmData("filtertext")||a.text(),a.is("li:jqmData(role=list-divider)")?(a.toggleClass("ui-filter-hidequeue",!c),c=!1):n.options.filterCallback(h,s,a)?a.toggleClass("ui-filter-hidequeue",!0):c=!0;r.filter(":not(.ui-filter-hidequeue)").toggleClass("ui-screen-hidden",!1),r.filter(".ui-filter-hidequeue").toggleClass("ui-screen-hidden",!0).toggleClass("ui-filter-hidequeue",!1)}else r.toggleClass("ui-screen-hidden",!!n.options.filterReveal);n._addFirstLastClasses(l,n._getVisibles(l,!1),!1)}},s=e("<input>",{placeholder:n.options.filterPlaceholder}).attr("data-"+e.mobile.ns+"type","search").jqmData("lastval","").bind("keyup change input",o).appendTo(a).textinput();n.options.inset&&a.addClass("ui-listview-filter-inset"),a.bind("submit",function(){return!1}).insertBefore(i)}})}(e),function(e){e.mobile.listview.prototype.options.autodividers=!1,e.mobile.listview.prototype.options.autodividersSelector=function(t){var i=e.trim(t.text())||null;return i?i=i.slice(0,1).toUpperCase():null},e.mobile.document.delegate("ul,ol","listviewcreate",function(){var t=e(this),n=t.data("mobile-listview");if(n&&n.options.autodividers){var a=function(){t.find("li:jqmData(role='list-divider')").remove();for(var a,o,s=t.find("li"),r=null,l=0;s.length>l;l++){if(a=s[l],o=n.options.autodividersSelector(e(a)),o&&r!==o){var d=i.createElement("li");d.appendChild(i.createTextNode(o)),d.setAttribute("data-"+e.mobile.ns+"role","list-divider"),a.parentNode.insertBefore(d,a)}r=o}},o=function(){t.unbind("listviewafterrefresh",o),a(),n.refresh(),t.bind("listviewafterrefresh",o)};o()}})}(e),function(e){e(i).bind("pagecreate create",function(t){e(":jqmData(role='nojs')",t.target).addClass("ui-nojs")})}(e),function(e){e.mobile.behaviors.formReset={_handleFormReset:function(){this._on(this.element.closest("form"),{reset:function(){this._delay("_reset")}})}}}(e),function(e){e.widget("mobile.checkboxradio",e.mobile.widget,e.extend({options:{theme:null,mini:!1,initSelector:"input[type='checkbox'],input[type='radio']"},_create:function(){var t=this,a=this.element,o=this.options,s=function(e,t){return e.jqmData(t)||e.closest("form, fieldset").jqmData(t)},r=e(a).closest("label"),l=r.length?r:e(a).closest("form, fieldset, :jqmData(role='page'), :jqmData(role='dialog')").find("label").filter("[for='"+a[0].id+"']").first(),d=a[0].type,c=s(a,"mini")||o.mini,h=d+"-on",u=d+"-off",p=s(a,"iconpos"),m="ui-"+h,f="ui-"+u;if("checkbox"===d||"radio"===d){e.extend(this,{label:l,inputtype:d,checkedClass:m,uncheckedClass:f,checkedicon:h,uncheckedicon:u}),o.theme||(o.theme=e.mobile.getInheritedTheme(this.element,"c")),l.buttonMarkup({theme:o.theme,icon:u,shadow:!1,mini:c,iconpos:p});var g=i.createElement("div");g.className="ui-"+d,a.add(l).wrapAll(g),l.bind({vmouseover:function(t){e(this).parent().is(".ui-disabled")&&t.stopPropagation()},vclick:function(e){return a.is(":disabled")?(e.preventDefault(),n):(t._cacheVals(),a.prop("checked","radio"===d&&!0||!a.prop("checked")),a.triggerHandler("click"),t._getInputSet().not(a).prop("checked",!1),t._updateAll(),!1)}}),a.bind({vmousedown:function(){t._cacheVals()},vclick:function(){var i=e(this);i.is(":checked")?(i.prop("checked",!0),t._getInputSet().not(i).prop("checked",!1)):i.prop("checked",!1),t._updateAll()},focus:function(){l.addClass(e.mobile.focusClass)},blur:function(){l.removeClass(e.mobile.focusClass)}}),this._handleFormReset(),this.refresh()}},_cacheVals:function(){this._getInputSet().each(function(){e(this).jqmData("cacheVal",this.checked)})},_getInputSet:function(){return"checkbox"===this.inputtype?this.element:this.element.closest("form, :jqmData(role='page'), :jqmData(role='dialog')").find("input[name='"+this.element[0].name+"'][type='"+this.inputtype+"']")},_updateAll:function(){var t=this;this._getInputSet().each(function(){var i=e(this);(this.checked||"checkbox"===t.inputtype)&&i.trigger("change")}).checkboxradio("refresh")},_reset:function(){this.refresh()},refresh:function(){var t=this.element[0],i=" "+e.mobile.activeBtnClass,n=this.checkedClass+(this.element.parents(".ui-controlgroup-horizontal").length?i:""),a=this.label;t.checked?a.removeClass(this.uncheckedClass+i).addClass(n).buttonMarkup({icon:this.checkedicon}):a.removeClass(n).addClass(this.uncheckedClass).buttonMarkup({icon:this.uncheckedicon}),t.disabled?this.disable():this.enable()},disable:function(){this.element.prop("disabled",!0).parent().addClass("ui-disabled")},enable:function(){this.element.prop("disabled",!1).parent().removeClass("ui-disabled")}},e.mobile.behaviors.formReset)),e.mobile.document.bind("pagecreate create",function(t){e.mobile.checkboxradio.prototype.enhanceWithin(t.target,!0)})}(e),function(e){e.widget("mobile.button",e.mobile.widget,{options:{theme:null,icon:null,iconpos:null,corners:!0,shadow:!0,iconshadow:!0,inline:null,mini:null,initSelector:"button, [type='button'], [type='submit'], [type='reset']"},_create:function(){var t,i=this.element,a=function(e){var t,i={};for(t in e)null!==e[t]&&"initSelector"!==t&&(i[t]=e[t]);return i}(this.options),o="";return"A"===i[0].tagName?(i.hasClass("ui-btn")||i.buttonMarkup(),n):(this.options.theme||(this.options.theme=e.mobile.getInheritedTheme(this.element,"c")),~i[0].className.indexOf("ui-btn-left")&&(o="ui-btn-left"),~i[0].className.indexOf("ui-btn-right")&&(o="ui-btn-right"),("submit"===i.attr("type")||"reset"===i.attr("type"))&&(o?o+=" ui-submit":o="ui-submit"),e("label[for='"+i.attr("id")+"']").addClass("ui-submit"),this.button=e("<div></div>")[i.html()?"html":"text"](i.html()||i.val()).insertBefore(i).buttonMarkup(a).addClass(o).append(i.addClass("ui-btn-hidden")),t=this.button,i.bind({focus:function(){t.addClass(e.mobile.focusClass)},blur:function(){t.removeClass(e.mobile.focusClass)}}),this.refresh(),n)},_setOption:function(t,i){var n={};n[t]=i,"initSelector"!==t&&(this.button.buttonMarkup(n),this.element.attr("data-"+(e.mobile.ns||"")+t.replace(/([A-Z])/,"-$1").toLowerCase(),i)),this._super("_setOption",t,i)},enable:function(){return this.element.attr("disabled",!1),this.button.removeClass("ui-disabled").attr("aria-disabled",!1),this._setOption("disabled",!1)},disable:function(){return this.element.attr("disabled",!0),this.button.addClass("ui-disabled").attr("aria-disabled",!0),this._setOption("disabled",!0)},refresh:function(){var t=this.element;t.prop("disabled")?this.disable():this.enable(),e(this.button.data("buttonElements").text)[t.html()?"html":"text"](t.html()||t.val())}}),e.mobile.document.bind("pagecreate create",function(t){e.mobile.button.prototype.enhanceWithin(t.target,!0)})}(e),function(e,n){e.widget("mobile.slider",e.mobile.widget,e.extend({widgetEventPrefix:"slide",options:{theme:null,trackTheme:null,disabled:!1,initSelector:"input[type='range'], :jqmData(type='range'), :jqmData(role='slider')",mini:!1,highlight:!1},_create:function(){var a,o,s=this,r=this.element,l=e.mobile.getInheritedTheme(r,"c"),d=this.options.theme||l,c=this.options.trackTheme||l,h=r[0].nodeName.toLowerCase(),u=(this.isToggleSwitch="select"===h,r.parent().is(":jqmData(role='rangeslider')")),p=this.isToggleSwitch?"ui-slider-switch":"",m=r.attr("id"),f=e("[for='"+m+"']"),g=f.attr("id")||m+"-label",b=f.attr("id",g),v=this.isToggleSwitch?0:parseFloat(r.attr("min")),_=this.isToggleSwitch?r.find("option").length-1:parseFloat(r.attr("max")),C=t.parseFloat(r.attr("step")||1),x=this.options.mini||r.jqmData("mini")?" ui-mini":"",y=i.createElement("a"),w=e(y),T=i.createElement("div"),D=e(T),P=this.options.highlight&&!this.isToggleSwitch?function(){var t=i.createElement("div");return t.className="ui-slider-bg "+e.mobile.activeBtnClass+" ui-btn-corner-all",e(t).prependTo(D)}():!1;if(y.setAttribute("href","#"),T.setAttribute("role","application"),T.className=[this.isToggleSwitch?"ui-slider ":"ui-slider-track ",p," ui-btn-down-",c," ui-btn-corner-all",x].join(""),y.className="ui-slider-handle",T.appendChild(y),w.buttonMarkup({corners:!0,theme:d,shadow:!0}).attr({role:"slider","aria-valuemin":v,"aria-valuemax":_,"aria-valuenow":this._value(),"aria-valuetext":this._value(),title:this._value(),"aria-labelledby":g}),e.extend(this,{slider:D,handle:w,type:h,step:C,max:_,min:v,valuebg:P,isRangeslider:u,dragging:!1,beforeStart:null,userModified:!1,mouseMoved:!1}),this.isToggleSwitch){o=i.createElement("div"),o.className="ui-slider-inneroffset";for(var k=0,E=T.childNodes.length;E>k;k++)o.appendChild(T.childNodes[k]);T.appendChild(o),w.addClass("ui-slider-handle-snapping"),a=r.find("option");for(var q=0,j=a.length;j>q;q++){var S=q?"a":"b",A=q?" "+e.mobile.activeBtnClass:" ui-btn-down-"+c,N=(i.createElement("div"),i.createElement("span"));N.className=["ui-slider-label ui-slider-label-",S,A," ui-btn-corner-all"].join(""),N.setAttribute("role","img"),N.appendChild(i.createTextNode(a[q].innerHTML)),e(N).prependTo(D)}s._labels=e(".ui-slider-label",D)}b.addClass("ui-slider"),r.addClass(this.isToggleSwitch?"ui-slider-switch":"ui-slider-input"),this._on(r,{change:"_controlChange",keyup:"_controlKeyup",blur:"_controlBlur",vmouseup:"_controlVMouseUp"}),D.bind("vmousedown",e.proxy(this._sliderVMouseDown,this)).bind("vclick",!1),this._on(i,{vmousemove:"_preventDocumentDrag"}),this._on(D.add(i),{vmouseup:"_sliderVMouseUp"}),D.insertAfter(r),this.isToggleSwitch||u||(o=this.options.mini?"<div class='ui-slider ui-mini'>":"<div class='ui-slider'>",r.add(D).wrapAll(o)),this.isToggleSwitch&&this.handle.bind({focus:function(){D.addClass(e.mobile.focusClass)},blur:function(){D.removeClass(e.mobile.focusClass)}}),this._on(this.handle,{vmousedown:"_handleVMouseDown",keydown:"_handleKeydown",keyup:"_handleKeyup"}),this.handle.bind("vclick",!1),this._handleFormReset(),this.refresh(n,n,!0)},_controlChange:function(e){return this._trigger("controlchange",e)===!1?!1:(this.mouseMoved||this.refresh(this._value(),!0),n)},_controlKeyup:function(){this.refresh(this._value(),!0,!0)},_controlBlur:function(){this.refresh(this._value(),!0)},_controlVMouseUp:function(){this._checkedRefresh()},_handleVMouseDown:function(){this.handle.focus()},_handleKeydown:function(t){var i=this._value();if(!this.options.disabled){switch(t.keyCode){case e.mobile.keyCode.HOME:case e.mobile.keyCode.END:case e.mobile.keyCode.PAGE_UP:case e.mobile.keyCode.PAGE_DOWN:case e.mobile.keyCode.UP:case e.mobile.keyCode.RIGHT:case e.mobile.keyCode.DOWN:case e.mobile.keyCode.LEFT:t.preventDefault(),this._keySliding||(this._keySliding=!0,this.handle.addClass("ui-state-active"))}switch(t.keyCode){case e.mobile.keyCode.HOME:this.refresh(this.min);break;case e.mobile.keyCode.END:this.refresh(this.max);break;case e.mobile.keyCode.PAGE_UP:case e.mobile.keyCode.UP:case e.mobile.keyCode.RIGHT:this.refresh(i+this.step);break;case e.mobile.keyCode.PAGE_DOWN:case e.mobile.keyCode.DOWN:case e.mobile.keyCode.LEFT:this.refresh(i-this.step)}}},_handleKeyup:function(){this._keySliding&&(this._keySliding=!1,this.handle.removeClass("ui-state-active"))},_sliderVMouseDown:function(e){return this.options.disabled||1!==e.which&&0!==e.which?!1:this._trigger("beforestart",e)===!1?!1:(this.dragging=!0,this.userModified=!1,this.mouseMoved=!1,this.isToggleSwitch&&(this.beforeStart=this.element[0].selectedIndex),this.refresh(e),this._trigger("start"),!1)},_sliderVMouseUp:function(){return this.dragging?(this.dragging=!1,this.isToggleSwitch&&(this.handle.addClass("ui-slider-handle-snapping"),this.mouseMoved?this.userModified?this.refresh(0===this.beforeStart?1:0):this.refresh(this.beforeStart):this.refresh(0===this.beforeStart?1:0)),this.mouseMoved=!1,this._trigger("stop"),!1):n},_preventDocumentDrag:function(e){return this._trigger("drag",e)===!1?!1:this.dragging&&!this.options.disabled?(this.mouseMoved=!0,this.isToggleSwitch&&this.handle.removeClass("ui-slider-handle-snapping"),this.refresh(e),this.userModified=this.beforeStart!==this.element[0].selectedIndex,!1):n},_checkedRefresh:function(){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(n,!1,!0)},refresh:function(t,a,o){var s,r,l,d,c=this,h=e.mobile.getInheritedTheme(this.element,"c"),u=this.options.theme||h,p=this.options.trackTheme||h;c.slider[0].className=[this.isToggleSwitch?"ui-slider ui-slider-switch":"ui-slider-track"," ui-btn-down-"+p," ui-btn-corner-all",this.options.mini?" ui-mini":""].join(""),(this.options.disabled||this.element.attr("disabled"))&&this.disable(),this.value=this._value(),this.options.highlight&&!this.isToggleSwitch&&0===this.slider.find(".ui-slider-bg").length&&(this.valuebg=function(){var t=i.createElement("div");return t.className="ui-slider-bg "+e.mobile.activeBtnClass+" ui-btn-corner-all",e(t).prependTo(c.slider)}()),this.handle.buttonMarkup({corners:!0,theme:u,shadow:!0});var m,f,g=this.element,b=!this.isToggleSwitch,v=b?[]:g.find("option"),_=b?parseFloat(g.attr("min")):0,C=b?parseFloat(g.attr("max")):v.length-1,x=b&&parseFloat(g.attr("step"))>0?parseFloat(g.attr("step")):1;if("object"==typeof t){if(l=t,d=8,s=this.slider.offset().left,r=this.slider.width(),m=r/((C-_)/x),!this.dragging||s-d>l.pageX||l.pageX>s+r+d)return;f=m>1?100*((l.pageX-s)/r):Math.round(100*((l.pageX-s)/r))}else null==t&&(t=b?parseFloat(g.val()||0):g[0].selectedIndex),f=100*((parseFloat(t)-_)/(C-_));if(!isNaN(f)){var y=f/100*(C-_)+_,w=(y-_)%x,T=y-w;2*Math.abs(w)>=x&&(T+=w>0?x:-x);var D=100/((C-_)/x);if(y=parseFloat(T.toFixed(5)),m===n&&(m=r/((C-_)/x)),m>1&&b&&(f=(y-_)*D*(1/x)),0>f&&(f=0),f>100&&(f=100),_>y&&(y=_),y>C&&(y=C),this.handle.css("left",f+"%"),this.handle[0].setAttribute("aria-valuenow",b?y:v.eq(y).attr("value")),this.handle[0].setAttribute("aria-valuetext",b?y:v.eq(y).getEncodedText()),this.handle[0].setAttribute("title",b?y:v.eq(y).getEncodedText()),this.valuebg&&this.valuebg.css("width",f+"%"),this._labels){var P=100*(this.handle.width()/this.slider.width()),k=f&&P+(100-P)*f/100,E=100===f?0:Math.min(P+100-k,100);this._labels.each(function(){var t=e(this).is(".ui-slider-label-a");e(this).width((t?k:E)+"%")})}if(!o){var q=!1;if(b?(q=g.val()!==y,g.val(y)):(q=g[0].selectedIndex!==y,g[0].selectedIndex=y),this._trigger("beforechange",t)===!1)return!1;!a&&q&&g.trigger("change")}}},enable:function(){return this.element.attr("disabled",!1),this.slider.removeClass("ui-disabled").attr("aria-disabled",!1),this._setOption("disabled",!1)},disable:function(){return this.element.attr("disabled",!0),this.slider.addClass("ui-disabled").attr("aria-disabled",!0),this._setOption("disabled",!0)}},e.mobile.behaviors.formReset)),e.mobile.document.bind("pagecreate create",function(t){e.mobile.slider.prototype.enhanceWithin(t.target,!0)})}(e),function(e){e.widget("mobile.rangeslider",e.mobile.widget,{options:{theme:null,trackTheme:null,disabled:!1,initSelector:":jqmData(role='rangeslider')",mini:!1,highlight:!0},_create:function(){var t,i=this.element,n=this.options.mini?"ui-rangeslider ui-mini":"ui-rangeslider",a=i.find("input").first(),o=i.find("input").last(),s=i.find("label").first(),r=e.data(a.get(0),"mobileSlider").slider,l=e.data(o.get(0),"mobileSlider").slider,d=e.data(a.get(0),"mobileSlider").handle,c=e('<div class="ui-rangeslider-sliders" />').appendTo(i);i.find("label").length>1&&(t=i.find("label").last().hide()),a.addClass("ui-rangeslider-first"),o.addClass("ui-rangeslider-last"),i.addClass(n),r.appendTo(c),l.appendTo(c),s.prependTo(i),d.prependTo(l),e.extend(this,{_inputFirst:a,_inputLast:o,_sliderFirst:r,_sliderLast:l,_targetVal:null,_sliderTarget:!1,_sliders:c,_proxy:!1}),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(d,{vmousedown:"_dragFirstHandle"})},_handleReset:function(){var e=this;setTimeout(function(){e._updateHighlight()},0)},_dragFirstHandle:function(t){return e.data(this._inputFirst.get(0),"mobileSlider").dragging=!0,e.data(this._inputFirst.get(0),"mobileSlider").refresh(t),!1},_slidedrag:function(t){var i=e(t.target).is(this._inputFirst),a=i?this._inputLast:this._inputFirst;return this._sliderTarget=!1,"first"===this._proxy&&i||"last"===this._proxy&&!i?(e.data(a.get(0),"mobileSlider").dragging=!0,e.data(a.get(0),"mobileSlider").refresh(t),!1):n},_slidestop:function(t){var i=e(t.target).is(this._inputFirst);this._proxy=!1,this.element.find("input").trigger("vmouseup"),this._sliderFirst.css("z-index",i?1:"")},_slidebeforestart:function(t){this._sliderTarget=!1,e(t.originalEvent.target).hasClass("ui-slider-track")&&(this._sliderTarget=!0,this._targetVal=e(t.target).val())},_setOption:function(e){this._superApply(e),this.refresh()},refresh:function(){var e=this.element,t=this.options;e.find("input").slider({theme:t.theme,trackTheme:t.trackTheme,disabled:t.disabled,mini:t.mini,highlight:t.highlight}).slider("refresh"),this._updateHighlight()},_change:function(t){if("keyup"===t.type)return this._updateHighlight(),!1;var i=this,a=parseFloat(this._inputFirst.val(),10),o=parseFloat(this._inputLast.val(),10),s=e(t.target).hasClass("ui-rangeslider-first"),r=s?this._inputFirst:this._inputLast,l=s?this._inputLast:this._inputFirst;if(this._inputFirst.val()>this._inputLast.val()&&"mousedown"===t.type&&!e(t.target).hasClass("ui-slider-handle"))r.blur();else if("mousedown"===t.type)return;return a>o&&!this._sliderTarget?(r.val(s?o:a).slider("refresh"),this._trigger("normalize")):a>o&&(r.val(this._targetVal).slider("refresh"),setTimeout(function(){l.val(s?a:o).slider("refresh"),e.data(l.get(0),"mobileSlider").handle.focus(),i._sliderFirst.css("z-index",s?"":1),i._trigger("normalize")},0),this._proxy=s?"first":"last"),a===o?(e.data(r.get(0),"mobileSlider").handle.css("z-index",1),e.data(l.get(0),"mobileSlider").handle.css("z-index",0)):(e.data(l.get(0),"mobileSlider").handle.css("z-index",""),e.data(r.get(0),"mobileSlider").handle.css("z-index","")),this._updateHighlight(),a>=o?!1:n},_updateHighlight:function(){var t=parseInt(e.data(this._inputFirst.get(0),"mobileSlider").handle.get(0).style.left,10),i=parseInt(e.data(this._inputLast.get(0),"mobileSlider").handle.get(0).style.left,10),n=i-t;this.element.find(".ui-slider-bg").css({"margin-left":t+"%",width:n+"%"})},_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")}}),e.widget("mobile.rangeslider",e.mobile.rangeslider,e.mobile.behaviors.formReset),e(i).bind("pagecreate create",function(t){e.mobile.rangeslider.prototype.enhanceWithin(t.target,!0)})}(e),function(e){e.widget("mobile.selectmenu",e.mobile.widget,e.extend({options:{theme:null,disabled:!1,icon:"arrow-d",iconpos:"right",inline:!1,corners:!0,shadow:!0,iconshadow:!0,overlayTheme:"a",dividerTheme:"b",hidePlaceholderMenuItems:!0,closeText:"Close",nativeMenu:!0,preventFocusZoom:/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1,initSelector:"select:not( :jqmData(role='slider') )",mini:!1},_button:function(){return e("<div/>")
+},_setDisabled:function(e){return this.element.attr("disabled",e),this.button.attr("aria-disabled",e),this._setOption("disabled",e)},_focusButton:function(){var e=this;setTimeout(function(){e.button.focus()},40)},_selectOptions:function(){return this.select.find("option")},_preExtension:function(){var t="";~this.element[0].className.indexOf("ui-btn-left")&&(t=" ui-btn-left"),~this.element[0].className.indexOf("ui-btn-right")&&(t=" ui-btn-right"),this.select=this.element.removeClass("ui-btn-left ui-btn-right").wrap("<div class='ui-select"+t+"'>"),this.selectID=this.select.attr("id"),this.label=e("label[for='"+this.selectID+"']").addClass("ui-select"),this.isMultiple=this.select[0].multiple,this.options.theme||(this.options.theme=e.mobile.getInheritedTheme(this.select,"c"))},_destroy:function(){var e=this.element.parents(".ui-select");e.length>0&&(e.is(".ui-btn-left, .ui-btn-right")&&this.element.addClass(e.is(".ui-btn-left")?"ui-btn-left":"ui-btn-right"),this.element.insertAfter(e),e.remove())},_create:function(){this._preExtension(),this._trigger("beforeCreate"),this.button=this._button();var i=this,n=this.options,a=n.inline||this.select.jqmData("inline"),o=n.mini||this.select.jqmData("mini"),s=n.icon?n.iconpos||this.select.jqmData("iconpos"):!1,r=(-1===this.select[0].selectedIndex?0:this.select[0].selectedIndex,this.button.insertBefore(this.select).buttonMarkup({theme:n.theme,icon:n.icon,iconpos:s,inline:a,corners:n.corners,shadow:n.shadow,iconshadow:n.iconshadow,mini:o}));this.setButtonText(),n.nativeMenu&&t.opera&&t.opera.version&&r.addClass("ui-select-nativeonly"),this.isMultiple&&(this.buttonCount=e("<span>").addClass("ui-li-count ui-btn-up-c ui-btn-corner-all").hide().appendTo(r.addClass("ui-li-has-count"))),(n.disabled||this.element.attr("disabled"))&&this.disable(),this.select.change(function(){i.refresh(),n.nativeMenu&&this.blur()}),this._handleFormReset(),this.build()},build:function(){var t=this;this.select.appendTo(t.button).bind("vmousedown",function(){t.button.addClass(e.mobile.activeBtnClass)}).bind("focus",function(){t.button.addClass(e.mobile.focusClass)}).bind("blur",function(){t.button.removeClass(e.mobile.focusClass)}).bind("focus vmouseover",function(){t.button.trigger("vmouseover")}).bind("vmousemove",function(){t.button.removeClass(e.mobile.activeBtnClass)}).bind("change blur vmouseout",function(){t.button.trigger("vmouseout").removeClass(e.mobile.activeBtnClass)}).bind("change blur",function(){t.button.removeClass("ui-btn-down-"+t.options.theme)}),t.button.bind("vmousedown",function(){t.options.preventFocusZoom&&e.mobile.zoom.disable(!0)}),t.label.bind("click focus",function(){t.options.preventFocusZoom&&e.mobile.zoom.disable(!0)}),t.select.bind("focus",function(){t.options.preventFocusZoom&&e.mobile.zoom.disable(!0)}),t.button.bind("mouseup",function(){t.options.preventFocusZoom&&setTimeout(function(){e.mobile.zoom.enable(!0)},0)}),t.select.bind("blur",function(){t.options.preventFocusZoom&&e.mobile.zoom.enable(!0)})},selected:function(){return this._selectOptions().filter(":selected")},selectedIndices:function(){var e=this;return this.selected().map(function(){return e._selectOptions().index(this)}).get()},setButtonText:function(){var t=this,n=this.selected(),a=this.placeholder,o=e(i.createElement("span"));this.button.find(".ui-btn-text").html(function(){return a=n.length?n.map(function(){return e(this).text()}).get().join(", "):t.placeholder,o.text(a).addClass(t.select.attr("class")).addClass(n.attr("class"))})},setButtonCount:function(){var e=this.selected();this.isMultiple&&this.buttonCount[e.length>1?"show":"hide"]().text(e.length)},_reset:function(){this.refresh()},refresh:function(){this.setButtonText(),this.setButtonCount()},open:e.noop,close:e.noop,disable:function(){this._setDisabled(!0),this.button.addClass("ui-disabled")},enable:function(){this._setDisabled(!1),this.button.removeClass("ui-disabled")}},e.mobile.behaviors.formReset)),e.mobile.document.bind("pagecreate create",function(t){e.mobile.selectmenu.prototype.enhanceWithin(t.target,!0)})}(e),function(e,n){function a(e,t,i,n){var a=n;return a=t>e?i+(e-t)/2:Math.min(Math.max(i,n-t/2),i+e-t)}function o(){var i=e.mobile.window;return{x:i.scrollLeft(),y:i.scrollTop(),cx:t.innerWidth||i.width(),cy:t.innerHeight||i.height()}}e.widget("mobile.popup",e.mobile.widget,{options:{theme:null,overlayTheme:null,shadow:!0,corners:!0,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:!0,history:!e.mobile.browser.oldIE},_eatEventAndClose:function(e){return e.preventDefault(),e.stopImmediatePropagation(),this.options.dismissible&&this.close(),!1},_resizeScreen:function(){var e=this._ui.container.outerHeight(!0);this._ui.screen.removeAttr("style"),e>this._ui.screen.height()&&this._ui.screen.height(e)},_handleWindowKeyUp:function(t){return this._isOpen&&t.keyCode===e.mobile.keyCode.ESCAPE?this._eatEventAndClose(t):n},_expectResizeEvent:function(){var t=o();if(this._resizeData){if(t.x===this._resizeData.winCoords.x&&t.y===this._resizeData.winCoords.y&&t.cx===this._resizeData.winCoords.cx&&t.cy===this._resizeData.winCoords.cy)return!1;clearTimeout(this._resizeData.timeoutId)}return this._resizeData={timeoutId:setTimeout(e.proxy(this,"_resizeTimeout"),200),winCoords:t},!0},_resizeTimeout:function(){this._isOpen?this._expectResizeEvent()||(this._ui.container.hasClass("ui-popup-hidden")&&(this._ui.container.removeClass("ui-popup-hidden"),this.reposition({positionTo:"window"}),this._ignoreResizeEvents()),this._resizeScreen(),this._resizeData=null,this._orientationchangeInProgress=!1):(this._resizeData=null,this._orientationchangeInProgress=!1)},_ignoreResizeEvents:function(){var e=this;this._ignoreResizeTo&&clearTimeout(this._ignoreResizeTo),this._ignoreResizeTo=setTimeout(function(){e._ignoreResizeTo=0},1e3)},_handleWindowResize:function(){this._isOpen&&0===this._ignoreResizeTo&&(!this._expectResizeEvent()&&!this._orientationchangeInProgress||this._ui.container.hasClass("ui-popup-hidden")||this._ui.container.addClass("ui-popup-hidden").removeAttr("style"))},_handleWindowOrientationchange:function(){!this._orientationchangeInProgress&&this._isOpen&&0===this._ignoreResizeTo&&(this._expectResizeEvent(),this._orientationchangeInProgress=!0)},_handleDocumentFocusIn:function(t){var n,a=t.target,o=this._ui;if(this._isOpen){if(a!==o.container[0]){if(n=e(t.target),0===n.parents().filter(o.container[0]).length)return e(i.activeElement).one("focus",function(){n.blur()}),o.focusElement.focus(),t.preventDefault(),t.stopImmediatePropagation(),!1;o.focusElement[0]===o.container[0]&&(o.focusElement=n)}this._ignoreResizeEvents()}},_create:function(){var t={screen:e("<div class='ui-screen-hidden ui-popup-screen'></div>"),placeholder:e("<div style='display: none;'><!-- placeholder --></div>"),container:e("<div class='ui-popup-container ui-popup-hidden'></div>")},i=this.element.closest(".ui-page"),a=this.element.attr("id"),o=this;this.options.history=this.options.history&&e.mobile.ajaxEnabled&&e.mobile.hashListeningEnabled,0===i.length&&(i=e("body")),this.options.container=this.options.container||e.mobile.pageContainer,i.append(t.screen),t.container.insertAfter(t.screen),t.placeholder.insertAfter(this.element),a&&(t.screen.attr("id",a+"-screen"),t.container.attr("id",a+"-popup"),t.placeholder.html("<!-- placeholder for "+a+" -->")),t.container.append(this.element),t.focusElement=t.container,this.element.addClass("ui-popup"),e.extend(this,{_scrollTop:0,_page:i,_ui:t,_fallbackTransition:"",_currentTransition:!1,_prereqs:null,_isOpen:!1,_tolerance:null,_resizeData:null,_ignoreResizeTo:0,_orientationchangeInProgress:!1}),e.each(this.options,function(e,t){o.options[e]=n,o._setOption(e,t,!0)}),t.screen.bind("vclick",e.proxy(this,"_eatEventAndClose")),this._on(e.mobile.window,{orientationchange:e.proxy(this,"_handleWindowOrientationchange"),resize:e.proxy(this,"_handleWindowResize"),keyup:e.proxy(this,"_handleWindowKeyUp")}),this._on(e.mobile.document,{focusin:e.proxy(this,"_handleDocumentFocusIn")})},_applyTheme:function(e,t,i){for(var n,a=(e.attr("class")||"").split(" "),o=null,s=t+"";a.length>0;){if(o=a.pop(),n=RegExp("^ui-"+i+"-([a-z])$").exec(o),n&&n.length>1){o=n[1];break}o=null}t!==o&&(e.removeClass("ui-"+i+"-"+o),null!==t&&"none"!==t&&e.addClass("ui-"+i+"-"+s))},_setTheme:function(e){this._applyTheme(this.element,e,"body")},_setOverlayTheme:function(e){this._applyTheme(this._ui.screen,e,"overlay"),this._isOpen&&this._ui.screen.addClass("in")},_setShadow:function(e){this.element.toggleClass("ui-overlay-shadow",e)},_setCorners:function(e){this.element.toggleClass("ui-corner-all",e)},_applyTransition:function(t){this._ui.container.removeClass(this._fallbackTransition),t&&"none"!==t&&(this._fallbackTransition=e.mobile._maybeDegradeTransition(t),"none"===this._fallbackTransition&&(this._fallbackTransition=""),this._ui.container.addClass(this._fallbackTransition))},_setTransition:function(e){this._currentTransition||this._applyTransition(e)},_setTolerance:function(t){var i={t:30,r:15,b:30,l:15};if(t!==n){var a=(t+"").split(",");switch(e.each(a,function(e,t){a[e]=parseInt(t,10)}),a.length){case 1:isNaN(a[0])||(i.t=i.r=i.b=i.l=a[0]);break;case 2:isNaN(a[0])||(i.t=i.b=a[0]),isNaN(a[1])||(i.l=i.r=a[1]);break;case 4:isNaN(a[0])||(i.t=a[0]),isNaN(a[1])||(i.r=a[1]),isNaN(a[2])||(i.b=a[2]),isNaN(a[3])||(i.l=a[3]);break;default:}}this._tolerance=i},_setOption:function(t,i){var a,o="_set"+t.charAt(0).toUpperCase()+t.slice(1);this[o]!==n&&this[o](i),a=["initSelector","closeLinkSelector","closeLinkEvents","navigateEvents","closeEvents","history","container"],e.mobile.widget.prototype._setOption.apply(this,arguments),-1===e.inArray(t,a)&&this.element.attr("data-"+(e.mobile.ns||"")+t.replace(/([A-Z])/,"-$1").toLowerCase(),i)},_placementCoords:function(e){var t,n,s=o(),r={x:this._tolerance.l,y:s.y+this._tolerance.t,cx:s.cx-this._tolerance.l-this._tolerance.r,cy:s.cy-this._tolerance.t-this._tolerance.b};this._ui.container.css("max-width",r.cx),t={cx:this._ui.container.outerWidth(!0),cy:this._ui.container.outerHeight(!0)},n={x:a(r.cx,t.cx,r.x,e.x),y:a(r.cy,t.cy,r.y,e.y)},n.y=Math.max(0,n.y);var l=i.documentElement,d=i.body,c=Math.max(l.clientHeight,d.scrollHeight,d.offsetHeight,l.scrollHeight,l.offsetHeight);return n.y-=Math.min(n.y,Math.max(0,n.y+t.cy-c)),{left:n.x,top:n.y}},_createPrereqs:function(t,i,n){var a,o=this;a={screen:e.Deferred(),container:e.Deferred()},a.screen.then(function(){a===o._prereqs&&t()}),a.container.then(function(){a===o._prereqs&&i()}),e.when(a.screen,a.container).done(function(){a===o._prereqs&&(o._prereqs=null,n())}),o._prereqs=a},_animate:function(t){return this._ui.screen.removeClass(t.classToRemove).addClass(t.screenClassToAdd),t.prereqs.screen.resolve(),t.transition&&"none"!==t.transition&&(t.applyTransition&&this._applyTransition(t.transition),this._fallbackTransition)?(this._ui.container.animationComplete(e.proxy(t.prereqs.container,"resolve")).addClass(t.containerClassToAdd).removeClass(t.classToRemove),n):(this._ui.container.removeClass(t.classToRemove),t.prereqs.container.resolve(),n)},_desiredCoords:function(t){var i,n=null,a=o(),s=t.x,r=t.y,l=t.positionTo;if(l&&"origin"!==l)if("window"===l)s=a.cx/2+a.x,r=a.cy/2+a.y;else{try{n=e(l)}catch(d){n=null}n&&(n.filter(":visible"),0===n.length&&(n=null))}return n&&(i=n.offset(),s=i.left+n.outerWidth()/2,r=i.top+n.outerHeight()/2),("number"!==e.type(s)||isNaN(s))&&(s=a.cx/2+a.x),("number"!==e.type(r)||isNaN(r))&&(r=a.cy/2+a.y),{x:s,y:r}},_reposition:function(e){e={x:e.x,y:e.y,positionTo:e.positionTo},this._trigger("beforeposition",e),this._ui.container.offset(this._placementCoords(this._desiredCoords(e)))},reposition:function(e){this._isOpen&&this._reposition(e)},_openPrereqsComplete:function(){this._ui.container.addClass("ui-popup-active"),this._isOpen=!0,this._resizeScreen(),this._ui.container.attr("tabindex","0").focus(),this._ignoreResizeEvents(),this._trigger("afteropen")},_open:function(t){var i=e.extend({},this.options,t),n=function(){var e=navigator.userAgent,t=e.match(/AppleWebKit\/([0-9\.]+)/),i=!!t&&t[1],n=e.match(/Android (\d+(?:\.\d+))/),a=!!n&&n[1],o=e.indexOf("Chrome")>-1;return null!==n&&"4.0"===a&&i&&i>534.13&&!o?!0:!1}();this._createPrereqs(e.noop,e.noop,e.proxy(this,"_openPrereqsComplete")),this._currentTransition=i.transition,this._applyTransition(i.transition),this.options.theme||this._setTheme(this._page.jqmData("theme")||e.mobile.getInheritedTheme(this._page,"c")),this._ui.screen.removeClass("ui-screen-hidden"),this._ui.container.removeClass("ui-popup-hidden"),this._reposition(i),this.options.overlayTheme&&n&&this.element.closest(".ui-page").addClass("ui-popup-open"),this._animate({additionalCondition:!0,transition:i.transition,classToRemove:"",screenClassToAdd:"in",containerClassToAdd:"in",applyTransition:!1,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(){this.options,this._ui.container.removeAttr("tabindex"),e.mobile.popup.active=n,this._trigger("afterclose")},_close:function(t){this._ui.container.removeClass("ui-popup-active"),this._page.removeClass("ui-popup-open"),this._isOpen=!1,this._createPrereqs(e.proxy(this,"_closePrereqScreen"),e.proxy(this,"_closePrereqContainer"),e.proxy(this,"_closePrereqsDone")),this._animate({additionalCondition:this._ui.screen.hasClass("in"),transition:t?"none":this._currentTransition,classToRemove:"in",screenClassToAdd:"out",containerClassToAdd:"reverse out",applyTransition:!0,prereqs:this._prereqs})},_unenhance:function(){this._setTheme("none"),this.element.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(){e.mobile.popup.active===this?(this.element.one("popupafterclose",e.proxy(this,"_unenhance")),this.close()):this._unenhance()},_closePopup:function(i,n){var a,o,s=this.options,r=!1;t.scrollTo(0,this._scrollTop),i&&"pagebeforechange"===i.type&&n&&(a="string"==typeof n.toPage?n.toPage:n.toPage.jqmData("url"),a=e.mobile.path.parseUrl(a),o=a.pathname+a.search+a.hash,this._myUrl!==e.mobile.path.makeUrlAbsolute(o)?r=!0:i.preventDefault()),s.container.unbind(s.closeEvents),this.element.undelegate(s.closeLinkSelector,s.closeLinkEvents),this._close(r)},_bindContainerClose:function(){this.options.container.one(this.options.closeEvents,e.proxy(this,"_closePopup"))},open:function(i){var a,o,s,r,l,d,c=this,h=this.options;if(!e.mobile.popup.active){if(e.mobile.popup.active=this,this._scrollTop=e.mobile.window.scrollTop(),!h.history)return c._open(i),c._bindContainerClose(),c.element.delegate(h.closeLinkSelector,h.closeLinkEvents,function(e){c.close(),e.preventDefault()}),n;if(d=e.mobile.urlHistory,o=e.mobile.dialogHashKey,s=e.mobile.activePage,r=s.is(".ui-dialog"),this._myUrl=a=d.getActive().url,l=a.indexOf(o)>-1&&!r&&d.activeIndex>0)return c._open(i),c._bindContainerClose(),n;-1!==a.indexOf(o)||r?a=e.mobile.path.parseLocation().hash+o:a+=a.indexOf("#")>-1?o:"#"+o,0===d.activeIndex&&a===d.initialDst&&(a+=o),e(t).one("beforenavigate",function(e){e.preventDefault(),c._open(i),c._bindContainerClose()}),this.urlAltered=!0,e.mobile.navigate(a,{role:"dialog"})}},close:function(){e.mobile.popup.active===this&&(this._scrollTop=e.mobile.window.scrollTop(),this.options.history&&this.urlAltered?(e.mobile.back(),this.urlAltered=!1):this._closePopup())}}),e.mobile.popup.handleLink=function(t){var i,n=t.closest(":jqmData(role='page')"),a=0===n.length?e("body"):n,o=e(e.mobile.path.parseUrl(t.attr("href")).hash,a[0]);o.data("mobile-popup")&&(i=t.offset(),o.popup("open",{x:i.left+t.outerWidth()/2,y:i.top+t.outerHeight()/2,transition:t.jqmData("transition"),positionTo:t.jqmData("position-to")})),setTimeout(function(){var i=t.parent().parent();i.hasClass("ui-li")&&(t=i.parent()),t.removeClass(e.mobile.activeBtnClass)},300)},e.mobile.document.bind("pagebeforechange",function(t,i){"popup"===i.options.role&&(e.mobile.popup.handleLink(i.options.link),t.preventDefault())}),e.mobile.document.bind("pagecreate create",function(t){e.mobile.popup.prototype.enhanceWithin(t.target,!0)})}(e),function(e,t){var n=function(n){var a,o,s,r=(n.select,n._destroy),l=n.selectID,d=l?l:(e.mobile.ns||"")+"uuid-"+n.uuid,c=d+"-listbox",h=d+"-dialog",u=n.label,p=n.select.closest(".ui-page"),m=n._selectOptions(),f=n.isMultiple=n.select[0].multiple,g=l+"-button",b=l+"-menu",v=e("<div data-"+e.mobile.ns+"role='dialog' id='"+h+"' data-"+e.mobile.ns+"theme='"+n.options.theme+"' data-"+e.mobile.ns+"overlay-theme='"+n.options.overlayTheme+"'>"+"<div data-"+e.mobile.ns+"role='header'>"+"<div class='ui-title'>"+u.getEncodedText()+"</div>"+"</div>"+"<div data-"+e.mobile.ns+"role='content'></div>"+"</div>"),_=e("<div id='"+c+"' class='ui-selectmenu'>").insertAfter(n.select).popup({theme:n.options.overlayTheme}),C=e("<ul>",{"class":"ui-selectmenu-list",id:b,role:"listbox","aria-labelledby":g}).attr("data-"+e.mobile.ns+"theme",n.options.theme).attr("data-"+e.mobile.ns+"divider-theme",n.options.dividerTheme).appendTo(_),x=e("<div>",{"class":"ui-header ui-bar-"+n.options.theme}).prependTo(_),y=e("<h1>",{"class":"ui-title"}).appendTo(x);n.isMultiple&&(s=e("<a>",{text:n.options.closeText,href:"#","class":"ui-btn-left"}).attr("data-"+e.mobile.ns+"iconpos","notext").attr("data-"+e.mobile.ns+"icon","delete").appendTo(x).buttonMarkup()),e.extend(n,{select:n.select,selectID:l,buttonId:g,menuId:b,popupID:c,dialogID:h,thisPage:p,menuPage:v,label:u,selectOptions:m,isMultiple:f,theme:n.options.theme,listbox:_,list:C,header:x,headerTitle:y,headerClose:s,menuPageContent:a,menuPageClose:o,placeholder:"",build:function(){var i=this;i.refresh(),i._origTabIndex===t&&(i._origTabIndex=null===i.select[0].getAttribute("tabindex")?!1:i.select.attr("tabindex")),i.select.attr("tabindex","-1").focus(function(){e(this).blur(),i.button.focus()}),i.button.bind("vclick keydown",function(t){i.options.disabled||i.isOpen||("vclick"===t.type||t.keyCode&&(t.keyCode===e.mobile.keyCode.ENTER||t.keyCode===e.mobile.keyCode.SPACE))&&(i._decideFormat(),"overlay"===i.menuType?i.button.attr("href","#"+i.popupID).attr("data-"+(e.mobile.ns||"")+"rel","popup"):i.button.attr("href","#"+i.dialogID).attr("data-"+(e.mobile.ns||"")+"rel","dialog"),i.isOpen=!0)}),i.list.attr("role","listbox").bind("focusin",function(t){e(t.target).attr("tabindex","0").trigger("vmouseover")}).bind("focusout",function(t){e(t.target).attr("tabindex","-1").trigger("vmouseout")}).delegate("li:not(.ui-disabled, .ui-li-divider)","click",function(t){var a=i.select[0].selectedIndex,o=i.list.find("li:not(.ui-li-divider)").index(this),s=i._selectOptions().eq(o)[0];s.selected=i.isMultiple?!s.selected:!0,i.isMultiple&&e(this).find(".ui-icon").toggleClass("ui-icon-checkbox-on",s.selected).toggleClass("ui-icon-checkbox-off",!s.selected),(i.isMultiple||a!==o)&&i.select.trigger("change"),i.isMultiple?i.list.find("li:not(.ui-li-divider)").eq(o).addClass("ui-btn-down-"+n.options.theme).find("a").first().focus():i.close(),t.preventDefault()}).keydown(function(t){var i,a,o=e(t.target),s=o.closest("li");switch(t.keyCode){case 38:return i=s.prev().not(".ui-selectmenu-placeholder"),i.is(".ui-li-divider")&&(i=i.prev()),i.length&&(o.blur().attr("tabindex","-1"),i.addClass("ui-btn-down-"+n.options.theme).find("a").first().focus()),!1;case 40:return a=s.next(),a.is(".ui-li-divider")&&(a=a.next()),a.length&&(o.blur().attr("tabindex","-1"),a.addClass("ui-btn-down-"+n.options.theme).find("a").first().focus()),!1;case 13:case 32:return o.trigger("click"),!1}}),i.menuPage.bind("pagehide",function(){e.mobile._bindPageRemove.call(i.thisPage)}),i.listbox.bind("popupafterclose",function(){i.close()}),i.isMultiple&&i.headerClose.click(function(){return"overlay"===i.menuType?(i.close(),!1):t}),i.thisPage.addDependents(this.menuPage)},_isRebuildRequired:function(){var e=this.list.find("li"),t=this._selectOptions();return t.text()!==e.text()},selected:function(){return this._selectOptions().filter(":selected:not( :jqmData(placeholder='true') )")},refresh:function(t){var i,n=this;this.element,this.isMultiple,(t||this._isRebuildRequired())&&n._buildList(),i=this.selectedIndices(),n.setButtonText(),n.setButtonCount(),n.list.find("li:not(.ui-li-divider)").removeClass(e.mobile.activeBtnClass).attr("aria-selected",!1).each(function(t){if(e.inArray(t,i)>-1){var a=e(this);a.attr("aria-selected",!0),n.isMultiple?a.find(".ui-icon").removeClass("ui-icon-checkbox-off").addClass("ui-icon-checkbox-on"):a.is(".ui-selectmenu-placeholder")?a.next().addClass(e.mobile.activeBtnClass):a.addClass(e.mobile.activeBtnClass)}})},close:function(){if(!this.options.disabled&&this.isOpen){var e=this;"page"===e.menuType?(e.menuPage.dialog("close"),e.list.appendTo(e.listbox)):e.listbox.popup("close"),e._focusButton(),e.isOpen=!1}},open:function(){this.button.click()},_decideFormat:function(){function t(){var t=i.list.find("."+e.mobile.activeBtnClass+" a");0===t.length&&(t=i.list.find("li.ui-btn:not( :jqmData(placeholder='true') ) a")),t.first().focus().closest("li").addClass("ui-btn-down-"+n.options.theme)}var i=this,a=e.mobile.window,o=i.list.parent(),s=o.outerHeight(),r=(o.outerWidth(),e("."+e.mobile.activePageClass),a.scrollTop()),l=i.button.offset().top,d=a.height();a.width(),s>d-80||!e.support.scrollTop?(i.menuPage.appendTo(e.mobile.pageContainer).page(),i.menuPageContent=v.find(".ui-content"),i.menuPageClose=v.find(".ui-header a"),i.thisPage.unbind("pagehide.remove"),0===r&&l>d&&i.thisPage.one("pagehide",function(){e(this).jqmData("lastScroll",l)}),i.menuPage.one("pageshow",function(){t()}).one("pagehide",function(){i.close()}),i.menuType="page",i.menuPageContent.append(i.list),i.menuPage.find("div .ui-title").text(i.label.text())):(i.menuType="overlay",i.listbox.one("popupafteropen",t))},_buildList:function(){var t=this,n=this.options,a=this.placeholder,o=!0,s=t.isMultiple?"checkbox-off":"false";t.list.empty().filter(".ui-listview").listview("destroy");for(var r,l=t.select.find("option"),d=l.length,c=this.select[0],h="data-"+e.mobile.ns,u=h+"option-index",p=h+"icon",m=h+"role",f=h+"placeholder",g=i.createDocumentFragment(),b=!1,v=0;d>v;v++,b=!1){var _=l[v],C=e(_),x=_.parentNode,y=C.text(),w=i.createElement("a"),T=[];if(w.setAttribute("href","#"),w.appendChild(i.createTextNode(y)),x!==c&&"optgroup"===x.nodeName.toLowerCase()){var D=x.getAttribute("label");if(D!==r){var P=i.createElement("li");P.setAttribute(m,"list-divider"),P.setAttribute("role","option"),P.setAttribute("tabindex","-1"),P.appendChild(i.createTextNode(D)),g.appendChild(P),r=D}}!o||_.getAttribute("value")&&0!==y.length&&!C.jqmData("placeholder")||(o=!1,b=!0,null===_.getAttribute(f)&&(this._removePlaceholderAttr=!0),_.setAttribute(f,!0),n.hidePlaceholderMenuItems&&T.push("ui-selectmenu-placeholder"),a!==y&&(a=t.placeholder=y));var k=i.createElement("li");_.disabled&&(T.push("ui-disabled"),k.setAttribute("aria-disabled",!0)),k.setAttribute(u,v),k.setAttribute(p,s),b&&k.setAttribute(f,!0),k.className=T.join(" "),k.setAttribute("role","option"),w.setAttribute("tabindex","-1"),k.appendChild(w),g.appendChild(k)}t.list[0].appendChild(g),this.isMultiple||a.length?this.headerTitle.text(this.placeholder):this.header.hide(),t.list.listview()},_button:function(){return e("<a>",{href:"#",role:"button",id:this.buttonId,"aria-haspopup":"true","aria-owns":this.menuId})},_destroy:function(){this.close(),this._origTabIndex!==t&&(this._origTabIndex!==!1?this.select.attr("tabindex",this._origTabIndex):this.select.removeAttr("tabindex")),this._removePlaceholderAttr&&this._selectOptions().removeAttr("data-"+e.mobile.ns+"placeholder"),this.listbox.remove(),r.apply(this,arguments)}})};e.mobile.document.bind("selectmenubeforecreate",function(t){var i=e(t.target).data("mobile-selectmenu");i.options.nativeMenu||0!==i.element.parents(":jqmData(role='popup')").length||n(i)})}(e),function(e,t){e.widget("mobile.controlgroup",e.mobile.widget,e.extend({options:{shadow:!1,corners:!0,excludeInvisible:!0,type:"vertical",mini:!1,initSelector:":jqmData(role='controlgroup')"},_create:function(){var i=this.element,n={inner:e("<div class='ui-controlgroup-controls'></div>"),legend:e("<div role='heading' class='ui-controlgroup-label'></div>")},a=i.children("legend"),o=this;i.wrapInner(n.inner),a.length&&n.legend.append(a).insertBefore(i.children(0)),i.addClass("ui-corner-all ui-controlgroup"),e.extend(this,{_initialRefresh:!0}),e.each(this.options,function(e,i){o.options[e]=t,o._setOption(e,i,!0)})},_init:function(){this.refresh()},_setOption:function(i,n){var a="_set"+i.charAt(0).toUpperCase()+i.slice(1);this[a]!==t&&this[a](n),this._super(i,n),this.element.attr("data-"+(e.mobile.ns||"")+i.replace(/([A-Z])/,"-$1").toLowerCase(),n)},_setType:function(e){this.element.removeClass("ui-controlgroup-horizontal ui-controlgroup-vertical").addClass("ui-controlgroup-"+e),this.refresh()},_setCorners:function(e){this.element.toggleClass("ui-corner-all",e)},_setShadow:function(e){this.element.toggleClass("ui-shadow",e)},_setMini:function(e){this.element.toggleClass("ui-mini",e)},container:function(){return this.element.children(".ui-controlgroup-controls")},refresh:function(){var t=this.element.find(".ui-btn").not(".ui-slider-handle"),i=this._initialRefresh;e.mobile.checkboxradio&&this.element.find(":mobile-checkboxradio").checkboxradio("refresh"),this._addFirstLastClasses(t,this.options.excludeInvisible?this._getVisibles(t,i):t,i),this._initialRefresh=!1}},e.mobile.behaviors.addFirstLastClasses)),e(function(){e.mobile.document.bind("pagecreate create",function(t){e.mobile.controlgroup.prototype.enhanceWithin(t.target,!0)})})}(e),function(e){e(i).bind("pagecreate create",function(t){e(t.target).find("a").jqmEnhanceable().not(".ui-btn, .ui-link-inherit, :jqmData(role='none'), :jqmData(role='nojs')").addClass("ui-link")})}(e),function(e,t){e.widget("mobile.fixedtoolbar",e.mobile.widget,{options:{visibleOnPageShow:!0,disablePageZoom:!0,transition:"slide",fullscreen:!1,tapToggle:!0,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:!0,trackPersistentToolbars:!0,supportBlacklist:function(){return!e.support.fixedPosition},initSelector:":jqmData(position='fixed')"},_create:function(){var i=this,n=i.options,a=i.element,o=a.is(":jqmData(role='header')")?"header":"footer",s=a.closest(".ui-page");return n.supportBlacklist()?(i.destroy(),t):(a.addClass("ui-"+o+"-fixed"),n.fullscreen?(a.addClass("ui-"+o+"-fullscreen"),s.addClass("ui-page-"+o+"-fullscreen")):s.addClass("ui-page-"+o+"-fixed"),e.extend(this,{_thisPage:null}),i._addTransitionClass(),i._bindPageEvents(),i._bindToggleHandlers(),t)},_addTransitionClass:function(){var e=this.options.transition;e&&"none"!==e&&("slide"===e&&(e=this.element.is(".ui-header")?"slidedown":"slideup"),this.element.addClass(e))},_bindPageEvents:function(){this._thisPage=this.element.closest(".ui-page"),this._on(this._thisPage,{pagebeforeshow:"_handlePageBeforeShow",webkitAnimationStart:"_handleAnimationStart",animationstart:"_handleAnimationStart",updatelayout:"_handleAnimationStart",pageshow:"_handlePageShow",pagebeforehide:"_handlePageBeforeHide"})},_handlePageBeforeShow:function(){var t=this.options;t.disablePageZoom&&e.mobile.zoom.disable(!0),t.visibleOnPageShow||this.hide(!0)},_handleAnimationStart:function(){this.options.updatePagePadding&&this.updatePagePadding(this._thisPage)},_handlePageShow:function(){this.updatePagePadding(this._thisPage),this.options.updatePagePadding&&this._on(e.mobile.window,{throttledresize:"updatePagePadding"})},_handlePageBeforeHide:function(t,i){var n=this.options;if(n.disablePageZoom&&e.mobile.zoom.enable(!0),n.updatePagePadding&&this._off(e.mobile.window,"throttledresize"),n.trackPersistentToolbars){var a=e(".ui-footer-fixed:jqmData(id)",this._thisPage),o=e(".ui-header-fixed:jqmData(id)",this._thisPage),s=a.length&&i.nextPage&&e(".ui-footer-fixed:jqmData(id='"+a.jqmData("id")+"')",i.nextPage)||e(),r=o.length&&i.nextPage&&e(".ui-header-fixed:jqmData(id='"+o.jqmData("id")+"')",i.nextPage)||e();(s.length||r.length)&&(s.add(r).appendTo(e.mobile.pageContainer),i.nextPage.one("pageshow",function(){r.prependTo(this),s.appendTo(this)}))}},_visible:!0,updatePagePadding:function(i){var n=this.element,a=n.is(".ui-header"),o=parseFloat(n.css(a?"top":"bottom"));this.options.fullscreen||(i=i&&i.type===t&&i||this._thisPage||n.closest(".ui-page"),e(i).css("padding-"+(a?"top":"bottom"),n.outerHeight()+o))},_useTransition:function(t){var i=e.mobile.window,n=this.element,a=i.scrollTop(),o=n.height(),s=n.closest(".ui-page").height(),r=e.mobile.getScreenHeight(),l=n.is(":jqmData(role='header')")?"header":"footer";return!t&&(this.options.transition&&"none"!==this.options.transition&&("header"===l&&!this.options.fullscreen&&a>o||"footer"===l&&!this.options.fullscreen&&s-o>a+r)||this.options.fullscreen)},show:function(e){var t="ui-fixed-hidden",i=this.element;this._useTransition(e)?i.removeClass("out "+t).addClass("in").animationComplete(function(){i.removeClass("in")}):i.removeClass(t),this._visible=!0},hide:function(e){var t="ui-fixed-hidden",i=this.element,n="out"+("slide"===this.options.transition?" reverse":"");this._useTransition(e)?i.addClass(n).removeClass("in").animationComplete(function(){i.addClass(t).removeClass(n)}):i.addClass(t).removeClass(n),this._visible=!1},toggle:function(){this[this._visible?"hide":"show"]()},_bindToggleHandlers:function(){var t,i,n=this,a=n.options,o=n.element,s=!0;o.closest(".ui-page").bind("vclick",function(t){a.tapToggle&&!e(t.target).closest(a.tapToggleBlacklist).length&&n.toggle()}).bind("focusin focusout",function(o){1025>screen.width&&e(o.target).is(a.hideDuringFocus)&&!e(o.target).closest(".ui-header-fixed, .ui-footer-fixed").length&&("focusout"!==o.type||s?"focusin"===o.type&&s&&(clearTimeout(t),s=!1,i=setTimeout(function(){n.hide()},0)):(s=!0,clearTimeout(i),t=setTimeout(function(){n.show()},0)))})},_destroy:function(){var e=this.element,t=e.is(".ui-header");e.closest(".ui-page").css("padding-"+(t?"top":"bottom"),""),e.removeClass("ui-header-fixed ui-footer-fixed ui-header-fullscreen ui-footer-fullscreen in out fade slidedown slideup ui-fixed-hidden"),e.closest(".ui-page").removeClass("ui-page-header-fixed ui-page-footer-fixed ui-page-header-fullscreen ui-page-footer-fullscreen")}}),e.mobile.document.bind("pagecreate create",function(t){e(t.target).jqmData("fullscreen")&&e(e.mobile.fixedtoolbar.prototype.options.initSelector,t.target).not(":jqmData(fullscreen)").jqmData("fullscreen",!0),e.mobile.fixedtoolbar.prototype.enhanceWithin(t.target)})}(e),function(e){e.widget("mobile.fixedtoolbar",e.mobile.fixedtoolbar,{_create:function(){this._super(),this._workarounds()},_workarounds:function(){var e=navigator.userAgent,t=navigator.platform,i=e.match(/AppleWebKit\/([0-9]+)/),n=!!i&&i[1],a=null,o=this;if(t.indexOf("iPhone")>-1||t.indexOf("iPad")>-1||t.indexOf("iPod")>-1)a="ios";else{if(!(e.indexOf("Android")>-1))return;a="android"}if("ios"===a)o._bindScrollWorkaround();else{if(!("android"===a&&n&&534>n))return;o._bindScrollWorkaround(),o._bindListThumbWorkaround()}},_viewportOffset:function(){var t=this.element,i=t.is(".ui-header"),n=Math.abs(t.offset().top-e.mobile.window.scrollTop());return i||(n=Math.round(n-e.mobile.window.height()+t.outerHeight())-60),n},_bindScrollWorkaround:function(){var t=this;this._on(e.mobile.window,{scrollstop:function(){var e=t._viewportOffset();e>2&&t._visible&&t._triggerRedraw()}})},_bindListThumbWorkaround:function(){this.element.closest(".ui-page").addClass("ui-android-2x-fixed")},_triggerRedraw:function(){var t=parseFloat(e(".ui-page-active").css("padding-bottom"));
+e(".ui-page-active").css("padding-bottom",t+1+"px"),setTimeout(function(){e(".ui-page-active").css("padding-bottom",t+"px")},0)},destroy:function(){this._super(),this.element.closest(".ui-page-active").removeClass("ui-android-2x-fix")}})}(e),function(e,n){e.widget("mobile.panel",e.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:!0,theme:"c",position:"left",dismissible:!0,display:"reveal",initSelector:":jqmData(role='panel')",swipeClose:!0,positionFixed:!1},_panelID:null,_closeLink:null,_page:null,_modal:null,_panelInner:null,_wrapper:null,_fixedToolbar:null,_create:function(){var t=this,i=t.element,n=i.closest(":jqmData(role='page')"),a=function(){var t=e.data(n[0],"mobilePage").options.theme,i="ui-body-"+t;return i},o=function(){var e=i.find("."+t.options.classes.panelInner);return 0===e.length&&(e=i.children().wrapAll('<div class="'+t.options.classes.panelInner+'" />').parent()),e},s=function(){var i=n.find("."+t.options.classes.contentWrap);return 0===i.length&&(i=n.children(".ui-header:not(:jqmData(position='fixed')), .ui-content:not(:jqmData(role='popup')), .ui-footer:not(:jqmData(position='fixed'))").wrapAll('<div class="'+t.options.classes.contentWrap+" "+a()+'" />').parent(),e.support.cssTransform3d&&t.options.animate&&i.addClass(t.options.classes.animate)),i},r=function(){var i=n.find("."+t.options.classes.contentFixedToolbar);return 0===i.length&&(i=n.find(".ui-header:jqmData(position='fixed'), .ui-footer:jqmData(position='fixed')").addClass(t.options.classes.contentFixedToolbar),e.support.cssTransform3d&&t.options.animate&&i.addClass(t.options.classes.animate)),i};e.extend(this,{_panelID:i.attr("id"),_closeLink:i.find(":jqmData(rel='close')"),_page:i.closest(":jqmData(role='page')"),_pageTheme:a(),_panelInner:o(),_wrapper:s(),_fixedToolbar:r()}),t._addPanelClasses(),t._wrapper.addClass(this.options.classes.contentWrapClosed),t._fixedToolbar.addClass(this.options.classes.contentFixedToolbarClosed),t._page.addClass(t.options.classes.pagePanel),e.support.cssTransform3d&&t.options.animate&&this.element.addClass(t.options.classes.animate),t._bindUpdateLayout(),t._bindCloseEvents(),t._bindLinkListeners(),t._bindPageEvents(),t.options.dismissible&&t._createModal(),t._bindSwipeEvents()},_createModal:function(){var t=this;t._modal=e("<div class='"+t.options.classes.modal+"' data-panelid='"+t._panelID+"'></div>").on("mousedown",function(){t.close()}).appendTo(this._page)},_getPosDisplayClasses:function(e){return e+"-position-"+this.options.position+" "+e+"-display-"+this.options.display},_getPanelClasses:function(){var e=this.options.classes.panel+" "+this._getPosDisplayClasses(this.options.classes.panel)+" "+this.options.classes.panelClosed;return this.options.theme&&(e+=" ui-body-"+this.options.theme),this.options.positionFixed&&(e+=" "+this.options.classes.panelFixed),e},_addPanelClasses:function(){this.element.addClass(this._getPanelClasses())},_bindCloseEvents:function(){var e=this;e._closeLink.on("click.panel",function(t){return t.preventDefault(),e.close(),!1}),e.element.on("click.panel","a:jqmData(ajax='false')",function(){e.close()})},_positionPanel:function(){var t=this,i=t._panelInner.outerHeight(),n=i>e.mobile.getScreenHeight();n||!t.options.positionFixed?(n&&(t._unfixPanel(),e.mobile.resetActivePageHeight(i)),t._scrollIntoView(i)):t._fixPanel()},_scrollIntoView:function(i){e(t).scrollTop()>i&&t.scrollTo(0,0)},_bindFixListener:function(){this._on(e(t),{throttledresize:"_positionPanel"})},_unbindFixListener:function(){this._off(e(t),"throttledresize")},_unfixPanel:function(){this.options.positionFixed&&e.support.fixedPosition&&this.element.removeClass(this.options.classes.panelFixed)},_fixPanel:function(){this.options.positionFixed&&e.support.fixedPosition&&this.element.addClass(this.options.classes.panelFixed)},_bindUpdateLayout:function(){var e=this;e.element.on("updatelayout",function(){e._open&&e._positionPanel()})},_bindLinkListeners:function(){var t=this;t._page.on("click.panel","a",function(i){if(this.href.split("#")[1]===t._panelID&&t._panelID!==n){i.preventDefault();var a=e(this);return a.hasClass("ui-link")||(a.addClass(e.mobile.activeBtnClass),t.element.one("panelopen panelclose",function(){a.removeClass(e.mobile.activeBtnClass)})),t.toggle(),!1}})},_bindSwipeEvents:function(){var e=this,t=e._modal?e.element.add(e._modal):e.element;e.options.swipeClose&&("left"===e.options.position?t.on("swipeleft.panel",function(){e.close()}):t.on("swiperight.panel",function(){e.close()}))},_bindPageEvents:function(){var e=this;e._page.on("panelbeforeopen",function(t){e._open&&t.target!==e.element[0]&&e.close()}).on("pagehide",function(){e._open&&e.close(!0)}).on("keyup.panel",function(t){27===t.keyCode&&e._open&&e.close()})},_open:!1,_contentWrapOpenClasses:null,_fixedToolbarOpenClasses:null,_modalOpenClasses:null,open:function(t){if(!this._open){var i=this,n=i.options,a=function(){i._page.off("panelclose"),i._page.jqmData("panel","open"),!t&&e.support.cssTransform3d&&n.animate?i.element.add(i._wrapper).on(i._transitionEndEvents,o):setTimeout(o,0),i.options.theme&&"overlay"!==i.options.display&&i._page.removeClass(i._pageTheme).addClass("ui-body-"+i.options.theme),i.element.removeClass(n.classes.panelClosed).addClass(n.classes.panelOpen),i._positionPanel(),i.options.theme&&"overlay"!==i.options.display&&i._wrapper.css("min-height",i._page.css("min-height")),i._contentWrapOpenClasses=i._getPosDisplayClasses(n.classes.contentWrap),i._wrapper.removeClass(n.classes.contentWrapClosed).addClass(i._contentWrapOpenClasses+" "+n.classes.contentWrapOpen),i._fixedToolbarOpenClasses=i._getPosDisplayClasses(n.classes.contentFixedToolbar),i._fixedToolbar.removeClass(n.classes.contentFixedToolbarClosed).addClass(i._fixedToolbarOpenClasses+" "+n.classes.contentFixedToolbarOpen),i._modalOpenClasses=i._getPosDisplayClasses(n.classes.modal)+" "+n.classes.modalOpen,i._modal&&i._modal.addClass(i._modalOpenClasses)},o=function(){i.element.add(i._wrapper).off(i._transitionEndEvents,o),i._page.addClass(n.classes.pagePanelOpen),i._bindFixListener(),i._trigger("open")};0>this.element.closest(".ui-page-active").length&&(t=!0),i._trigger("beforeopen"),"open"===i._page.jqmData("panel")?i._page.on("panelclose",function(){a()}):a(),i._open=!0}},close:function(t){if(this._open){var i=this.options,n=this,a=function(){!t&&e.support.cssTransform3d&&i.animate?n.element.add(n._wrapper).on(n._transitionEndEvents,o):setTimeout(o,0),n._page.removeClass(i.classes.pagePanelOpen),n.element.removeClass(i.classes.panelOpen),n._wrapper.removeClass(i.classes.contentWrapOpen),n._fixedToolbar.removeClass(i.classes.contentFixedToolbarOpen),n._modal&&n._modal.removeClass(n._modalOpenClasses)},o=function(){n.options.theme&&"overlay"!==n.options.display&&(n._page.removeClass("ui-body-"+n.options.theme).addClass(n._pageTheme),n._wrapper.css("min-height","")),n.element.add(n._wrapper).off(n._transitionEndEvents,o),n.element.addClass(i.classes.panelClosed),n._wrapper.removeClass(n._contentWrapOpenClasses).addClass(i.classes.contentWrapClosed),n._fixedToolbar.removeClass(n._fixedToolbarOpenClasses).addClass(i.classes.contentFixedToolbarClosed),n._fixPanel(),n._unbindFixListener(),e.mobile.resetActivePageHeight(),n._page.jqmRemoveData("panel"),n._trigger("close")};0>this.element.closest(".ui-page-active").length&&(t=!0),n._trigger("beforeclose"),a(),n._open=!1}},toggle:function(){this[this._open?"close":"open"]()},_transitionEndEvents:"webkitTransitionEnd oTransitionEnd otransitionend transitionend msTransitionEnd",_destroy:function(){var t=this.options.classes,i=this.options.theme,n=this.element.siblings("."+t.panel).length;n?this._open&&(this._wrapper.removeClass(t.contentWrapOpen),this._fixedToolbar.removeClass(t.contentFixedToolbarOpen),this._page.jqmRemoveData("panel"),this._page.removeClass(t.pagePanelOpen),i&&this._page.removeClass("ui-body-"+i).addClass(this._pageTheme)):(this._wrapper.children().unwrap(),this._page.find("a").unbind("panelopen panelclose"),this._page.removeClass(t.pagePanel),this._open&&(this._page.jqmRemoveData("panel"),this._page.removeClass(t.pagePanelOpen),i&&this._page.removeClass("ui-body-"+i).addClass(this._pageTheme),e.mobile.resetActivePageHeight())),this._panelInner.children().unwrap(),this.element.removeClass([this._getPanelClasses(),t.panelAnimate].join(" ")).off("swipeleft.panel swiperight.panel").off("panelbeforeopen").off("panelhide").off("keyup.panel").off("updatelayout"),this._closeLink.off("click.panel"),this._modal&&this._modal.remove(),this.element.off(this._transitionEndEvents).removeClass([t.panelUnfixed,t.panelClosed,t.panelOpen].join(" "))}}),e(i).bind("pagecreate create",function(t){e.mobile.panel.prototype.enhanceWithin(t.target)})}(e),function(e,t){e.widget("mobile.table",e.mobile.widget,{options:{classes:{table:"ui-table"},initSelector:":jqmData(role='table')"},_create:function(){var e=this;e.refresh(!0)},refresh:function(i){var n=this,a=this.element.find("thead tr");i&&this.element.addClass(this.options.classes.table),n.headers=this.element.find("tr:eq(0)").children(),n.allHeaders=n.headers.add(a.children()),a.each(function(){var o=0;e(this).children().each(function(){var s=parseInt(e(this).attr("colspan"),10),r=":nth-child("+(o+1)+")";if(e(this).jqmData("colstart",o+1),s)for(var l=0;s-1>l;l++)o++,r+=", :nth-child("+(o+1)+")";i===t&&e(this).jqmData("cells",""),e(this).jqmData("cells",n.element.find("tr").not(a.eq(0)).not(this).children(r)),o++})}),i===t&&this.element.trigger("refresh")}}),e.mobile.document.bind("pagecreate create",function(t){e.mobile.table.prototype.enhanceWithin(t.target)})}(e),function(e,t){e.mobile.table.prototype.options.mode="columntoggle",e.mobile.table.prototype.options.columnBtnTheme=null,e.mobile.table.prototype.options.columnPopupTheme=null,e.mobile.table.prototype.options.columnBtnText="Columns...",e.mobile.table.prototype.options.classes=e.extend(e.mobile.table.prototype.options.classes,{popup:"ui-table-columntoggle-popup",columnBtn:"ui-table-columntoggle-btn",priorityPrefix:"ui-table-priority-",columnToggleTable:"ui-table-columntoggle"}),e.mobile.document.delegate(":jqmData(role='table')","tablecreate refresh",function(i){var n,a,o,s,r=e(this),l=r.data("mobile-table"),d=i.type,c=l.options,h=e.mobile.ns,u=(r.attr("id")||c.classes.popup)+"-popup";"columntoggle"===c.mode&&("refresh"!==d&&(l.element.addClass(c.classes.columnToggleTable),n=e("<a href='#"+u+"' class='"+c.classes.columnBtn+"' data-"+h+"rel='popup' data-"+h+"mini='true'>"+c.columnBtnText+"</a>"),a=e("<div data-"+h+"role='popup' data-"+h+"role='fieldcontain' class='"+c.classes.popup+"' id='"+u+"'></div>"),o=e("<fieldset data-"+h+"role='controlgroup'></fieldset>")),l.headers.not("td").each(function(t){var i=e(this).jqmData("priority"),n=e(this).add(e(this).jqmData("cells"));i&&(n.addClass(c.classes.priorityPrefix+i),"refresh"!==d?e("<label><input type='checkbox' checked />"+e(this).text()+"</label>").appendTo(o).children(0).jqmData("cells",n).checkboxradio({theme:c.columnPopupTheme}):e("#"+u+" fieldset div:eq("+t+")").find("input").jqmData("cells",n))}),"refresh"!==d&&o.appendTo(a),s=o===t?e("#"+u+" fieldset"):o,"refresh"!==d&&(s.on("change","input",function(){this.checked?e(this).jqmData("cells").removeClass("ui-table-cell-hidden").addClass("ui-table-cell-visible"):e(this).jqmData("cells").removeClass("ui-table-cell-visible").addClass("ui-table-cell-hidden")}),n.insertBefore(r).buttonMarkup({theme:c.columnBtnTheme}),a.insertBefore(r).popup()),l.update=function(){s.find("input").each(function(){this.checked?(this.checked="table-cell"===e(this).jqmData("cells").eq(0).css("display"),"refresh"===d&&e(this).jqmData("cells").addClass("ui-table-cell-visible")):e(this).jqmData("cells").addClass("ui-table-cell-hidden"),e(this).checkboxradio("refresh")})},e.mobile.window.on("throttledresize",l.update),l.update())})}(e),function(e){e.mobile.table.prototype.options.mode="reflow",e.mobile.table.prototype.options.classes=e.extend(e.mobile.table.prototype.options.classes,{reflowTable:"ui-table-reflow",cellLabels:"ui-table-cell-label"}),e.mobile.document.delegate(":jqmData(role='table')","tablecreate refresh",function(t){var i=e(this),n=t.type,a=i.data("mobile-table"),o=a.options;if("reflow"===o.mode){"refresh"!==n&&a.element.addClass(o.classes.reflowTable);var s=e(a.allHeaders.get().reverse());s.each(function(){var t=e(this).jqmData("cells"),i=e(this).jqmData("colstart"),n=t.not(this).filter("thead th").length&&" ui-table-cell-label-top",a=e(this).text();if(""!==a)if(n){var s=parseInt(e(this).attr("colspan"),10),r="";s&&(r="td:nth-child("+s+"n + "+i+")"),t.filter(r).prepend("<b class='"+o.classes.cellLabels+n+"'>"+a+"</b>")}else t.prepend("<b class='"+o.classes.cellLabels+"'>"+a+"</b>")})}})}(e),function(e,t){function i(e){o=e.originalEvent,d=o.accelerationIncludingGravity,s=Math.abs(d.x),r=Math.abs(d.y),l=Math.abs(d.z),!t.orientation&&(s>7||(l>6&&8>r||8>l&&r>6)&&s>5)?c.enabled&&c.disable():c.enabled||c.enable()}e.mobile.iosorientationfixEnabled=!0;var a=navigator.userAgent;if(!(/iPhone|iPad|iPod/.test(navigator.platform)&&/OS [1-5]_[0-9_]* like Mac OS X/i.test(a)&&a.indexOf("AppleWebKit")>-1))return e.mobile.iosorientationfixEnabled=!1,n;var o,s,r,l,d,c=e.mobile.zoom;e.mobile.document.on("mobileinit",function(){e.mobile.iosorientationfixEnabled&&e.mobile.window.bind("orientationchange.iosorientationfix",c.enable).bind("devicemotion.iosorientationfix",i)})}(e,this),function(e,t){function n(){a.removeClass("ui-mobile-rendering")}var a=e("html"),o=(e("head"),e.mobile.window);e(t.document).trigger("mobileinit"),e.mobile.gradeA()&&(e.mobile.ajaxBlacklist&&(e.mobile.ajaxEnabled=!1),a.addClass("ui-mobile ui-mobile-rendering"),setTimeout(n,5e3),e.extend(e.mobile,{initializePage:function(){var t=e.mobile.path,a=e(":jqmData(role='page'), :jqmData(role='dialog')"),s=t.stripHash(t.stripQueryParams(t.parseLocation().hash)),r=i.getElementById(s);a.length||(a=e("body").wrapInner("<div data-"+e.mobile.ns+"role='page'></div>").children(0)),a.each(function(){var t=e(this);t.jqmData("url")||t.attr("data-"+e.mobile.ns+"url",t.attr("id")||location.pathname+location.search)}),e.mobile.firstPage=a.first(),e.mobile.pageContainer=e.mobile.firstPage.parent().addClass("ui-mobile-viewport"),o.trigger("pagecontainercreate"),e.mobile.showPageLoadingMsg(),n(),e.mobile.hashListeningEnabled&&e.mobile.path.isHashValid(location.hash)&&(e(r).is(':jqmData(role="page")')||e.mobile.path.isPath(s)||s===e.mobile.dialogHashKey)?e.event.special.navigate.isPushStateEnabled()?(e.mobile.navigate.history.stack=[],e.mobile.navigate(e.mobile.path.isPath(location.hash)?location.hash:location.href)):o.trigger("hashchange",[!0]):(e.mobile.path.isHashValid(location.hash)&&(e.mobile.urlHistory.initialDst=s.replace("#","")),e.event.special.navigate.isPushStateEnabled()&&e.mobile.navigate.navigator.squash(t.parseLocation().href),e.mobile.changePage(e.mobile.firstPage,{transition:"none",reverse:!0,changeHash:!1,fromHashChange:!0}))}}),e.mobile.navreadyDeferred.resolve(),e(function(){t.scrollTo(0,1),e.mobile.defaultHomeScroll=e.support.scrollTop&&1!==e.mobile.window.scrollTop()?1:0,e.mobile.autoInitializePage&&e.mobile.initializePage(),o.load(e.mobile.silentScroll),e.support.cssPointerEvents||e.mobile.document.delegate(".ui-disabled","vclick",function(e){e.preventDefault(),e.stopImmediatePropagation()})}))}(e,this)});
+//@ sourceMappingURL=jquery.mobile-1.3.1.min.map
\ No newline at end of file
追加: branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/jquery.mobile-1.3.1.min.map
===================================================================
--- branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/jquery.mobile-1.3.1.min.map (rev 0)
+++ branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.mobile/jquery.mobile-1.3.1.min.map 2013-05-19 20:42:41 UTC (rev 22825)
@@ -0,0 +1 @@
+{"version":3,"file":"jquery.mobile-1.3.1.min.js","sources":["jquery.mobile-1.3.1.js"],"names":["root","doc","factory","define","amd","$","mobile","jQuery","this","document","window","undefined","nsNormalizeDict","extend","version","ns","subPageUrlKey","activePageClass","activeBtnClass","focusClass","ajaxEnabled","hashListeningEnabled","linkBindingEnabled","defaultPageTransition","maxTransitionWidth","minScrollBack","touchOverflowEnabled","defaultDialogTransition","pageLoadErrorMessage","pageLoadErrorMessageTheme","phonegapNavigationEnabled","autoInitializePage","pushStateEnabled","ignoreContentEnabled","orientationChangeEnabled","buttonMarkup","hoverDelay","keyCode","ALT","BACKSPACE","CAPS_LOCK","COMMA","COMMAND","COMMAND_LEFT","COMMAND_RIGHT","CONTROL","DELETE","DOWN","END","ENTER","ESCAPE","HOME","INSERT","LEFT","MENU","NUMPAD_ADD","NUMPAD_DECIMAL","NUMPAD_DIVIDE","NUMPAD_ENTER","NUMPAD_MULTIPLY","NUMPAD_SUBTRACT","PAGE_DOWN","PAGE_UP","PERIOD","RIGHT","SHIFT","SPACE","TAB","UP","WINDOWS","behaviors","silentScroll","ypos","type","defaultHomeScroll","event","special","scrollstart","enabled","setTimeout","scrollTo","trigger","x","y","nsNormalize","prop","camelCase","getInheritedTheme","el","defaultTheme","c","m","e","ltr","re","className","exec","parentNode","closestPageData","$target","closest","data","enhanceable","$set","haveParents","hijackable","attr","$element","excluded","count","length","$newSet","i","eq","getAttribute","add","getScreenHeight","innerHeight","height","fn","jqmData","value","result","arguments","elem","jqmRemoveData","removeData","removeWithDependents","$elem","remove","addDependents","newDependents","dependents","merge","getEncodedText","text","html","jqmEnhanceable","jqmHijackable","oldFind","find","jqmDataRE","selector","context","ret","extra","replace","call","matches","expr","set","matchesSelector","node","uuid","slice","Array","prototype","_cleanData","cleanData","elems","triggerHandler","widget","name","base","fullName","existingConstructor","constructor","basePrototype","namespace","split","Widget","toLowerCase","options","element","_createWidget","_proto","_childConstructors","each","isFunction","_super","apply","_superApply","args","returnValue","__super","__superApply","widgetEventPrefix","widgetName","widgetFullName","child","childPrototype","push","bridge","target","key","input","inputIndex","inputLength","hasOwnProperty","isPlainObject","object","isMethodCall","concat","methodValue","instance","charAt","jquery","pushStack","get","error","option","_init","defaultElement","disabled","create","eventNamespace","_getCreateOptions","bindings","hoverable","focusable","_on","destroy","style","ownerDocument","defaultView","parentWindow","_create","_trigger","_getCreateEventData","noop","_destroy","unbind","removeAttr","removeClass","parts","curOption","shift","pop","_setOptions","_setOption","toggleClass","enable","disable","suppressDisabledCheck","handlers","delegateElement","handler","handlerProxy","hasClass","guid","match","eventName","delegate","bind","_off","join","undelegate","_delay","delay","_hoverable","mouseenter","currentTarget","addClass","mouseleave","_focusable","focusin","focusout","orig","callback","Event","originalEvent","isDefaultPrevented","show","hide","method","defaultEffect","effect","hasOptions","effectName","duration","isEmptyObject","complete","effects","easing","queue","next","enhanceWithin","useKeepNative","enhance","initSelector","targets","page","keepNative","$widgetElements","keepNativeSelector","not","raise","msg","loadingMessageTextVisible","loadingMessageTheme","loadingMessage","showPageLoadingMsg","theme","msgText","textonly","loading","hidePageLoadingMsg","loaderWidget","loader","loaderClass","$html","$window","textVisible","defaultHtml","fakeFixLoader","activeBtn","first","css","top","support","scrollTop","offset","checkLoaderPosition","screenHeight","proxy","resetHtml","message","loadSettings","appendTo","pageContainer","get_fragment","url","location","href","fake_onhashchange","str_hashchange","doc_mode","documentMode","supports_onhashchange","setup","start","teardown","stop","poll","hash","history_hash","history_get","last_hash","history_set","timeout_id","self","fn_retval","val","clearTimeout","attachEvent","addEventListener","iframe","iframe_src","src","one","insertAfter","contentWindow","onpropertychange","propertyName","title","iframe_doc","domain","open","write","close","matchMedia","bool","docElem","documentElement","refNode","firstElementChild","firstChild","fakeBody","createElement","div","id","cssText","background","appendChild","q","innerHTML","insertBefore","offsetWidth","removeChild","media","touch","orientation","propExists","uc_prop","toUpperCase","substr","props","vendors","v","fbCSS","validStyle","check_vend","uc","txt","vend_pref","vend","check_style","vend_prop","uc_vend","propStyle","setAttribute","check_vends","transform3dTest","mqProp","transforms","MozTransform","transform","append","t","getComputedStyle","getPropertyValue","baseTagTest","link","rebase","fauxBase","protocol","host","pathname","fauxEle","prependTo","indexOf","cssPointerEventsTest","supports","pointerEvents","boundingRect","getBoundingClientRect","fixedPosition","w","ua","navigator","userAgent","platform","wkmatch","wkversion","ffmatch","ffversion","operammobilematch","omversion","operamini","toString","webos","opera","bb","blackberry","browser","oldIE","a","all","cssTransitions","pushState","history","search","mediaquery","cssPseudoElement","touchOverflow","cssTransform3d","boxShadow","dynamicBaseTag","cssPointerEvents","nokiaLTE7_3","gradeA","ajaxBlacklist","WebKitPoint","$win","navigate","bound","originalEventName","isPushStateEnabled","isHashChangeEnabled","popstate","newEvent","beforeNavigate","state","historyState","hashchange","hashchangeState","path","$base","dialogHashKey","uiStateKey","urlParseRE","getLocation","uri","parseUrl","parseLocation","hrefNoHash","hrefNoSearch","doubleSlash","authority","username","password","hostname","port","directory","filename","makePathAbsolute","relPath","absPath","absStack","relStack","d","isSameDomain","absUrl1","absUrl2","isRelativeUrl","isAbsoluteUrl","makeUrlAbsolute","relUrl","absUrl","documentBase","relObj","absObj","hasPath","addSearchParams","params","u","p","param","s","convertUrlToDataUrl","isEmbeddedPage","decodeURIComponent","newPath","stripHash","isPath","test","clean","stripQueryParams","cleanHash","isHashValid","isExternal","documentUrl","hasProtocol","documentBaseDiffers","squash","resolutionUrl","cleanedUrl","stateIndex","preservedHash","uiState","getDocumentUrl","isPreservableHash","asParsedObject","getDocumentBase","History","stack","index","activeIndex","getActive","getLast","previousIndex","getNext","getPrev","clearForward","earlyReturn","entry","direct","opts","newActiveIndex","present","back","forward","missing","initialHref","Navigator","ignoreInitialHashChange","popstate.history","hashchange.history","replaceState","parsed","loc","resolved","go","noEvents","popstateEvent","isPopStateEvent","preventNextHashChange","preventHashAssignPopState","ignorePopState","stopImmediatePropagation","preventDefault","historyEntry","direction","getNativeEvent","createVirtualEvent","eventType","oe","ne","ct","j","len","mouseEventProps","which","touches","changedTouches","touchEventProps","getVirtualBindingFlags","b","k","flags","dataPropertyName","hasVirtualBinding","getClosestElementWithVirtualBinding","enableTouchBindings","blockTouchTriggers","disableTouchBindings","enableMouseBindings","lastTouchID","clickBlockList","blockMouseTriggers","disableMouseBindings","startResetTimer","clearResetTimer","resetTimerID","vmouse","resetTimerDuration","triggerVirtualEvent","ve","mouseEventCallback","touchID","touchTargetPropertyName","isPropagationStopped","stopPropagation","isImmediatePropagationStopped","handleTouchStart","nextTouchID","didScroll","startX","pageX","startY","pageY","handleScroll","handleTouchMove","didCancel","moveThreshold","moveDistanceThreshold","Math","abs","handleTouchEnd","clientX","clientY","hasVirtualBindings","ele","dummyMouseHandler","getSpecialEventObject","realType","activeDocHandlers","$document","eventCaptureSupported","$this","threshold","virtualEventNames","mouseHookProps","mouseHooks","clickDistanceThreshold","o","cnt","triggerCustomEvent","obj","originalType","dispatch","attrFn","supportTouch","scrollEvent","touchStartEvent","touchStopEvent","touchMoveEvent","scrolling","thisObject","timer","tap","tapholdThreshold","clearTapTimer","clearTapHandlers","clickHandler","origTarget","swipe","scrollSupressionThreshold","durationThreshold","horizontalDistanceThreshold","verticalDistanceThreshold","time","Date","getTime","coords","origin","handleSwipe","moveHandler","scrollstop","taphold","swipeleft","swiperight","sourceEvent","throttledresize","heldCall","curr","diff","throttle","lastCall","get_orientation","last_orientation","win","event_name","initial_orientation_is_landscape","initial_orientation_is_default","portrait_map","0","180","ww","innerWidth","width","wh","landscape_threshold","-90","90","orientationchange","handleObj","old_handler","isPortrait","clientWidth","clientHeight","domCache","keepNativeDefault","pagebeforehide","pagebeforeshow","_handlePageBeforeShow","setContainerBackground","removeContainerBackground","parent","keepNativeDefined","trim","createHandler","sequential","reverse","$to","$from","deferred","Deferred","reverseClass","active","urlHistory","toScroll","lastScroll","maxTransitionOverride","none","max","getMaxScrollForTransition","toPreClass","toggleViewportClass","scrollPage","cleanFrom","startOut","animationComplete","doneOut","startIn","focusPage","doneIn","resolve","promise","sequentialHandler","simultaneousHandler","defaultGetMaxScrollForTransition","defaultTransitionHandler","transitionHandlers","default","simultaneous","transitionFallbacks","_maybeDegradeTransition","transition","removeActiveLinkClass","forceRemoval","$activeClickedLink","releasePageTransitionLock","isPageTransitioning","pageTransitionQueue","changePage","transitionPages","toPage","fromPage","nextPage","prevPage","th","done","enhancePage","$page","role","findBaseWithDefault","closestBase","activePage","getClosestBaseUrl","findClosestLink","nodeName","$head","getFilePath","splitkey","isFirstPageUrl","samePath","fp","firstPage","fpId","isPermittedCrossDomainRequest","docUrl","reqUrl","allowCrossDomainPages","$lastVClicked","domreadyDeferred","children","reset","nav","app","backHistory","autofocus","pageTitle","focus","setLastScroll","delayedSetLastScroll","setLastScrollEnabled","resetActivePageHeight","aPage","aPagePadT","parseFloat","aPagePadB","aPageBorderT","aPageBorderB","_bindPageRemove","is","prEvent","loadPage","settings","defaults","dupCachedPage","reloadPage","fileUrl","dataUrl","reject","prefetch","mpc","pblEvent","triggerData","showLoadMsg","loadMsgDelay","hideMsg","ajax","contentType","dataType","success","textStatus","xhr","newPageTitle","RegExp","$1","pageElemRegex","dataUrlRegex","thisAttr","thisUrl","errorThrown","plfEvent","unshift","isToPageString","pbcEvent","newPage","duplicateCachedPage","fail","pageUrl","activeIsInitialPage","historyDir","isDialog","allowSamePageTransition","fromHashChange","activeElement","blur","alreadyThere","changeHash","initialDst","alreadyFocused","navreadyDeferred","_registerInternalEvents","getAjaxFormData","$form","calculateOnly","formData","vclickedName","serializeArray","form","$btn","btnEls","needClosest","outer","httpCleanup","$link","baseUrl","useDefaultUrlHandling","urls","inArray","_handleHashChange","to","changePageOptions","when","flip","flow","slide","slidedown","slidefade","slideup","turn","degradeInputs","color","date","datetime","datetime-local","email","month","number","range","tel","week","optType","clone","hasType","findstr","repstr","replaceWith","closeBtn","closeBtnText","overlayTheme","corners","_isCloseable","$el","cornerClass","dialogWrap","class","wrapInner","_createComplete","_setCloseBtn","btn","_headerCloseButton","prepend","idx","dst","hist","dialog","backBtnText","addBackBtn","backBtnTheme","headerTheme","footerTheme","contentTheme","pageRole","pageTheme","$headeranchors","leftbtn","rightbtn","backBtn","thisTheme","aria-level","closestEnabledButton","cname","updateButtonClass","classToRemove","classToAdd","hover","buttonElements","bcls","getAttrFixed","$workingSet","nsKey","buttonClass","iconClass","buttonInner","buttonText","buttonIcon","icon","iconpos","inline","shadow","iconshadow","mini","innerClass","textClass","tagName","inner","wrapperEls","attachEvents","hov","foc","vmousedown vmousecancel vmouseup vmouseover vmouseout focus blur scrollstart","isTouchEvent","evt","focusin focus","focusout blur","expandCueText","collapseCueText","collapsed","heading","collapsedIcon","expandedIcon","inset","collapsible","collapsibleHeading","collapsibleContent","collapsibleSet","collapsibleClasses","isCollapse","end","addFirstLastClasses","_getVisibles","$els","visibles","filter","_addFirstLastClasses","$visibles","last","closestCollapsible","siblings","collapsiblesInSet","expanded","_refresh","refresh","collapsibleset","fieldcontain","contents","nodeType","nodeValue","grid","iterator","$kids","gridCols","solo","letter","$navbar","$navbtns","navbar","listCountPerPage","countTheme","dividerTheme","splitIcon","splitTheme","listviewClasses","_findFirstElementByTagName","nextProp","lcName","ucName","dict","_getChildrenByTagName","results","nextSibling","_addThumbClasses","containers","img","parentPage","_createSubPages","item","itemClass","itemTheme","splittheme","counter","startCount","newStartCount","countParent","linkIcon","$list","dividertheme","listsplittheme","listspliticon","listicon","li","ol","jsCount","itemClassDict","parseInt","pos","numli","isDivider","empty","_idStringEscape","str","hasSubPages","parentList","parentUrl","parentId","expando","parentListId","dns","persistentFooterID","toArray","anchor","list","listId","nodeElsFull","prevAll","nodeEls","detach","wrap","before","after","listview","newRemove","ui","npURL","childPages","meta","initialContent","disabledZoom","enabledZoom","disabledInitially","zoom","locked","lock","unlock","restore","preventFocusZoom","clearBtn","clearSearchButtonText","clearBtnText","toggleClear","clearbtn","focusedEl","themeclass","miniclass","isSearch","clearBtnBlacklist","inputNeedsClearBtn","inputNeedsWrap","autocorrect","keyupTimeout","extraLineHeight","keyupTimeoutBuffer","_keyup","scrollHeight","paddingTop","paddingBottom","paddingHeight","on","pagechange","load","parentNeedsDisabled","parentNeedsEnabled","textinput","filterPlaceholder","filterTheme","filterReveal","defaultFilterCallback","searchValue","filterCallback","wrapper","submit","onKeyUp","listItems","lastval","childItems","itemtext","isCustomFilterCallback","placeholder","autodividers","autodividersSelector","elt","replaceDividers","dividerText","lis","lastDividerText","divider","createTextNode","afterListviewRefresh","formReset","_handleFormReset","inheritAttr","dataAttr","parentLabel","label","inputtype","checkedState","uncheckedState","checkedClass","uncheckedClass","checkedicon","uncheckedicon","wrapAll","vmouseover","vclick","_cacheVals","_getInputSet","_updateAll","vmousedown","checked","checkboxradio","_reset","parents","$button","tdo","classes","button","op","trackTheme","highlight","control","parentTheme","cType","isRangeslider","isToggleSwitch","selectClass","controlID","$label","labelID","min","step","miniClass","domHandle","handle","domSlider","slider","valuebg","bg","aria-valuemin","aria-valuemax","aria-valuenow","_value","aria-valuetext","aria-labelledby","dragging","beforeStart","userModified","mouseMoved","childNodes","optionsCount","side","sliderTheme","sliderImg","_labels","change","keyup","vmouseup","_sliderVMouseDown","vmousemove","keydown","_controlChange","_controlKeyup","_controlBlur","_controlVMouseUp","_checkedRefresh","_handleVMouseDown","_handleKeydown","_keySliding","_handleKeyup","selectedIndex","_sliderVMouseUp","_preventDocumentDrag","isfromControl","preventInputUpdate","left","tol","pxStep","percent","isInput","optionElements","round","isNaN","newval","valModStep","alignValue","percentPerStep","toFixed","handlePercent","aPercent","bPercent","ab","valueChanged","secondLabel","elClass","_inputFirst","_inputLast","_sliderFirst","_sliderLast","firstHandle","_sliders","_targetVal","_sliderTarget","_proxy","slidebeforestart","slidestop","slidedrag","slidebeforechange","mousedown","_handleReset","_updateHighlight","_dragFirstHandle","_slidedrag","otherSlider","_slidestop","_slidebeforestart","_change","thisSlider","margin-left","rangeslider","hidePlaceholderMenuItems","closeText","nativeMenu","_button","_setDisabled","_focusButton","_selectOptions","select","_preExtension","selectID","isMultiple","multiple","setButtonText","buttonCount","build","selected","selectedIndices","map","span","setButtonCount","selectmenu","fitSegmentInsideSegment","winSize","segSize","desired","windowCoords","scrollLeft","cx","cy","positionTo","tolerance","closeLinkSelector","closeLinkEvents","navigateEvents","closeEvents","dismissible","_eatEventAndClose","_resizeScreen","popupHeight","_ui","container","outerHeight","screen","_handleWindowKeyUp","_isOpen","_expectResizeEvent","winCoords","_resizeData","timeoutId","_resizeTimeout","reposition","_ignoreResizeEvents","_orientationchangeInProgress","_ignoreResizeTo","_handleWindowResize","_handleWindowOrientationchange","_handleDocumentFocusIn","$tgt","tgt","focusElement","thisPage","myId","_scrollTop","_page","_fallbackTransition","_currentTransition","_prereqs","_tolerance","resize","_applyTheme","prefix","currentTheme","themeStr","String","_setTheme","_setOverlayTheme","_setShadow","_setCorners","_applyTransition","_setTransition","_setTolerance","r","l","ar","exclusions","setter","_placementCoords","menuSize","rc","outerWidth","docEl","docBody","body","docHeight","offsetHeight","_createPrereqs","screenPrereq","containerPrereq","whenDone","prereqs","then","_animate","screenClassToAdd","applyTransition","containerClassToAdd","_desiredCoords","pTo","_reposition","_openPrereqsComplete","_open","androidBlacklist","androidmatch","andversion","chromematch","additionalCondition","_closePrereqScreen","_closePrereqContainer","_closePrereqsDone","popup","_close","immediate","_unenhance","_closePopup","parsedDst","toUrl","_myUrl","_bindContainerClose","hashkey","currentIsDialog","hasHash","urlAltered","handleLink","closestPage","scope","$parent","extendSelect","menuPageContent","menuPageClose","headerClose","origDestroy","popupID","dialogID","selectOptions","buttonId","menuId","menuPage","listbox","header","headerTitle","_origTabIndex","isOpen","_decideFormat","menuType","oldIndex","newIndex","prev","click","_isRebuildRequired","forceRebuild","indicies","_buildList","focusMenuItem","selfListParent","menuHeight","btnOffset","needPlaceholder","dataIcon","optGroup","$options","numOptions","dataPrefix","dataIndexAttr","dataIconAttr","dataRoleAttr","dataPlaceholderAttr","fragment","createDocumentFragment","isPlaceholderItem","$option","optLabel","_removePlaceholderAttr","aria-haspopup","aria-owns","selectmenuWidget","excludeInvisible","legend","grouplegend","_initialRefresh","_setType","_setMini","els","controlgroup","visibleOnPageShow","disablePageZoom","fullscreen","tapToggle","tapToggleBlacklist","hideDuringFocus","updatePagePadding","trackPersistentToolbars","supportBlacklist","tbtype","_thisPage","_addTransitionClass","_bindPageEvents","_bindToggleHandlers","tclass","webkitAnimationStart","animationstart","updatelayout","pageshow","_handleAnimationStart","_handlePageShow","_handlePageBeforeHide","thisFooter","thisHeader","nextFooter","nextHeader","_visible","tbPage","_useTransition","notransition","scroll","elHeight","pHeight","viewportHeight","hideClass","outclass","toggle","delayShow","delayHide","isVisible","fixedtoolbar","_workarounds","os","_bindScrollWorkaround","_bindListThumbWorkaround","_viewportOffset","viewportOffset","_triggerRedraw","panel","panelOpen","panelClosed","panelFixed","panelInner","modal","modalOpen","pagePanel","pagePanelOpen","contentWrap","contentWrapOpen","contentWrapClosed","contentFixedToolbar","contentFixedToolbarOpen","contentFixedToolbarClosed","animate","position","display","swipeClose","positionFixed","_panelID","_closeLink","_modal","_panelInner","_wrapper","_fixedToolbar","_getPageTheme","$theme","$pageThemeClass","_getPanelInner","$panelInner","_getWrapper","$wrapper","_getFixedToolbar","$fixedToolbar","_pageTheme","_addPanelClasses","_bindUpdateLayout","_bindCloseEvents","_bindLinkListeners","_createModal","_bindSwipeEvents","_getPosDisplayClasses","_getPanelClasses","panelClasses","_positionPanel","panelInnerHeight","expand","_unfixPanel","_scrollIntoView","_fixPanel","_bindFixListener","_unbindFixListener","area","_contentWrapOpenClasses","_fixedToolbarOpenClasses","_modalOpenClasses","_openPanel","off","_transitionEndEvents","_closePanel","hasOtherSiblingPanels","unwrap","panelAnimate","panelUnfixed","table","trs","headers","allHeaders","coltally","sel","mode","columnBtnTheme","columnPopupTheme","columnBtnText","columnBtn","priorityPrefix","columnToggleTable","$menuButton","$popup","$menu","$switchboard","$table","priority","$cells","update","reflowTable","cellLabels","reverseHeaders","colstart","hierarchyClass","iteration","checkTilt","aig","accelerationIncludingGravity","z","iosorientationfixEnabled","hideRenderingClass","initializePage","$pages","hashPage","getElementById"],"mappings":"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"}
\ No newline at end of file
削除: branches/version-2_13-dev/html/user_data/packages/sphone/js/news.js
===================================================================
--- branches/version-2_13-dev/html/user_data/packages/sphone/js/news.js 2013-05-19 18:03:57 UTC (rev 22824)
+++ branches/version-2_13-dev/html/user_data/packages/sphone/js/news.js 2013-05-19 20:42:41 UTC (rev 22825)
@@ -1,17 +0,0 @@
-$(function() {
- $('.anews').each(function(i) {
- $(this).addClass('news-' + i).hide();
- });
- $('.news-0').fadeIn('slow');
- var count = 1;
- var interval = 5000;
- var timer = setInterval(function() {
- $('.anews').hide();
- $('.news-' + count).fadeIn('slow');
- count++;
- if (count > $('.anews').size() -1) {
- count = 0;
- }
- }, interval);
-
- });
Svn-src-all メーリングリストの案内