From 1c363e84e93a5684a3d72b7bc0a4ccb8a2fa9ba2 Mon Sep 17 00:00:00 2001 From: Olivier Lamy Date: Fri, 20 Jan 2012 23:18:19 +0000 Subject: [PATCH] configure fancybox to display images git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1234203 13f79535-47bb-0310-9956-ffa450edef68 --- .../resources/css/jquery.fancybox-1.3.4.css | 359 + .../site/resources/images/fancybox/blank.gif | Bin 0 -> 43 bytes .../resources/images/fancybox/fancy_close.png | Bin 0 -> 1517 bytes .../images/fancybox/fancy_loading.png | Bin 0 -> 10195 bytes .../images/fancybox/fancy_nav_left.png | Bin 0 -> 1446 bytes .../images/fancybox/fancy_nav_right.png | Bin 0 -> 1454 bytes .../images/fancybox/fancy_shadow_e.png | Bin 0 -> 107 bytes .../images/fancybox/fancy_shadow_n.png | Bin 0 -> 106 bytes .../images/fancybox/fancy_shadow_ne.png | Bin 0 -> 347 bytes .../images/fancybox/fancy_shadow_nw.png | Bin 0 -> 324 bytes .../images/fancybox/fancy_shadow_s.png | Bin 0 -> 111 bytes .../images/fancybox/fancy_shadow_se.png | Bin 0 -> 352 bytes .../images/fancybox/fancy_shadow_sw.png | Bin 0 -> 340 bytes .../images/fancybox/fancy_shadow_w.png | Bin 0 -> 103 bytes .../images/fancybox/fancy_title_left.png | Bin 0 -> 503 bytes .../images/fancybox/fancy_title_main.png | Bin 0 -> 96 bytes .../images/fancybox/fancy_title_over.png | Bin 0 -> 70 bytes .../images/fancybox/fancy_title_right.png | Bin 0 -> 506 bytes .../resources/images/fancybox/fancybox-x.png | Bin 0 -> 203 bytes .../resources/images/fancybox/fancybox-y.png | Bin 0 -> 176 bytes .../resources/images/fancybox/fancybox.png | Bin 0 -> 15287 bytes .../site/resources/images/start-screen.png | Bin 56017 -> 56214 bytes .../site/resources/js/fancy-box-activation.js | 18 + .../src/site/resources/js/jquery-1.7.js | 9300 +++++++++++++++++ .../js/jquery.fancybox-1.3.4.pack.js | 46 + .../archiva-webapp-js/src/site/xdoc/index.xml | 11 + 26 files changed, 9734 insertions(+) create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/css/jquery.fancybox-1.3.4.css create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/blank.gif create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_close.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_loading.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_nav_left.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_nav_right.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_shadow_e.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_shadow_n.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_shadow_ne.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_shadow_nw.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_shadow_s.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_shadow_se.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_shadow_sw.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_shadow_w.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_title_left.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_title_main.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_title_over.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_title_right.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancybox-x.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancybox-y.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancybox.png create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/js/fancy-box-activation.js create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/js/jquery-1.7.js create mode 100644 archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/js/jquery.fancybox-1.3.4.pack.js diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/css/jquery.fancybox-1.3.4.css b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/css/jquery.fancybox-1.3.4.css new file mode 100644 index 000000000..e8fa2cd1f --- /dev/null +++ b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/css/jquery.fancybox-1.3.4.css @@ -0,0 +1,359 @@ +/* + * FancyBox - jQuery Plugin + * Simple and fancy lightbox alternative + * + * Examples and documentation at: http://fancybox.net + * + * Copyright (c) 2008 - 2010 Janis Skarnelis + * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. + * + * Version: 1.3.4 (11/11/2010) + * Requires: jQuery v1.3+ + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ + +#fancybox-loading { + position: fixed; + top: 50%; + left: 50%; + width: 40px; + height: 40px; + margin-top: -20px; + margin-left: -20px; + cursor: pointer; + overflow: hidden; + z-index: 1104; + display: none; +} + +#fancybox-loading div { + position: absolute; + top: 0; + left: 0; + width: 40px; + height: 480px; + background-image: url('../images/fancybox/fancybox.png'); +} + +#fancybox-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + z-index: 1100; + display: none; +} + +#fancybox-tmp { + padding: 0; + margin: 0; + border: 0; + overflow: auto; + display: none; +} + +#fancybox-wrap { + position: absolute; + top: 0; + left: 0; + padding: 20px; + z-index: 1101; + outline: none; + display: none; +} + +#fancybox-outer { + position: relative; + width: 100%; + height: 100%; + background: #fff; +} + +#fancybox-content { + width: 0; + height: 0; + padding: 0; + outline: none; + position: relative; + overflow: hidden; + z-index: 1102; + border: 0px solid #fff; +} + +#fancybox-hide-sel-frame { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: transparent; + z-index: 1101; +} + +#fancybox-close { + position: absolute; + top: -15px; + right: -15px; + width: 30px; + height: 30px; + background: transparent url('../images/fancybox/fancybox.png') -40px 0px; + cursor: pointer; + z-index: 1103; + display: none; +} + +#fancybox-error { + color: #444; + font: normal 12px/20px Arial; + padding: 14px; + margin: 0; +} + +#fancybox-img { + width: 100%; + height: 100%; + padding: 0; + margin: 0; + border: none; + outline: none; + line-height: 0; + vertical-align: top; +} + +#fancybox-frame { + width: 100%; + height: 100%; + border: none; + display: block; +} + +#fancybox-left, #fancybox-right { + position: absolute; + bottom: 0px; + height: 100%; + width: 35%; + cursor: pointer; + outline: none; + background: transparent url('../images/fancybox/blank.gif'); + z-index: 1102; + display: none; +} + +#fancybox-left { + left: 0px; +} + +#fancybox-right { + right: 0px; +} + +#fancybox-left-ico, #fancybox-right-ico { + position: absolute; + top: 50%; + left: -9999px; + width: 30px; + height: 30px; + margin-top: -15px; + cursor: pointer; + z-index: 1102; + display: block; +} + +#fancybox-left-ico { + background-image: url('../images/fancybox/fancybox.png'); + background-position: -40px -30px; +} + +#fancybox-right-ico { + background-image: url('../images/fancybox/fancybox.png'); + background-position: -40px -60px; +} + +#fancybox-left:hover, #fancybox-right:hover { + visibility: visible; /* IE6 */ +} + +#fancybox-left:hover span { + left: 20px; +} + +#fancybox-right:hover span { + left: auto; + right: 20px; +} + +.fancybox-bg { + position: absolute; + padding: 0; + margin: 0; + border: 0; + width: 20px; + height: 20px; + z-index: 1001; +} + +#fancybox-bg-n { + top: -20px; + left: 0; + width: 100%; + background-image: url('../images/fancybox/fancybox-x.png'); +} + +#fancybox-bg-ne { + top: -20px; + right: -20px; + background-image: url('../images/fancybox/fancybox.png'); + background-position: -40px -162px; +} + +#fancybox-bg-e { + top: 0; + right: -20px; + height: 100%; + background-image: url('../images/fancybox/fancybox-y.png'); + background-position: -20px 0px; +} + +#fancybox-bg-se { + bottom: -20px; + right: -20px; + background-image: url('../images/fancybox/fancybox.png'); + background-position: -40px -182px; +} + +#fancybox-bg-s { + bottom: -20px; + left: 0; + width: 100%; + background-image: url('../images/fancybox/fancybox-x.png'); + background-position: 0px -20px; +} + +#fancybox-bg-sw { + bottom: -20px; + left: -20px; + background-image: url('../images/fancybox/fancybox.png'); + background-position: -40px -142px; +} + +#fancybox-bg-w { + top: 0; + left: -20px; + height: 100%; + background-image: url('../images/fancybox/fancybox-y.png'); +} + +#fancybox-bg-nw { + top: -20px; + left: -20px; + background-image: url('../images/fancybox/fancybox.png'); + background-position: -40px -122px; +} + +#fancybox-title { + font-family: Helvetica; + font-size: 12px; + z-index: 1102; +} + +.fancybox-title-inside { + padding-bottom: 10px; + text-align: center; + color: #333; + background: #fff; + position: relative; +} + +.fancybox-title-outside { + padding-top: 10px; + color: #fff; +} + +.fancybox-title-over { + position: absolute; + bottom: 0; + left: 0; + color: #FFF; + text-align: left; +} + +#fancybox-title-over { + padding: 10px; + background-image: url('../images/fancybox/fancy_title_over.png'); + display: block; +} + +.fancybox-title-float { + position: absolute; + left: 0; + bottom: -20px; + height: 32px; +} + +#fancybox-title-float-wrap { + border: none; + border-collapse: collapse; + width: auto; +} + +#fancybox-title-float-wrap td { + border: none; + white-space: nowrap; +} + +#fancybox-title-float-left { + padding: 0 0 0 15px; + background: url('../images/fancybox/fancybox.png') -40px -90px no-repeat; +} + +#fancybox-title-float-main { + color: #FFF; + line-height: 29px; + font-weight: bold; + padding: 0 0 3px 0; + background: url('../images/fancybox/fancybox-x.png') 0px -40px; +} + +#fancybox-title-float-right { + padding: 0 0 0 15px; + background: url('../images/fancybox/fancybox.png') -55px -90px no-repeat; +} + +/* IE6 */ + +.fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_close.png', sizingMethod='scale'); } + +.fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_nav_left.png', sizingMethod='scale'); } +.fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_nav_right.png', sizingMethod='scale'); } + +.fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; } +.fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_title_left.png', sizingMethod='scale'); } +.fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_title_main.png', sizingMethod='scale'); } +.fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_title_right.png', sizingMethod='scale'); } + +.fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame { + height: expression(this.parentNode.clientHeight + "px"); +} + +#fancybox-loading.fancybox-ie6 { + position: absolute; margin-top: 0; + top: expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px'); +} + +#fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_loading.png', sizingMethod='scale'); } + +/* IE6, IE7, IE8 */ + +.fancybox-ie .fancybox-bg { background: transparent !important; } + +.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_shadow_n.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_shadow_ne.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_shadow_e.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_shadow_se.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_shadow_s.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_shadow_sw.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_shadow_w.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_shadow_nw.png', sizingMethod='scale'); } \ No newline at end of file diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/blank.gif b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/blank.gif new file mode 100644 index 0000000000000000000000000000000000000000..35d42e808f0a8017b8d52a06be2f8fec0b466a66 GIT binary patch literal 43 scmZ?wbhEHbWMp7uXkcLY|NlP&1B2pE7Dgb&paUX6G7L;iE{qJ;0LZEa`2YX_ literal 0 HcmV?d00001 diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_close.png b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_close.png new file mode 100644 index 0000000000000000000000000000000000000000..07035307ad435f8f2f8eedf0bce50f7ec8a858c2 GIT binary patch literal 1517 zcmV1To%f)hA(E>uTT$~N#GA0orBqo9-jKM;POccZrXJjTzge4|Sa0ca~7y<+{ z2m7~>41(Jqf9L`mBM6zAjf4;hkjP@@B~d6Xz385|dB5iCM=Ro&JZZmk-uHdZd2i=@ zK0a@Md;u9DFE7t8BO^nxckf<*yC?SckUFGmX^jwM@NV80+eiP zQ*s##s^a3}Ldwd@cHO*r^T5i=%Fj}=Cr_R@78e&C((#usU;YFS>C)2Dw4tG)YO=*P zWt;6ZfL46;=u!R1$jGM-hhvcpVyCa+S}Q!T2ALHx;BHe#M~BsHHos=s2iW})#C?}q ztqvud-gYjKsG$zHm2XhmYPB(Bn>kzw z=gS!w6cG`jJ$?H00VK+=!cMnBDn?IFkCkj7KmNq~hrkZvU@n=EP}|7Gxw*M}1_lPI zNx@_?IS^|%_ok<(o3gXBH^f+@(X7_g)K~%n0$gMM{{Ab=%gZ*hH99)_Eo>!VJd8_C zE)WMoNsBB#u&}W3BMEnPby>y64F-cra9>kX)4DJoA0KZ5fitNn`NTT4wY3%+fA;Lz zZ+K4ucJi+Mg!m%<>Ug8kSg^LX_JD-5va;NEM#+V_H)8UHgaj8UJ?LiZVx92t@KxlB zb1oz#Bo|{kAO!IDVfOII$VfwRad8C+y?XV^;VEu~g@tQka>%(zhlYl1p7P=0!-vj9 zYiMYw3l0uW##jWq+eZ-;6r@4F%{+PXGcz;xx78|Q_F7Eb+}ynGO@4TI*h!27r4#SzfR=K~ zhtpe&%-o-olT$}R&!0cHdm}}wbdd`2lO~)PlarHXnm>2$+(ng2^$EtJ+=vwl#Xg-* zSA%x<9|=lJ3CXuACMEY46&1O~{LGm%7HKm8lhZ|+Pv?nF1LcJswy+L%zshO4HzpR4skij zxq<8a{QPpl!oq4$R(*n7$-q`gsjcF2;NWZ?##l9wBW)lu_Bpk)RJgGO&Ey+2dDr3J z*x2~aJFl#)G^5U)q~qh`_b^ru6q9Xf%arlfse$W(T#z5f?cqE0>k)x`c6QcMUS4jN z#$B996B84z1O(|{7{3S{Bb#j7?T~OCi+pq$fP9eGqJ%Evk~i}B@#8tcAnk_QAg)9f z!qn81MJO5W0n6>}?Q|$y25QL`+uU$0x?KbSI<(UOBavf=wCW!^J3Ie)^yty-8!yk& z($YLG4fjwT{k&5mHL@*_7Xi1c4?x$HT^y5qc2zyPPCG3CUKl!f@Zj&~&!7K?fD>&z zDk^G(=74sN=`q$#Wm{gaK5myi7K~vRQ8s=CoB+NC8j<}iKpXzI(SMmt*2r@wST=`s zW7t-}X4hPqXy3W00000NkvXXu0mjftFGKG literal 0 HcmV?d00001 diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_loading.png b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_loading.png new file mode 100644 index 0000000000000000000000000000000000000000..2503017960b3972499d3aa92f89953935ae40934 GIT binary patch literal 10195 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 literal 0 HcmV?d00001 diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_nav_left.png b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_nav_left.png new file mode 100644 index 0000000000000000000000000000000000000000..ebaa6a4fd34e51575a01da366312c20618985cbc GIT binary patch literal 1446 zcmV;X1zGxuP)R`@usIzf?P{x4#0gFqr~|(;IJySuwjr=+Ar78e&sHZ(Lu;P)*wKU%|U#jmpg5~Q6= zNl8{#mZGz>Q!_F$qJ8n=#Z9x>Jn_n|ZEtTsSzllOW_Wn`!@Rt_=!l4jAl`tKb-5%L zv7js_CMF<1KR>Fcr{|nbr~AR4Y-MG|y0EZdwI6@^^5yrikSZ}TQ5hH*C?{R4Q{?KT zKD6U2SFWfB2M0g0TCEGD5GUP%Y0a>J0W!M1fVuVU?d@ix(YV91PjUK7@OzY8E)OJ~ z&Q30n%8njA8kC)#t?uvd&xMXHQZzI)WQmTB-n1vQM_gQ-{_*3-7UA?*_bJ9=m|W(F zT+IHE$H&L3T3T8zSS*%BTHM>)YZi;eI#;9uNVch|X-go#ckf=VQmKq2-ORBYaGo52 zejyg&!SS;_ltMX3~N9_#ORsfn&tMTp}T$j*yAd)6-A(_4O6g z0=-^ug|9bVkxorbSsNQ0x9sPG&EF`laq6qgf=!d ztnQGKnVtDqz_Vx1Y=Kr=TU+Vx?;nS;5H`1m#Lv%9fqI)#T3Y%!3C+yRSpE-E!h;77 zwm7Z1{&Y;%TkkIqz&m9sAKBbnCkzsHry#@vbY{a-wI?zu7 zloV4Q9NtQWLUAT7Ev=G-*4EZ6|HZd^F*!MDB>C#<>PDGN_5sGi_Yq4ZlG7@css!ck z9};wyN`LrygSGPaaLVfqXl2Z+Nkm;ygvo12>(Bf+YwDwC`Hbwy5foiCI>(Z2*F z+nZVe;)K}P*aF#9Y8tUS3{lK|w(!NULrkdP#x17leSb zXU`h&IIwaw4`8eqNV6{>BDOh|vjhZ0E{e&QDDu0Pe|>%Zmb;{dg@s0w$z&rPA0K~+ zu^J$UblaCq5g(ljxEe?Y`8AmFYt-vOfqZ&;+Eh?bV07kp3Z#jN34Zfk3!OW_7k zM!Hz%fopN!Lja&lI}y+lIZjBszTeT&@!Ra|?DQ)q4Us*EN5ey8M=zh0NVTlX;X`2G z(+8kuN)-Dfn@v@Ns?$arfE9ks%*_0?uCDGc0&cYN@bK_KngiO{r&oDx0_$@6^x5~= zW5Gx^5k=$2z;)mYpdQiR47B2ZEBzOVMD;v(on_N_Z6xdRarMj=Ped`)=n zv4Dh?$k=SYcJSdjDa(58`F?t%ZzxBbaRs;9zaA#)un(S!5dZ)H07*qoM6N<$g4RXF AD*ylh literal 0 HcmV?d00001 diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_nav_right.png b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_nav_right.png new file mode 100644 index 0000000000000000000000000000000000000000..873294e969db9160f5ddd4e1ab498ff60b080e3f GIT binary patch literal 1454 zcmV;f1yTBmP)Wa6`&Z+!IVkxf`V#(j>y7#5eg z5*PD+C=wGBwT+F9xi*_^fd=>X_FBba@wz8b0c3ma+OG#c&LYnSBp_4S(*6BG8m#QpsI))yBSw}|WBy?ft)>pk?VIMu|0u-xC@UxO$< zHa9o-0~vR8bXeVyB61x;@W6T@vgyO$TgWvPslhu zJ>BGvFeN3$D2UT9wO!c-2M2E;RvddB6cm(&J}nRg`1!DUaA;_#J})n?kc`&W*6f~w z$XoI8@o`6>)z;Ql1O^7iqc4Qr?IQ^Y2vDQmrd_^#`AagIo}RXO6Tw=o)=2K&OZ?8A zJDVKcH{^2p2j~ms)bf#Ff5Y^8{ZZ7~8Zw%koV0nHJ||9`FbS!%u(0sL`TfAafI}Du zN;}#qfQDkqhr?T=R;!O@W@c89(aOq-SHe5pO)Do4INRL6f8R{+tE;Q)Wir`E=nLN^ zERjf#VBjT`yZ^}0T`IW~brs!I17PDwDHNtJpz(@u7&_Ci&*x`nXGh4eva-_hHlhTo z>wKX6jrLg})!Ef*2q(qH#unh5y~V~`*!#E25W2>+0$@y%jAkE;d^% z7KiBQ=;#CV)c|?K?OZZNymTtyIv@+;=i$b0QLhID@u{gPOF=<_+1^cd)FbceJt|Pr3Z2#UW)pC9hbbpr%#_w3xu>9DucKZSqKjwKC}oa!!=;B zxw)ARh3h~maWUsB$KtMw06>R!GGHKatdM5?eS3TRA2TyEQ!m{-s9LkQG(13d^zuqc z)WBRWF9N%+J^)=)qIgeo*i|*CI?Xfzc;V-hCr|!<<;s9veooizpgD1ug<#0dV!Z literal 0 HcmV?d00001 diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_shadow_e.png b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_shadow_e.png new file mode 100644 index 0000000000000000000000000000000000000000..2eda0893649371f8d92b92976d8542cdd1b601ed GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^B0$W@!3HGnP3ltxQbwLGjv*Y^lSRZuwe#}JO|p{EaWGAM`~zK|Yh zF7SQ+m+Ig>B0@o-N8?trihfzZ+Vp1~`{zf0o*#X0$hUAi%N$P)W1wCJ22WQ%mvv4F FO#q)zAp-ya literal 0 HcmV?d00001 diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_shadow_ne.png b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_shadow_ne.png new file mode 100644 index 0000000000000000000000000000000000000000..79f6980a3ba5c43de120d963dbba2516b8f27ac7 GIT binary patch literal 347 zcmV-h0i^zkP)dR9Yb&V8f!h)aDezHAsc|y@|hdQ zYJb}?8~~zFbQ)ku!Ey)KSukutuvdZ@MKMX|x|A3tPyx?YVhN^6z!Mi4Mj2f#%<;nh z2{>?YAzu|{u^;Oq!;f7Z4tPBpJEmZ+^GZ#$=9nz(K+UmK7}|u&EPi%aRt_C3qOFB_ zHc`~N>51%{?ijG?xsHt>MwRChgk=x_z0gh3O2xSL)-6?+2LKZL74~Q>MZjWtwukkA tvjRC=&j+0R$&bLyT7MhBcTXDISHC&xXU0&5CWHV0002ovPDHLkV1fX+la~Mh literal 0 HcmV?d00001 diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_shadow_nw.png b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_shadow_nw.png new file mode 100644 index 0000000000000000000000000000000000000000..7182cd938ae98e7e28c65a0bc55df576042ff9f5 GIT binary patch literal 324 zcmV-K0lWT*P)2-&4CO{qhKP$XKD&mgeXEM77>~`RA}h@U^Z##eQZVtM>a-K?QT4 z&(8BFf(rD5V61)2I__wHYuRwoaDIqw5Vdr_JSDVr){#J@r;{vbDL|tRyCiirf~4OF zX-l=Ecm>@yR)1nSMt~dy90Zb`^`)TQbhf8jR@fA!l6V$musRyB9Y{p$SCW}!$3==V zk)fW)Xo{s^ez$t+XhmZj;ts)!kTokvmM>z)zt70000 literal 0 HcmV?d00001 diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_shadow_se.png b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_shadow_se.png new file mode 100644 index 0000000000000000000000000000000000000000..541e3ffd3e88224b34a4d2097c66a780e6060aeb GIT binary patch literal 352 zcmV-m0iXVfP){pM9=`y8<_IvWD02WY@RZ<9dgjNmAB|sYF}Xw>7Sq@O0000eMf9z;FC21=)67q_`W0*0KnS4AR00W2`RGn3i8UfsEegLO@ zPhds?2e1Tm)FK3=bymIAx?X=YFo3Mdh7W?@I#8s#svp!&PB> zwah@Ngd|l0N4SCfzvjtQnd$dZ0yM)N$X+lqdtN!Pt{Wn*_`0U}m1^#r1 mwpaW{;a?9KKt^WrpTAEd?0j1W(3L*`0000P{ho=rRL|66mGO)=r*Hk83F#~lnc)I$ztaD0e0sy?& B8X5oq literal 0 HcmV?d00001 diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_title_left.png b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_title_left.png new file mode 100644 index 0000000000000000000000000000000000000000..6049223d1ec6af46e100499c01f6489c9e2c6240 GIT binary patch literal 503 zcmV+)0005LNklqcp9&~$uJw{{rUub~E?-XJ#Upm4Fe%-Gl z!u%tb0N102a|s5;SPlQvJlFCTBbvYaK@wIW6Gjx@?i20AlVDJcHNfh25WRlbF6CIq zv9_ZnqOH`}ppaUR0@%ZcM9zpDt2uQM>f+Z#wIMmyuui3DeoYXWE|hQ{D$te=Yhgkq zIvyj+$t8T|S1wITzUftNOe(E+Qjn$kDotY;I5}1lRgwi=?K26ke)djLR5W2|!7CVH zJ-`tuAq|`lK978y+CnqGNCkUke_%Gig ukvFM-ftpWh!il7Wg7kz7Y?7xB@G*olNlgoj4E_Yv!rmdKI;Vst0Ha3^zyJUM literal 0 HcmV?d00001 diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_title_right.png b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancy_title_right.png new file mode 100644 index 0000000000000000000000000000000000000000..e36d9db2a7c6e570aec993d3665cbc13620115e2 GIT binary patch literal 506 zcmV+)0005ONklxjQB-g>5=x46nGBwseihc$zfzvTFh(=tCRj6cJ4M&ASrCAq-HbokPnRBAHVa2(-|l wYU(UxfYLN;KDSr z1<%~X^wgl##FWaylc_d9MY*0Xjv*Ddw)7kFH5l+P-xcE$W)3=fYI&uMKVzWNT*W|n zhqlRY)q0r(8Mg&Fu_zpISivgz+b7g)c6G&O{~njE??Y{u-MM!p^=9_W+X-j8mhfK? zj`H2Yy;kp%)!V-M3;EVThyB(Z@o88wpMja-vy^g)SgE!<&|(HpS3j3^P6|6H_V+Po~-c6$N>^IEGZ*^681?Yf#{6Zf~e!I`r4y-J+3m*Ue*gH=cNZ zzpU%p61aCO%jt%FHUKW&bEWLcUAGzK?;SYE)E{9#W9O8@uj{O@89qzNU(dkI YVCW(7-@(*!CeU;SPgg&ebxsLQ07`N|KL7v# literal 0 HcmV?d00001 diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancybox.png b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/fancybox/fancybox.png new file mode 100644 index 0000000000000000000000000000000000000000..65e14f68fd83b87f75c22c0c074e7b20bf20a133 GIT binary patch literal 15287 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 ZMt7F5hocMxav&E)U0Fw|QQ>vO{{ZOG+C=~W literal 0 HcmV?d00001 diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/start-screen.png b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/images/start-screen.png index 91473686e437992beb4defd2637eff055c01919e..6dd681f7a2e2bfbc4290e06c4c0c84be7a09eece 100644 GIT binary patch delta 45165 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 FzW`r|EqDL` literal 56017 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 N9enqQQ^?E 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 diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/js/fancy-box-activation.js b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/js/fancy-box-activation.js new file mode 100644 index 000000000..d89cf52c6 --- /dev/null +++ b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/js/fancy-box-activation.js @@ -0,0 +1,18 @@ +$(document).ready(function(){ + $("a.single_image").fancybox({ + 'transitionIn' : 'elastic', + 'transitionOut' : 'elastic', + 'speedIn' : 600, + 'speedOut' : 200, + 'overlayShow' : true + }); + $("a.gallery_image").fancybox({ + 'transitionIn' : 'elastic', + 'transitionOut' : 'elastic', + 'speedIn' : 600, + 'speedOut' : 200, + 'overlayShow' : true, + 'titlePosition': 'inside' + }); +}); + diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/js/jquery-1.7.js b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/js/jquery-1.7.js new file mode 100644 index 000000000..eda55db35 --- /dev/null +++ b/archiva-modules/archiva-web/archiva-webapp-js/src/site/resources/js/jquery-1.7.js @@ -0,0 +1,9300 @@ +/*! + * jQuery JavaScript Library v1.7 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Thu Nov 3 16:18:21 2011 -0400 + */ +(function( window, undefined ) { + +// Use the correct document accordingly with window argument (sandbox) +var document = window.document, + navigator = window.navigator, + location = window.location; +var jQuery = (function() { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + trimLeft = /^\s+/, + trimRight = /\s+$/, + + // Check for digits + rdigit = /\d/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Matches dashed string for camelizing + rdashAlpha = /-([a-z]|[0-9])/ig, + rmsPrefix = /^-ms-/, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // The deferred used on DOM ready + readyList, + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context && document.body ) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = quickExpr.exec( selector ); + } + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = ( context ? context.ownerDocument || context : document ); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.7", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.add( fn ); + + return this; + }, + + eq: function( i ) { + return i === -1 ? + this.slice( i ) : + this.slice( i, +i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.fireWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).unbind( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyList ) { + return; + } + + readyList = jQuery.Callbacks( "once memory" ); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + // A crude way of determining if an object is a window + isWindow: function( obj ) { + return obj && typeof obj === "object" && "setInterval" in obj; + }, + + isNumeric: function( obj ) { + return obj != null && rdigit.test( obj ) && !isNaN( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw msg; + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction( object ); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // The extra typeof function check is to prevent crashes + // in Safari 2 (See: #3039) + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type( array ); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array, i ) { + var len; + + if ( array ) { + if ( indexOf ) { + return indexOf.call( array, elem, i ); + } + + len = array.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in array && array[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, + j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + var args = slice.call( arguments, 2 ), + proxy = function() { + return fn.apply( context, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can optionally be executed if it's a function + access: function( elems, key, value, exec, fn, pass ) { + var length = elems.length; + + // Setting many attributes + if ( typeof key === "object" ) { + for ( var k in key ) { + jQuery.access( elems, k, key[k], exec, fn, value ); + } + return elems; + } + + // Setting one attribute + if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = !pass && exec && jQuery.isFunction(value); + + for ( var i = 0; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + + return elems; + } + + // Getting an attribute + return length ? fn( elems[0], key ) : undefined; + }, + + now: function() { + return ( new Date() ).getTime(); + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + sub: function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + + browser: {} +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +// Expose jQuery as an AMD module, but only for AMD loaders that +// understand the issues with loading multiple versions of jQuery +// in a page that all might call define(). The loader will indicate +// they have special allowances for multiple jQuery versions by +// specifying define.amd.jQuery = true. Register as a named module, +// since jQuery can be concatenated with other files that may use define, +// but not use a proper concatenation script that understands anonymous +// AMD modules. A named AMD is safest and most robust way to register. +// Lowercase jquery is used because AMD module names are derived from +// file names, and jQuery is normally delivered in a lowercase file name. +if ( typeof define === "function" && define.amd && define.amd.jQuery ) { + define( "jquery", [], function () { return jQuery; } ); +} + +return jQuery; + +})(); + + +// String to Object flags format cache +var flagsCache = {}; + +// Convert String-formatted flags into Object-formatted ones and store in cache +function createFlags( flags ) { + var object = flagsCache[ flags ] = {}, + i, length; + flags = flags.split( /\s+/ ); + for ( i = 0, length = flags.length; i < length; i++ ) { + object[ flags[i] ] = true; + } + return object; +} + +/* + * Create a callback list using the following parameters: + * + * flags: an optional list of space-separated flags that will change how + * the callback list behaves + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible flags: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( flags ) { + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function( args ) { + var i, + length, + elem, + type, + actual; + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + // Inspect recursively + add( elem ); + } else if ( type === "function" ) { + // Add if not in unique mode and callback is not in + if ( !flags.unique || !self.has( elem ) ) { + list.push( elem ); + } + } + } + }, + // Fire callbacks + fire = function( context, args ) { + args = args || []; + memory = !flags.memory || [ context, args ]; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if ( list ) { + if ( !flags.once ) { + if ( stack && stack.length ) { + memory = stack.shift(); + self.fireWith( memory[ 0 ], memory[ 1 ] ); + } + } else if ( memory === true ) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + var length = list.length; + add( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if ( memory && memory !== true ) { + firingStart = length; + fire( memory[ 0 ], memory[ 1 ] ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + var args = arguments, + argIndex = 0, + argLength = args.length; + for ( ; argIndex < argLength ; argIndex++ ) { + for ( var i = 0; i < list.length; i++ ) { + if ( args[ argIndex ] === list[ i ] ) { + // Handle firingIndex and firingLength + if ( firing ) { + if ( i <= firingLength ) { + firingLength--; + if ( i <= firingIndex ) { + firingIndex--; + } + } + } + // Remove the element + list.splice( i--, 1 ); + // If we have some unicity property then + // we only need to do this once + if ( flags.unique ) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + if ( list ) { + var i = 0, + length = list.length; + for ( ; i < length; i++ ) { + if ( fn === list[ i ] ) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory || memory === true ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( stack ) { + if ( firing ) { + if ( !flags.once ) { + stack.push( [ context, args ] ); + } + } else if ( !( flags.once && memory ) ) { + fire( context, args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!memory; + } + }; + + return self; +}; + + + + +var // Static reference to slice + sliceDeferred = [].slice; + +jQuery.extend({ + + Deferred: function( func ) { + var doneList = jQuery.Callbacks( "once memory" ), + failList = jQuery.Callbacks( "once memory" ), + progressList = jQuery.Callbacks( "memory" ), + state = "pending", + lists = { + resolve: doneList, + reject: failList, + notify: progressList + }, + promise = { + done: doneList.add, + fail: failList.add, + progress: progressList.add, + + state: function() { + return state; + }, + + // Deprecated + isResolved: doneList.fired, + isRejected: failList.fired, + + then: function( doneCallbacks, failCallbacks, progressCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); + return this; + }, + always: function() { + return deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); + }, + pipe: function( fnDone, fnFail, fnProgress ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ], + progress: [ fnProgress, "notify" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + obj = promise; + } else { + for ( var key in promise ) { + obj[ key ] = promise[ key ]; + } + } + return obj; + } + }, + deferred = promise.promise({}), + key; + + for ( key in lists ) { + deferred[ key ] = lists[ key ].fire; + deferred[ key + "With" ] = lists[ key ].fireWith; + } + + // Handle state + deferred.done( function() { + state = "resolved"; + }, failList.disable, progressList.lock ).fail( function() { + state = "rejected"; + }, doneList.disable, progressList.lock ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( firstParam ) { + var args = sliceDeferred.call( arguments, 0 ), + i = 0, + length = args.length, + pValues = new Array( length ), + count = length, + pCount = length, + deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? + firstParam : + jQuery.Deferred(), + promise = deferred.promise(); + function resolveFunc( i ) { + return function( value ) { + args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + if ( !( --count ) ) { + deferred.resolveWith( deferred, args ); + } + }; + } + function progressFunc( i ) { + return function( value ) { + pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + deferred.notifyWith( promise, pValues ); + }; + } + if ( length > 1 ) { + for ( ; i < length; i++ ) { + if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { + args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( deferred, args ); + } + } else if ( deferred !== firstParam ) { + deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); + } + return promise; + } +}); + + + + +jQuery.support = (function() { + + var div = document.createElement( "div" ), + documentElement = document.documentElement, + all, + a, + select, + opt, + input, + marginDiv, + support, + fragment, + body, + testElementParent, + testElement, + testElementStyle, + tds, + events, + eventName, + i, + isSupported; + + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
a"; + + + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return {}; + } + + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName( "tbody" ).length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName( "link" ).length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute( "href" ) === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure unknown elements (like HTML5 elems) are handled appropriately + unknownElems: !!div.getElementsByTagName( "nav" ).length, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form(#6743) + enctype: !!document.createElement("form").enctype, + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent( "onclick" ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + div.innerHTML = ""; + + // Figure out if the W3C box model works as expected + div.style.width = div.style.paddingLeft = "1px"; + + // We don't want to do body-related feature tests on frameset + // documents, which lack a body. So we use + // document.getElementsByTagName("body")[0], which is undefined in + // frameset documents, while document.body isn’t. (7398) + body = document.getElementsByTagName("body")[ 0 ]; + // We use our own, invisible, body unless the body is already present + // in which case we use a div (#9239) + testElement = document.createElement( body ? "div" : "body" ); + testElementStyle = { + visibility: "hidden", + width: 0, + height: 0, + border: 0, + margin: 0, + background: "none" + }; + if ( body ) { + jQuery.extend( testElementStyle, { + position: "absolute", + left: "-999px", + top: "-999px" + }); + } + for ( i in testElementStyle ) { + testElement.style[ i ] = testElementStyle[ i ]; + } + testElement.appendChild( div ); + testElementParent = body || documentElement; + testElementParent.insertBefore( testElement, testElementParent.firstChild ); + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + support.boxModel = div.offsetWidth === 2; + + if ( "zoom" in div.style ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = ""; + div.innerHTML = "
"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 2 ); + } + + div.innerHTML = "
t
"; + tds = div.getElementsByTagName( "td" ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE < 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + div.innerHTML = ""; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( document.defaultView && document.defaultView.getComputedStyle ) { + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for( i in { + submit: 1, + change: 1, + focusin: 1 + } ) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + // Run fixed position tests at doc ready to avoid a crash + // related to the invisible body in IE8 + jQuery(function() { + var container, outer, inner, table, td, offsetSupport, + conMarginTop = 1, + ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;", + vb = "visibility:hidden;border:0;", + style = "style='" + ptlm + "border:5px solid #000;padding:0;'", + html = "
" + + "" + + "
"; + + // Reconstruct a container + body = document.getElementsByTagName("body")[0]; + if ( !body ) { + // Return for frameset docs that don't have a body + // These tests cannot be done + return; + } + + container = document.createElement("div"); + container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; + body.insertBefore( container, body.firstChild ); + + // Construct a test element + testElement = document.createElement("div"); + testElement.style.cssText = ptlm + vb; + + testElement.innerHTML = html; + container.appendChild( testElement ); + outer = testElement.firstChild; + inner = outer.firstChild; + td = outer.nextSibling.firstChild.firstChild; + + offsetSupport = { + doesNotAddBorder: ( inner.offsetTop !== 5 ), + doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) + }; + + inner.style.position = "fixed"; + inner.style.top = "20px"; + + // safari subtracts parent border width here which is 5px + offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); + inner.style.position = inner.style.top = ""; + + outer.style.overflow = "hidden"; + outer.style.position = "relative"; + + offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); + offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); + + body.removeChild( container ); + testElement = container = null; + + jQuery.extend( support, offsetSupport ); + }); + + testElement.innerHTML = ""; + testElementParent.removeChild( testElement ); + + // Null connected elements to avoid leaks in IE + testElement = fragment = select = opt = body = marginDiv = div = input = null; + + return support; +})(); + +// Keep track of boxModel +jQuery.boxModel = jQuery.support.boxModel; + + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var privateCache, thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando, + isEvents = name === "events"; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ jQuery.expando ] = id = ++jQuery.uuid; + } else { + id = jQuery.expando; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + privateCache = thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Users should not attempt to inspect the internal events object using jQuery.data, + // it is undocumented and subject to change. But does anyone listen? No. + if ( isEvents && !thisCache[ name ] ) { + return privateCache.events; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support space separated names + if ( jQuery.isArray( name ) ) { + name = name; + } else if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if ( jQuery.support.deleteExpando || !cache.setInterval ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ jQuery.expando ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( jQuery.expando ); + } else { + elem[ jQuery.expando ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, attr, name, + data = null; + + if ( typeof key === "undefined" ) { + if ( this.length ) { + data = jQuery.data( this[0] ); + + if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) { + attr = this[0].attributes; + for ( var i = 0, l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( this[0], name, data[ name ] ); + } + } + jQuery._data( this[0], "parsedAttrs", true ); + } + } + + return data; + + } else if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split("."); + parts[1] = parts[1] ? "." + parts[1] : ""; + + if ( value === undefined ) { + data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + + // Try to fetch any internally stored data first + if ( data === undefined && this.length ) { + data = jQuery.data( this[0], key ); + data = dataAttr( this[0], key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + + } else { + return this.each(function() { + var $this = jQuery( this ), + args = [ parts[0], value ]; + + $this.triggerHandler( "setData" + parts[1] + "!", args ); + jQuery.data( this, key, value ); + $this.triggerHandler( "changeData" + parts[1] + "!", args ); + }); + } + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + jQuery.isNumeric( data ) ? parseFloat( data ) : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery._data( elem, deferDataKey ); + if ( defer && + ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && + ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery._data( elem, queueDataKey ) && + !jQuery._data( elem, markDataKey ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.fire(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = ( type || "fx" ) + "mark"; + jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); + if ( count ) { + jQuery._data( elem, key, count ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, + + queue: function( elem, type, data ) { + var q; + if ( elem ) { + type = ( type || "fx" ) + "queue"; + q = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + q.push( data ); + } + } + return q || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(), + hooks = {}; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + jQuery._data( elem, type + ".run", hooks ); + fn.call( elem, function() { + jQuery.dequeue( elem, type ); + }, hooks ); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue " + type + ".run", true ); + handleQueueMarkDefer( elem, type, "queue" ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + } + + if ( data === undefined ) { + return jQuery.queue( this[0], type ); + } + return this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { + count++; + tmp.add( resolve ); + } + } + resolve(); + return defer.promise(); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspace = /\s+/, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + nodeHook, boolHook, fixSpecified; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.attr ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.prop ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classNames, i, l, elem, className, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + classNames = ( value || "" ).split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + className = (" " + elem.className + " ").replace( rclass, " " ); + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[ c ] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return undefined; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var self = jQuery(this), val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, i, max, option, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + i = one ? index : 0; + max = one ? index + 1 : options.length; + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return undefined; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( !("getAttribute" in elem) ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return undefined; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, l, + i = 0; + + if ( elem.nodeType === 1 ) { + attrNames = ( value || "" ).split( rspace ); + l = attrNames.length; + + for ( ; i < l; i++ ) { + name = attrNames[ i ].toLowerCase(); + propName = jQuery.propFix[ name ] || name; + + // See #9699 for explanation of this approach (setting first, then removal) + jQuery.attr( elem, name, "" ); + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( rboolean.test( name ) && propName in elem ) { + elem[ propName ] = false; + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + 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( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return undefined; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) +jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.nodeValue = value + "" ); + } + }; + + // Apply the nodeHook to tabindex + jQuery.attrHooks.tabindex.set = nodeHook.set; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = "" + value ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); + + + + +var rnamespaces = /\.(.*)$/, + rformElems = /^(?:textarea|input|select)$/i, + rperiod = /\./g, + rspaces = / /g, + rescape = /[^\w\s.|`]/g, + rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, + rhoverHack = /\bhover(\.\S+)?/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, + quickParse = function( selector ) { + var quick = rquickIs.exec( selector ); + if ( quick ) { + // 0 1 2 3 + // [ _, tag, id, class ] + quick[1] = ( quick[1] || "" ).toLowerCase(); + quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); + } + return quick; + }, + quickIs = function( elem, m ) { + return ( + (!m[1] || elem.nodeName.toLowerCase() === m[1]) && + (!m[2] || elem.id === m[2]) && + (!m[3] || m[3].test( elem.className )) + ); + }, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, quick, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = hoverHack(types).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + namespace: namespaces.join(".") + }, handleObjIn ); + + // Delegated event; pre-analyze selector so it's processed quickly on event dispatch + if ( selector ) { + handleObj.quick = quickParse( selector ); + if ( !handleObj.quick && jQuery.expr.match.POS.test( selector ) ) { + handleObj.isPositional = true; + } + } + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector ) { + + var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + t, tns, type, namespaces, origCount, + j, events, special, handle, eventType, handleObj; + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = hoverHack( types || "" ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + namespaces = namespaces? "." + namespaces : ""; + for ( j in events ) { + jQuery.event.remove( elem, j + namespaces, handler, selector ); + } + return; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + + // Only need to loop for special events or selective removal + if ( handler || namespaces || selector || special.remove ) { + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( !handler || handler.guid === handleObj.guid ) { + if ( !namespaces || namespaces.test( handleObj.namespace ) ) { + if ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + } + } + } else { + // Removing all events + eventType.length = 0; + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, [ "events", "handle" ], true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var type = event.type || event, + namespaces = [], + cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // triggerHandler() and global events don't bubble or run the default action + if ( onlyHandlers || !elem ) { + event.preventDefault(); + } + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + old = null; + for ( cur = elem.parentNode; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old && old === elem.ownerDocument ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length; i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) ) { + handle.apply( cur, data ); + } + + if ( event.isPropagationStopped() ) { + break; + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = [].slice.call( arguments, 0 ), + run_all = !event.exclusive && !event.namespace, + specialHandle = ( jQuery.event.special[ event.type ] || {} ).handle, + handlerQueue = [], + i, j, cur, ret, selMatch, matched, matches, handleObj, sel, hit, related; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Determine handlers that should run if there are delegated events + // Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) { + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + selMatch = {}; + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + hit = selMatch[ sel ]; + + if ( handleObj.isPositional ) { + // Since .is() does not work for positionals; see http://jsfiddle.net/eJ4yd/3/ + hit = ( hit || (selMatch[ sel ] = jQuery( sel )) ).index( cur ) >= 0; + } else if ( hit === undefined ) { + hit = selMatch[ sel ] = ( handleObj.quick ? quickIs( cur, handleObj.quick ) : jQuery( cur ).is( sel ) ); + } + if ( hit ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement wheelDelta".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) + if ( event.metaKey === undefined ) { + event.metaKey = event.ctrlKey; + } + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady + }, + + focus: { + delegateType: "focusin", + noBubble: true + }, + blur: { + delegateType: "focusout", + noBubble: true + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = jQuery.event.special[ fix ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector, + oldType, ret; + + // For a real mouseover/out, always call the handler; for + // mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || handleObj.origType === event.type || (related !== target && !jQuery.contains( target, related )) ) { + oldType = event.type; + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = oldType; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !form._submit_attached ) { + jQuery.event.add( form, "submit._submit", function( event ) { + // Form was submitted, bubble the event up the tree + if ( this.parentNode ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + }); + form._submit_attached = true; + } + }); + // return undefined since we don't need an event listener + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed ) { + this._just_changed = false; + jQuery.event.simulate( "change", this, event, true ); + } + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + elem._change_attached = true; + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on.call( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace? handleObj.type + "." + handleObj.namespace : handleObj.type, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( var type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.bind( name, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); + + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + expando = "sizcache" + (Math.random() + '').replace('.', ''), + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rReturn = /\r\n/g, + rNonWord = /\W/; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context, seed ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set, seed ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set, i, len, match, type, left; + + if ( !expr ) { + return []; + } + + for ( i = 0, len = Expr.order.length; i < len; i++ ) { + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace( rBackslash, "" ); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + type, found, item, filter, left, + i, pass, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + filter = Expr.filter[ type ]; + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + pass = not ^ found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw "Syntax error, unrecognized expression: " + msg; +}; + +/** + * Utility function for retreiving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +var getText = Sizzle.getText = function( elem ) { + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if ( nodeType ) { + if ( nodeType === 1 ) { + // Use textContent || innerText for elements + if ( typeof elem.textContent === 'string' ) { + return elem.textContent; + } else if ( typeof elem.innerText === 'string' ) { + // Replace IE's carriage returns + return elem.innerText.replace( rReturn, '' ); + } else { + // Traverse it's children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for ( i = 0; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + if ( node.nodeType !== 8 ) { + ret += getText( node ); + } + } + } + return ret; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !rNonWord.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); + }, + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); + }, + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; + }, + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; + }, + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; + }, + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; + }, + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; + }, + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; + }, + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; + }, + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var first, last, + doneName, parent, cache, + count, diff, + type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + first = match[2]; + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + doneName = match[0]; + parent = elem.parentNode; + + if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { + count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent[ expando ] = doneName; + } + + diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Sizzle.attr ? + Sizzle.attr( elem, name ) : + Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + !type && Sizzle.attr ? + result != null : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

"; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var oldContext = context, + old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + oldContext.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; + + if ( matches ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + var ret = matches.call( node, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11 ) { + return ret; + } + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
"; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context, seed ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet, seed ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +Sizzle.selectors.attrMap = {}; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})(); + + +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.POS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var self = this, + i, l; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if ( jQuery.isArray( selectors ) ) { + var level = 1; + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( i = 0; i < selectors.length; i++ ) { + + if ( jQuery( cur ).is( selectors[ i ] ) ) { + ret.push({ selector: selectors[ i ], elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( elem.parentNode.firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ), + // The variable 'args' was introduced in + // https://github.com/jquery/jquery/commit/52a0238 + // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed. + // http://code.google.com/p/v8/issues/detail?id=1050 + args = slice.call(arguments); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, args.join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} + + + + +function createSafeFragment( document ) { + var list = nodeNames.split( " " ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr article aside audio canvas datalist details figcaption figure footer " + + "header hgroup mark meter nav output progress section summary time video", + rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /", "" ], + legend: [ 1, "
", "
" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + col: [ 2, "", "
" ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and + + +

@@ -45,6 +50,12 @@ The main page will load javascript files, load i18n, load templates and insert menu.
This main page is divided in 3 parts: +

+ +
+ Start Page +
+

-- 2.39.5