From 1ddb7abcb6204f2a54e99713fd5a1f12e25571a9 Mon Sep 17 00:00:00 2001 From: Nikolai Kristiansen Date: Sat, 30 Mar 2013 21:47:09 +0100 Subject: [PATCH] Styling bonanza --- .gitignore | 1 + robots.txt | 4 + wp-content/themes/gf2013/MIT-LICENSE.txt | 20 + wp-content/themes/gf2013/config.rb | 16 + wp-content/themes/gf2013/content.php | 60 + wp-content/themes/gf2013/footer.php | 38 + wp-content/themes/gf2013/front-page.php | 22 + wp-content/themes/gf2013/functions.php | 6 + wp-content/themes/gf2013/header.php | 39 + .../themes/gf2013/images/landingbilde.jpg | Bin 0 -> 196801 bytes wp-content/themes/gf2013/images/leaf_left.png | Bin 0 -> 4977 bytes .../themes/gf2013/images/leaf_right.png | Bin 0 -> 4979 bytes wp-content/themes/gf2013/index.html | 140 + wp-content/themes/gf2013/index.php | 53 + .../foundation/foundation.alerts.js | 50 + .../foundation/foundation.clearing.js | 480 + .../foundation/foundation.cookie.js | 74 + .../foundation/foundation.dropdown.js | 130 + .../foundation/foundation.forms.js | 395 + .../foundation/foundation.joyride.js | 612 ++ .../javascripts/foundation/foundation.js | 372 + .../foundation/foundation.magellan.js | 130 + .../foundation/foundation.orbit.js | 365 + .../foundation/foundation.placeholder.js | 159 + .../foundation/foundation.reveal.js | 270 + .../foundation/foundation.section.js | 272 + .../foundation/foundation.tooltips.js | 195 + .../foundation/foundation.topbar.js | 225 + .../javascripts/vendor/custom.modernizr.js | 4 + .../gf2013/javascripts/vendor/jquery.js | 9597 +++++++++++++++++ .../themes/gf2013/javascripts/vendor/zepto.js | 1884 ++++ wp-content/themes/gf2013/sass/_settings.scss | 1010 ++ wp-content/themes/gf2013/sass/app.scss | 209 + wp-content/themes/gf2013/sass/normalize.scss | 396 + wp-content/themes/gf2013/sidebar.php | 0 wp-content/themes/gf2013/style.css | 11 + wp-content/themes/gf2013/stylesheets/app.css | 4835 +++++++++ .../themes/gf2013/stylesheets/normalize.css | 368 + 38 files changed, 22442 insertions(+) create mode 100644 robots.txt create mode 100644 wp-content/themes/gf2013/MIT-LICENSE.txt create mode 100644 wp-content/themes/gf2013/config.rb create mode 100644 wp-content/themes/gf2013/content.php create mode 100644 wp-content/themes/gf2013/footer.php create mode 100644 wp-content/themes/gf2013/front-page.php create mode 100644 wp-content/themes/gf2013/functions.php create mode 100644 wp-content/themes/gf2013/header.php create mode 100644 wp-content/themes/gf2013/images/landingbilde.jpg create mode 100644 wp-content/themes/gf2013/images/leaf_left.png create mode 100644 wp-content/themes/gf2013/images/leaf_right.png create mode 100644 wp-content/themes/gf2013/index.html create mode 100644 wp-content/themes/gf2013/index.php create mode 100644 wp-content/themes/gf2013/javascripts/foundation/foundation.alerts.js create mode 100644 wp-content/themes/gf2013/javascripts/foundation/foundation.clearing.js create mode 100644 wp-content/themes/gf2013/javascripts/foundation/foundation.cookie.js create mode 100644 wp-content/themes/gf2013/javascripts/foundation/foundation.dropdown.js create mode 100644 wp-content/themes/gf2013/javascripts/foundation/foundation.forms.js create mode 100644 wp-content/themes/gf2013/javascripts/foundation/foundation.joyride.js create mode 100644 wp-content/themes/gf2013/javascripts/foundation/foundation.js create mode 100644 wp-content/themes/gf2013/javascripts/foundation/foundation.magellan.js create mode 100644 wp-content/themes/gf2013/javascripts/foundation/foundation.orbit.js create mode 100644 wp-content/themes/gf2013/javascripts/foundation/foundation.placeholder.js create mode 100644 wp-content/themes/gf2013/javascripts/foundation/foundation.reveal.js create mode 100644 wp-content/themes/gf2013/javascripts/foundation/foundation.section.js create mode 100644 wp-content/themes/gf2013/javascripts/foundation/foundation.tooltips.js create mode 100644 wp-content/themes/gf2013/javascripts/foundation/foundation.topbar.js create mode 100644 wp-content/themes/gf2013/javascripts/vendor/custom.modernizr.js create mode 100644 wp-content/themes/gf2013/javascripts/vendor/jquery.js create mode 100644 wp-content/themes/gf2013/javascripts/vendor/zepto.js create mode 100644 wp-content/themes/gf2013/sass/_settings.scss create mode 100644 wp-content/themes/gf2013/sass/app.scss create mode 100644 wp-content/themes/gf2013/sass/normalize.scss create mode 100644 wp-content/themes/gf2013/sidebar.php create mode 100644 wp-content/themes/gf2013/style.css create mode 100644 wp-content/themes/gf2013/stylesheets/app.css create mode 100644 wp-content/themes/gf2013/stylesheets/normalize.css diff --git a/.gitignore b/.gitignore index 7871cea..452236f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.swp *.swo wp-config.php +.sass-cache diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..2f06671 --- /dev/null +++ b/robots.txt @@ -0,0 +1,4 @@ +# www.robotstxt.org/ +# www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449 + +User-agent: * \ No newline at end of file diff --git a/wp-content/themes/gf2013/MIT-LICENSE.txt b/wp-content/themes/gf2013/MIT-LICENSE.txt new file mode 100644 index 0000000..1fc5997 --- /dev/null +++ b/wp-content/themes/gf2013/MIT-LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) 2011 ZURB, http://www.zurb.com/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/wp-content/themes/gf2013/config.rb b/wp-content/themes/gf2013/config.rb new file mode 100644 index 0000000..2bbd578 --- /dev/null +++ b/wp-content/themes/gf2013/config.rb @@ -0,0 +1,16 @@ +require 'zurb-foundation' +# Require any additional compass plugins here. + + +# Set this to the root of your project when deployed: +http_path = "/" +css_dir = "stylesheets" +sass_dir = "sass" +images_dir = "images" +javascripts_dir = "javascripts" + +# output_style = :expanded or :nested or :compact or :compressed + +# relative_assets = true + +line_comments = false diff --git a/wp-content/themes/gf2013/content.php b/wp-content/themes/gf2013/content.php new file mode 100644 index 0000000..293b2a3 --- /dev/null +++ b/wp-content/themes/gf2013/content.php @@ -0,0 +1,60 @@ + + +
> + +
+ +
+ +
+ + +

+ +

+ +

+ +
+ + +
+ +
+ + + + + +
diff --git a/wp-content/themes/gf2013/footer.php b/wp-content/themes/gf2013/footer.php new file mode 100644 index 0000000..f3413fb --- /dev/null +++ b/wp-content/themes/gf2013/footer.php @@ -0,0 +1,38 @@ + + + + + + + + + + + + diff --git a/wp-content/themes/gf2013/front-page.php b/wp-content/themes/gf2013/front-page.php new file mode 100644 index 0000000..f2426b6 --- /dev/null +++ b/wp-content/themes/gf2013/front-page.php @@ -0,0 +1,22 @@ + + +
+
+ + + + +
+ +
+ + + + +
+
+ diff --git a/wp-content/themes/gf2013/functions.php b/wp-content/themes/gf2013/functions.php new file mode 100644 index 0000000..d67104a --- /dev/null +++ b/wp-content/themes/gf2013/functions.php @@ -0,0 +1,6 @@ + diff --git a/wp-content/themes/gf2013/header.php b/wp-content/themes/gf2013/header.php new file mode 100644 index 0000000..3f39f89 --- /dev/null +++ b/wp-content/themes/gf2013/header.php @@ -0,0 +1,39 @@ + section and everything up till
+ * + */ +?> + + + + + + <?php wp_title( '|', true, 'right' ); ?> + + + + + + + + + + + + + +> +
+
+ + +
diff --git a/wp-content/themes/gf2013/images/landingbilde.jpg b/wp-content/themes/gf2013/images/landingbilde.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96f1629ac4f6840f1c0e6566aa9b8dd041fb63c9 GIT binary patch literal 196801 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%0DmW*uTF0nWg~M-Hde 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 z%0DH7*ptGyO!(GY$b6BuvGp>+Djz6+ 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 H{g3|vZ1#9G literal 0 HcmV?d00001 diff --git a/wp-content/themes/gf2013/images/leaf_left.png b/wp-content/themes/gf2013/images/leaf_left.png new file mode 100644 index 0000000000000000000000000000000000000000..5fab403b743c37f93007b4fc9026c7fca5e88be5 GIT binary patch literal 4977 zcmV-%6OQbOP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000P_NklYJ=8LdGJBFq8euu)h$#sP5@kjW zMp8^rmZ2zGXo)ChSTPk6iAiRnn20E1V&kN}#7xS@>FY;p=yp7N?{&_->b)~}{gOL= zYd_Yv_g=4iffgtvQ=y}VWCvuW#gJkV$$`m`gXA{;D^HNjiGepHZ%PG0vyvK8EE9w7 zCwW60!z7S`B=?c*772BiSxMs&-k+#5d?< zl4VI={i7K!HQG~4a-l`X0+L37?-0P9Bzbw(!twn9l58OPc$^bPvK#Gkh-AkYw@sp~ z^bvz(R||Gf*2>WhIyPh@*OTlW;p)z%TmB%~&!gimkB(Pe^C8*Yf@>t%Cu`|wq-f_b z#3quRV>pU7ap1dnNSO_HqvRM!?(rC-T5)|psxay=BnvF~Hq=S61z+mH z?QJzt3CVJj`AO=SqANUxA&~T1ZhV3qDNpMUulw7Dd$2 zUTM&eZ8wG(b-z+i8;g#43T$K8iI?#kNS;vOA9Ji_p90^{f}f$lZfh-1 zh~|WzAbE`~tP_K5SCV3;V=f~V_$mi}hyq_`!S+(lzg3VTS8fE2R6B^#N2#OEb8{{B z;IH-I-*RBjdi$C&N2XH5V zxd282$N_K&!21Ap0!U1X- zxC}rAfPnypiy;v$vko*TB>{S3p1NZ_!9f03MbhiPJCwo;2pg;&z31Ad}-vAT? z7$AS!0bs8jsPAOoeh2U-fC&NJzXB*X#x!Qi_20#F?QJA^wI}}%Niu2Vv`3dAc?ZdZ z0nBcR5Kc&;s#>a~eMpwb)gLymV1n#0$#P|MH6eg~PUdGw7RufYkUCB^$)!?=J0+3X z5y@!YBZSYW&{AX2JtVJiIE#fO>y^aFbz}$olbl6zhivQ{vZ=2MDQbiWnzapbB%(Ta zu=iT9OMPPtY1#@|R*_sSb3Y>0;R&*a{B$Npw+PPS90xHvE29yUK*+8nA0)X&HttEu zT@*HtL-MH*9gAJwydu-N$+3H? zi6qy_^H?ic;Y&*rd6%0a5Mzudw3{WR<7R0hxl<~Z>!sOMlL~*$Gmml$u2QjvN(**l zT)#;CugF9UJUwM3?<2WJ4$gd%gD=T*BW%^m2}M~uUrO7%r6w{(@&(PZ&Xy%iICZ|~ zXr2W-R8B;n$dri5I_3d!g#1yE^>*=mgWJK_IM^5}XcWG)2owPGHHA)o!Mz#X%E z{*4FsndS4giZSa`mXS2(oH1snF{WA)cRK;R4q&f@y=_u`W0Xqb#U(=}kFeR5!w`L% zo`d`l+$;sI)H3Fhm`>{Cm^Vy6#azc<1UI0Nl^oUat##e%y`G1o2^IWgH${JVORb0t(y89BFC@)8Bu4D7>9ATB<63U=JX>Sqw8zP*3X@4mgwWH|q^!}ANPGY`!Ff;;Fd)Fnm{_&Kk`UkN%9uSo)rnBwv(J5 zs8^i!821Is7!SnlW0c%SSl9G?#oB^d#{CK(C@iz78S6INH_bAM3^`JVXtET)y2Z#H zG+J^8#uL%_I;+O|awQG}uhMjY1#rQR^|lI(?aM`NGldXEo_B9xOKanYf$hW+;-U1HEcQlQSSN%D<|`_x_hq{0Z8#D2}=n!;Z?5W?lSc@sP&uUFt!L_G0UU&NA%KcxNtfpH6B z>{msMC;5ym_mZxp7!jf9RbpARuRgLzVW6b}%#?^3*S=}I$1^2L%NWP!xLM%|k^7*cB zMn!zKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000P{NkljN(rkkeD`H`lknVQ*$Ir`SJw9JTUVumRh1`&N2 zB}EZfh+!Ct5{42*DWO;yeIP4|Qbw!~sS!iQBveXFO4rjr@1@I+-#Oux6fCEWWF>%;#+a_`0|15qm<`~D!m8&!DIO!anPgEHwB3i~gCyJe zzdc-7_1q`LW^qlC*AgPVa4-<6o1D!?-G}wX}qj2u2Xx~EGBMwYU-sEedy2V+~1lWq%ZhvLxTGY!!})Z&V%uQM<^4>u))0jR&_s zG;t&OsmHm$TcSm|McGW*y0ql-Aj!oU2~i|(5=P|$DIN+rHzU}4Ex5-$eJ-@%8a&a( z^^P#gg4?7x2F6*ilO33el1qI-azHj5F;SAT-6XF#Us9(mbh~H4${pBN3+9AtPL3Vl zYQvE%@r?7cI0B2r?XxExW340kb>#QEWUPxxjuzFlC|eHcNAhvWSeKpa=wS)tQM))H zw$5?&O|olyD#luyP)-7$Y_QQ(SQga9xczy|;>2XH5V`v64A zTMpnY0L>wat9JMHBso{EOWR3K?W*jRrC1h>MHbF?PS4?oA1>51lwODX>Df%3c;Mj2y zs>*}8BJHqYG z-mid8vaG?8B%~1hRhHi$lKE81`nF4cS7B*qNWi1lo^z5T%Hs4Pc?Zc)L>=ve zYGL^fS@>Fo8034v8S5aXujXK9g1djpCR?z+SIBkBhreq{z9(n@w-Np0G|3gN4MuWi z04X}NQ4yYL6saP4ozw^(m7Q_7+_y_&Fb~+0FVC*q>RF8Y5)zRl`#I+4s(l=4!Bj|| zuvs?FDw2aGyt_)}svYBaC4d;4a!JBYk>nbZ&&pBLEMa)MXbr_NPsJ-0?-!SOc85#! z`p|*>(L+WuZ6q7y<5ZE6H9jGINVO=-n>$8EquLkt1M?Ek_8r%^b05 zMlz1!ib^et;FVX8VkNSu-wR3Fq|V_Nar{yt%cT-s%4DY*i9qQ#SNRM+Fh(YCwA3gR z$+1%}$G}oKzK#kh4n=aD!z6FG=WhsEkqI@ot zbxYaH#+cRlLW(6KvB%j50PczV0$X-s34lI=pC*#=uK@OmBRc`~5*aupDR-tda}2;# zk*G%j_!q#}0A3TPo^gHsO>!H6MULt118|!$=HD1>HGt#FWjYR^#u(EXlG6bw1JGYc zJ{rJwV+`}*`1siq_GWtUw&!>6m)mkQoUq_GC~}(vitxY2fnN}iEG|ZOFl83r>L_9{ zo??_YJm>M{p1wDD@OzaGt#{-DOOhQL2c^bbISSxTi@$4m5OC|zoTfQF$;?D!0tkd zB2hG5R%O9fD4p8VCiuvUrOy^AZc@IRM02;u39?9xzVdV&EYpfi?z7Pj{1C-4)TErp zMV?2u%7VAUh*9rw&LGd#_EnElXLV8QA}@7-4N?!85sWD_Lu+?Dk-5BBW|cxVxwE|F6_H6}*xg#DEmL xnuMf!Bq=E(V;EP+2QIwp?wV{6^g^`%1^^+w#DnvzOgI1l002ovPDHLkV1mIFVhsQQ literal 0 HcmV?d00001 diff --git a/wp-content/themes/gf2013/index.html b/wp-content/themes/gf2013/index.html new file mode 100644 index 0000000..137679d --- /dev/null +++ b/wp-content/themes/gf2013/index.html @@ -0,0 +1,140 @@ + + + + + + + + + Foundation 4 + + + + + + + + + + + +
+
+

Welcome to Foundation

+

This is version 4.0.9.

+
+
+
+ +
+
+

The Grid

+ + +
+
+
+

This is a twelve column section in a row. Each of these includes a div.panel element so you can see where the columns are - it's not required at all for the grid.

+
+
+
+
+
+
+

Six columns

+
+
+
+
+

Six columns

+
+
+
+
+
+
+

Four columns

+
+
+
+
+

Four columns

+
+
+
+
+

Four columns

+
+
+
+ +

Buttons

+ + +
+ +
+

Getting Started

+

We're stoked you want to try Foundation! To get going, this file (index.html) includes some basic styles you can modify, play around with, or totally destroy to get going.

+ +

Other Resources

+

Once you've exhausted the fun in this document, you should check out:

+
    +
  • Foundation Documentation
    Everything you need to know about using the framework.
  • +
  • Foundation on Github
    Latest code, issue reports, feature requests and more.
  • +
  • @foundationzurb
    Ping us on Twitter if you have questions. If you build something with this we'd love to see it (and send you a totally boss sticker).
  • +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/themes/gf2013/index.php b/wp-content/themes/gf2013/index.php new file mode 100644 index 0000000..31627e0 --- /dev/null +++ b/wp-content/themes/gf2013/index.php @@ -0,0 +1,53 @@ + + +
+
+ + + + + + + + + +
+ + +
+

+
+ +
+

Get started here.', 'gf2013' ), admin_url( 'post-new.php' ) ); ?>

+
+ + +
+

+
+ +
+

+ +
+ + +
+ + + +
+
+ + + diff --git a/wp-content/themes/gf2013/javascripts/foundation/foundation.alerts.js b/wp-content/themes/gf2013/javascripts/foundation/foundation.alerts.js new file mode 100644 index 0000000..62dc007 --- /dev/null +++ b/wp-content/themes/gf2013/javascripts/foundation/foundation.alerts.js @@ -0,0 +1,50 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.alerts = { + name : 'alerts', + + version : '4.0.0', + + settings : { + speed: 300, // fade out speed + callback: function (){} + }, + + init : function (scope, method, options) { + this.scope = scope || this.scope; + + if (typeof method === 'object') { + $.extend(true, this.settings, method); + } + + if (typeof method != 'string') { + if (!this.settings.init) this.events(); + + return this.settings.init; + } else { + return this[method].call(this, options); + } + }, + + events : function () { + var self = this; + + $(this.scope).on('click.fndtn.alerts', '[data-alert] a.close', function (e) { + e.preventDefault(); + $(this).closest("[data-alert]").fadeOut(self.speed, function () { + $(this).remove(); + self.settings.callback(); + }); + }); + + this.settings.init = true; + }, + + off : function () { + $(this.scope).off('.fndtn.alerts'); + } + }; +}(Foundation.zj, this, this.document)); \ No newline at end of file diff --git a/wp-content/themes/gf2013/javascripts/foundation/foundation.clearing.js b/wp-content/themes/gf2013/javascripts/foundation/foundation.clearing.js new file mode 100644 index 0000000..96ae0e2 --- /dev/null +++ b/wp-content/themes/gf2013/javascripts/foundation/foundation.clearing.js @@ -0,0 +1,480 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.clearing = { + name : 'clearing', + + version : '4.0.0', + + settings : { + templates : { + viewing : '×' + + '' + }, + + // comma delimited list of selectors that, on click, will close clearing, + // add 'div.clearing-blackout, div.visible-img' to close on background click + close_selectors : '.clearing-close', + + // event initializers and locks + init : false, + locked : false + }, + + init : function (scope, method, options) { + this.scope = this.scope || scope; + Foundation.inherit(this, 'set_data get_data remove_data throttle'); + + if (typeof method === 'object') { + options = $.extend(true, this.settings, method); + } + + if (typeof method != 'string') { + $(this.scope).find('ul[data-clearing]').each(function () { + var self = Foundation.libs.clearing, + $el = $(this), + options = options || {}, + settings = self.get_data($el); + + if (!settings) { + options.$parent = $el.parent(); + + self.set_data($el, $.extend(true, self.settings, options)); + + self.assemble($el.find('li')); + + if (!self.settings.init) { + self.events().swipe_events(); + } + } + }); + + return this.settings.init; + } else { + // fire method + return this[method].call(this, options); + } + }, + + // event binding and initial setup + + events : function () { + var self = this; + + $(this.scope) + .on('click.fndtn.clearing', 'ul[data-clearing] li', + function (e, current, target) { + var current = current || $(this), + target = target || current, + settings = self.get_data(current.parent()); + + e.preventDefault(); + if (!settings) self.init(); + + // set current and target to the clicked li if not otherwise defined. + self.open($(e.target), current, target); + self.update_paddles(target); + }) + + .on('click.fndtn.clearing', '.clearing-main-right', + function (e) { this.nav(e, 'next') }.bind(this)) + .on('click.fndtn.clearing', '.clearing-main-left', + function (e) { this.nav(e, 'prev') }.bind(this)) + .on('click.fndtn.clearing', this.settings.close_selectors, + function (e) { Foundation.libs.clearing.close(e, this) }) + .on('keydown.fndtn.clearing', + function (e) { this.keydown(e) }.bind(this)); + + $(window).on('resize.fndtn.clearing', + function (e) { this.resize() }.bind(this)); + + this.settings.init = true; + return this; + }, + + swipe_events : function () { + var self = this; + + $(this.scope) + .on('touchstart.fndtn.clearing', '.visible-img', function(e) { + if (!e.touches) { e = e.originalEvent; } + var data = { + start_page_x: e.touches[0].pageX, + start_page_y: e.touches[0].pageY, + start_time: (new Date()).getTime(), + delta_x: 0, + is_scrolling: undefined + }; + + $(this).data('swipe-transition', data); + e.stopPropagation(); + }) + .on('touchmove.fndtn.clearing', '.visible-img', function(e) { + if (!e.touches) { e = e.originalEvent; } + // Ignore pinch/zoom events + if(e.touches.length > 1 || e.scale && e.scale !== 1) return; + + var data = $(this).data('swipe-transition'); + + if (typeof data === 'undefined') { + data = {}; + } + + data.delta_x = e.touches[0].pageX - data.start_page_x; + + if ( typeof data.is_scrolling === 'undefined') { + data.is_scrolling = !!( data.is_scrolling || Math.abs(data.delta_x) < Math.abs(e.touches[0].pageY - data.start_page_y) ); + } + + if (!data.is_scrolling && !data.active) { + e.preventDefault(); + var direction = (data.delta_x < 0) ? 'next' : 'prev'; + data.active = true; + self.nav(e, direction); + } + }) + .on('touchend.fndtn.clearing', '.visible-img', function(e) { + $(this).data('swipe-transition', {}); + e.stopPropagation(); + }); + }, + + assemble : function ($li) { + var $el = $li.parent(), + settings = this.get_data($el), + grid = $el.detach(), + data = { + grid: '', + viewing: settings.templates.viewing + }, + wrapper = '
' + data.viewing + + data.grid + '
'; + + return settings.$parent.append(wrapper); + }, + + // event callbacks + + open : function ($image, current, target) { + var root = target.closest('.clearing-assembled'), + container = root.find('div').first(), + visible_image = container.find('.visible-img'), + image = visible_image.find('img').not($image); + + if (!this.locked()) { + // set the image to the selected thumbnail + image.attr('src', this.load($image)); + + this.loaded(image, function () { + // toggle the gallery + root.addClass('clearing-blackout'); + container.addClass('clearing-container'); + visible_image.show(); + this.fix_height(target) + .caption(visible_image.find('.clearing-caption'), $image) + .center(image) + .shift(current, target, function () { + target.siblings().removeClass('visible'); + target.addClass('visible'); + }); + }.bind(this)); + } + }, + + close : function (e, el) { + e.preventDefault(); + + var root = (function (target) { + if (/blackout/.test(target.selector)) { + return target; + } else { + return target.closest('.clearing-blackout'); + } + }($(el))), container, visible_image; + + if (el === e.target && root) { + container = root.find('div').first(), + visible_image = container.find('.visible-img'); + this.settings.prev_index = 0; + root.find('ul[data-clearing]') + .attr('style', '').closest('.clearing-blackout') + .removeClass('clearing-blackout'); + container.removeClass('clearing-container'); + visible_image.hide(); + } + + return false; + }, + + keydown : function (e) { + var clearing = $('.clearing-blackout').find('ul[data-clearing]'); + + if (e.which === 39) this.go(clearing, 'next'); + if (e.which === 37) this.go(clearing, 'prev'); + if (e.which === 27) $('a.clearing-close').trigger('click'); + }, + + nav : function (e, direction) { + var clearing = $('.clearing-blackout').find('ul[data-clearing]'); + + e.preventDefault(); + this.go(clearing, direction); + }, + + resize : function () { + var image = $('.clearing-blackout .visible-img').find('img'); + + if (image.length) { + this.center(image); + } + }, + + // visual adjustments + fix_height : function (target) { + var lis = target.parent().children(), + self = this; + + lis.each(function () { + var li = $(this), + image = li.find('img'); + + if (li.height() > self.outerHeight(image)) { + li.addClass('fix-height'); + } + }) + .closest('ul') + .width(lis.length * 100 + '%'); + + return this; + }, + + update_paddles : function (target) { + var visible_image = target + .closest('.carousel') + .siblings('.visible-img'); + + if (target.next().length) { + visible_image + .find('.clearing-main-right') + .removeClass('disabled'); + } else { + visible_image + .find('.clearing-main-right') + .addClass('disabled'); + } + + if (target.prev().length) { + visible_image + .find('.clearing-main-left') + .removeClass('disabled'); + } else { + visible_image + .find('.clearing-main-left') + .addClass('disabled'); + } + }, + + center : function (target) { + target.css({ + marginLeft : -(this.outerWidth(target) / 2), + marginTop : -(this.outerHeight(target) / 2) + }); + return this; + }, + + // image loading and preloading + + load : function ($image) { + var href = $image.parent().attr('href'); + + this.preload($image); + + if (href) return href; + return $image.attr('src'); + }, + + preload : function ($image) { + this + .img($image.closest('li').next()) + .img($image.closest('li').prev()); + }, + + loaded : function (image, callback) { + // based on jquery.imageready.js + // @weblinc, @jsantell, (c) 2012 + + function loaded () { + callback(); + } + + function bindLoad () { + this.one('load', loaded); + + if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { + var src = this.attr( 'src' ), + param = src.match( /\?/ ) ? '&' : '?'; + + param += 'random=' + (new Date()).getTime(); + this.attr('src', src + param); + } + } + + if (!image.attr('src')) { + loaded(); + return; + } + + if (this.complete || this.readyState === 4) { + loaded(); + } else { + bindLoad.call(image); + } + }, + + img : function (img) { + if (img.length) { + var new_img = new Image(), + new_a = img.find('a'); + + if (new_a.length) { + new_img.src = new_a.attr('href'); + } else { + new_img.src = img.find('img').attr('src'); + } + } + return this; + }, + + // image caption + + caption : function (container, $image) { + var caption = $image.data('caption'); + + if (caption) { + container + .text(caption) + .show(); + } else { + container + .text('') + .hide(); + } + return this; + }, + + // directional methods + + go : function ($ul, direction) { + var current = $ul.find('.visible'), + target = current[direction](); + + if (target.length) { + target + .find('img') + .trigger('click', [current, target]); + } + }, + + shift : function (current, target, callback) { + var clearing = target.parent(), + old_index = this.settings.prev_index || target.index(), + direction = this.direction(clearing, current, target), + left = parseInt(clearing.css('left'), 10), + width = this.outerWidth(target), + skip_shift; + + // we use jQuery animate instead of CSS transitions because we + // need a callback to unlock the next animation + if (target.index() !== old_index && !/skip/.test(direction)){ + if (/left/.test(direction)) { + this.lock(); + clearing.animate({left : left + width}, 300, this.unlock()); + } else if (/right/.test(direction)) { + this.lock(); + clearing.animate({left : left - width}, 300, this.unlock()); + } + } else if (/skip/.test(direction)) { + // the target image is not adjacent to the current image, so + // do we scroll right or not + skip_shift = target.index() - this.settings.up_count; + this.lock(); + + if (skip_shift > 0) { + clearing.animate({left : -(skip_shift * width)}, 300, this.unlock()); + } else { + clearing.animate({left : 0}, 300, this.unlock()); + } + } + + callback(); + }, + + direction : function ($el, current, target) { + var lis = $el.find('li'), + li_width = this.outerWidth(lis) + (this.outerWidth(lis) / 4), + up_count = Math.floor(this.outerWidth($('.clearing-container')) / li_width) - 1, + target_index = lis.index(target), + response; + + this.settings.up_count = up_count; + + if (this.adjacent(this.settings.prev_index, target_index)) { + if ((target_index > up_count) + && target_index > this.settings.prev_index) { + response = 'right'; + } else if ((target_index > up_count - 1) + && target_index <= this.settings.prev_index) { + response = 'left'; + } else { + response = false; + } + } else { + response = 'skip'; + } + + this.settings.prev_index = target_index; + + return response; + }, + + adjacent : function (current_index, target_index) { + for (var i = target_index + 1; i >= target_index - 1; i--) { + if (i === current_index) return true; + } + return false; + }, + + // lock management + + lock : function () { + this.settings.locked = true; + }, + + unlock : function () { + this.settings.locked = false; + }, + + locked : function () { + return this.settings.locked; + }, + + // plugin management/browser quirks + + outerHTML : function (el) { + // support FireFox < 11 + return el.outerHTML || new XMLSerializer().serializeToString(el); + }, + + off : function () { + $(this.scope).off('.fndtn.clearing'); + $(window).off('.fndtn.clearing'); + this.remove_data(); // empty settings cache + this.settings.init = false; + } + }; + +}(Foundation.zj, this, this.document)); diff --git a/wp-content/themes/gf2013/javascripts/foundation/foundation.cookie.js b/wp-content/themes/gf2013/javascripts/foundation/foundation.cookie.js new file mode 100644 index 0000000..b196e76 --- /dev/null +++ b/wp-content/themes/gf2013/javascripts/foundation/foundation.cookie.js @@ -0,0 +1,74 @@ +/*! + * jQuery Cookie Plugin v1.3 + * https://github.com/carhartl/jquery-cookie + * + * Copyright 2011, Klaus Hartl + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://www.opensource.org/licenses/mit-license.php + * http://www.opensource.org/licenses/GPL-2.0 + * + * Modified to work with Zepto.js by ZURB + */ +(function ($, document, undefined) { + + var pluses = /\+/g; + + function raw(s) { + return s; + } + + function decoded(s) { + return decodeURIComponent(s.replace(pluses, ' ')); + } + + var config = $.cookie = function (key, value, options) { + + // write + if (value !== undefined) { + options = $.extend({}, config.defaults, options); + + if (value === null) { + options.expires = -1; + } + + if (typeof options.expires === 'number') { + var days = options.expires, t = options.expires = new Date(); + t.setDate(t.getDate() + days); + } + + value = config.json ? JSON.stringify(value) : String(value); + + return (document.cookie = [ + encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value), + options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE + options.path ? '; path=' + options.path : '', + options.domain ? '; domain=' + options.domain : '', + options.secure ? '; secure' : '' + ].join('')); + } + + // read + var decode = config.raw ? raw : decoded; + var cookies = document.cookie.split('; '); + for (var i = 0, l = cookies.length; i < l; i++) { + var parts = cookies[i].split('='); + if (decode(parts.shift()) === key) { + var cookie = decode(parts.join('=')); + return config.json ? JSON.parse(cookie) : cookie; + } + } + + return null; + }; + + config.defaults = {}; + + $.removeCookie = function (key, options) { + if ($.cookie(key) !== null) { + $.cookie(key, null, options); + return true; + } + return false; + }; + +})(Foundation.zj, document); \ No newline at end of file diff --git a/wp-content/themes/gf2013/javascripts/foundation/foundation.dropdown.js b/wp-content/themes/gf2013/javascripts/foundation/foundation.dropdown.js new file mode 100644 index 0000000..474993a --- /dev/null +++ b/wp-content/themes/gf2013/javascripts/foundation/foundation.dropdown.js @@ -0,0 +1,130 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.dropdown = { + name : 'dropdown', + + version : '4.0.9', + + settings : { + activeClass: 'open' + }, + + init : function (scope, method, options) { + this.scope = scope || this.scope; + Foundation.inherit(this, 'throttle'); + + if (typeof method === 'object') { + $.extend(true, this.settings, method); + } + + if (typeof method != 'string') { + + if (!this.settings.init) { + this.events(); + } + + return this.settings.init; + } else { + return this[method].call(this, options); + } + }, + + events : function () { + var self = this; + + $(this.scope).on('click.fndtn.dropdown', '[data-dropdown]', function (e) { + e.preventDefault(); + e.stopPropagation(); + self.toggle($(this)); + }); + + $('*, html, body').on('click.fndtn.dropdown', function (e) { + if (!$(e.target).data('dropdown')) { + $('[data-dropdown-content]') + .css('left', '-99999px') + .removeClass(self.settings.activeClass); + } + }); + + $(window).on('resize.fndtn.dropdown', self.throttle(function () { + self.resize.call(self); + }, 50)).trigger('resize'); + + this.settings.init = true; + }, + + toggle : function (target, resize) { + var dropdown = $('#' + target.data('dropdown')); + + $('[data-dropdown-content]').not(dropdown).css('left', '-99999px').removeClass(this.settings.activeClass); + + if (dropdown.hasClass(this.settings.activeClass)) { + dropdown + .css('left', '-99999px') + .removeClass(this.settings.activeClass); + } else { + this + .css(dropdown + .addClass(this.settings.activeClass), target); + } + }, + + resize : function () { + var dropdown = $('[data-dropdown-content].open'), + target = $("[data-dropdown='" + dropdown.attr('id') + "']"); + + if (dropdown.length && target.length) { + this.css(dropdown, target); + } + }, + + css : function (dropdown, target) { + if (dropdown.parent()[0] === $('body')[0]) { + var position = target.offset(); + } else { + var position = target.position(); + } + + if (this.small()) { + dropdown.css({ + position : 'absolute', + width: '95%', + left: '2.5%', + 'max-width': 'none', + top: position.top + this.outerHeight(target) + }); + } else { + if ($(window).width() > this.outerWidth(dropdown) + target.offset().left) { + var left = position.left; + } else { + if (!dropdown.hasClass('right')) { + dropdown.addClass('right'); + } + var left = position.left - (this.outerWidth(dropdown) - this.outerWidth(target)); + } + dropdown.attr('style', '').css({ + position : 'absolute', + top: position.top + this.outerHeight(target), + left: left + }); + } + + return dropdown; + }, + + small : function () { + return $(window).width() < 768 || $('html').hasClass('lt-ie9'); + }, + + off: function () { + $(this.scope).off('.fndtn.dropdown'); + $('html, body').off('.fndtn.dropdown'); + $(window).off('.fndtn.dropdown'); + $('[data-dropdown-content]').off('.fndtn.dropdown'); + this.settings.init = false; + } + }; +}(Foundation.zj, this, this.document)); diff --git a/wp-content/themes/gf2013/javascripts/foundation/foundation.forms.js b/wp-content/themes/gf2013/javascripts/foundation/foundation.forms.js new file mode 100644 index 0000000..43bf451 --- /dev/null +++ b/wp-content/themes/gf2013/javascripts/foundation/foundation.forms.js @@ -0,0 +1,395 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.forms = { + name : 'forms', + + version : '4.0.4', + + settings : { + disable_class: 'no-custom' + }, + + init : function (scope, method, options) { + this.scope = scope || this.scope; + + if (typeof method === 'object') { + $.extend(true, this.settings, method); + } + + if (typeof method != 'string') { + if (!this.settings.init) { + this.events(); + } + + this.assemble(); + + return this.settings.init; + } else { + return this[method].call(this, options); + } + }, + + assemble : function () { + $('form.custom input[type="radio"]', $(this.scope)).not('[data-customforms="disabled"]') + .each(this.append_custom_markup); + $('form.custom input[type="checkbox"]', $(this.scope)).not('[data-customforms="disabled"]') + .each(this.append_custom_markup); + $('form.custom select', $(this.scope)).not('[data-customforms="disabled"]') + .each(this.append_custom_select); + }, + + events : function () { + var self = this; + + $(this.scope) + .on('change.fndtn.forms', 'form.custom select:not([data-customforms="disabled"])', function (e) { + self.refresh_custom_select($(this)); + }) + .on('click.fndtn.forms', 'form.custom label', function (e) { + var $associatedElement = $('#' + self.escape($(this).attr('for')) + ':not([data-customforms="disabled"])'), + $customCheckbox, + $customRadio; + if ($associatedElement.length !== 0) { + if ($associatedElement.attr('type') === 'checkbox') { + e.preventDefault(); + $customCheckbox = $(this).find('span.custom.checkbox'); + + //the checkbox might be outside after the label + if ($customCheckbox.length == 0) { + $customCheckbox = $(this).next('span.custom.checkbox'); + } + //the checkbox might be outside before the label + if ($customCheckbox.length == 0) { + $customCheckbox = $(this).prev('span.custom.checkbox'); + } + self.toggle_checkbox($customCheckbox); + } else if ($associatedElement.attr('type') === 'radio') { + e.preventDefault(); + $customRadio = $(this).find('span.custom.radio'); + //the radio might be outside after the label + if ($customRadio.length == 0) { + $customRadio = $(this).next('span.custom.radio'); + } + //the radio might be outside before the label + if ($customRadio.length == 0) { + $customRadio = $(this).prev('span.custom.radio'); + } + self.toggle_radio($customRadio); + } + } + }) + .on('click.fndtn.forms', 'form.custom div.custom.dropdown a.current, form.custom div.custom.dropdown a.selector', function (e) { + var $this = $(this), + $dropdown = $this.closest('div.custom.dropdown'), + $select = $dropdown.prev(); + + // make sure other dropdowns close + if(!$dropdown.hasClass('open')) + $(self.scope).trigger('click'); + + e.preventDefault(); + if (false === $select.is(':disabled')) { + $dropdown.toggleClass('open'); + + if ($dropdown.hasClass('open')) { + $(self.scope).on('click.fndtn.forms.customdropdown', function () { + $dropdown.removeClass('open'); + $(self.scope).off('.fndtn.forms.customdropdown'); + }); + } else { + $(self.scope).on('.fndtn.forms.customdropdown'); + } + return false; + } + }) + .on('click.fndtn.forms touchend.fndtn.forms', 'form.custom div.custom.dropdown li', function (e) { + var $this = $(this), + $customDropdown = $this.closest('div.custom.dropdown'), + $select = $customDropdown.prev(), + selectedIndex = 0; + + e.preventDefault(); + e.stopPropagation(); + + if ( ! $(this).hasClass('disabled')) { + $('div.dropdown').not($customDropdown).removeClass('open'); + + var $oldThis= $this + .closest('ul') + .find('li.selected'); + $oldThis.removeClass('selected'); + + $this.addClass('selected'); + + $customDropdown + .removeClass('open') + .find('a.current') + .html($this.html()); + + $this.closest('ul').find('li').each(function (index) { + if ($this[0] == this) { + selectedIndex = index; + } + + }); + $select[0].selectedIndex = selectedIndex; + + //store the old value in data + $select.data('prevalue', $oldThis.html()); + $select.trigger('change'); + } + }); + + this.settings.init = true; + }, + + append_custom_markup : function (idx, sel) { + var $this = $(sel).hide(), + type = $this.attr('type'), + $span = $this.next('span.custom.' + type); + + if ($span.length === 0) { + $span = $('').insertAfter($this); + } + + $span.toggleClass('checked', $this.is(':checked')); + $span.toggleClass('disabled', $this.is(':disabled')); + }, + + append_custom_select : function (idx, sel) { + var self = Foundation.libs.forms, + $this = $( sel ), + $customSelect = $this.next( 'div.custom.dropdown' ), + $customList = $customSelect.find( 'ul' ), + $selectCurrent = $customSelect.find( ".current" ), + $selector = $customSelect.find( ".selector" ), + $options = $this.find( 'option' ), + $selectedOption = $options.filter( ':selected' ), + copyClasses = $this.attr('class') ? $this.attr('class').split(' ') : [], + maxWidth = 0, + liHtml = '', + $listItems, + $currentSelect = false; + + if ($this.hasClass(self.settings.disable_class)) return; + + if ($customSelect.length === 0) { + var customSelectSize = $this.hasClass( 'small' ) ? 'small' : + $this.hasClass( 'medium' ) ? 'medium' : + $this.hasClass( 'large' ) ? 'large' : + $this.hasClass( 'expand' ) ? 'expand' : ''; + + $customSelect = $('
    '); + $selector = $customSelect.find(".selector"); + $customList = $customSelect.find("ul"); + liHtml = $options.map(function() { return "
  • " + $( this ).html() + "
  • "; } ).get().join( '' ); + $customList.append(liHtml); + $currentSelect = $customSelect.prepend('' + $selectedOption.html() + '' ).find( ".current" ); + $this + .after( $customSelect ) + .hide(); + + } else { + liHtml = $options.map(function() { + return "
  • " + $( this ).html() + "
  • "; + }) + .get().join(''); + $customList + .html('') + .append(liHtml); + + } // endif $customSelect.length === 0 + $customSelect.toggleClass('disabled', $this.is( ':disabled' ) ); + $listItems = $customList.find( 'li' ); + + $options.each( function ( index ) { + if ( this.selected ) { + $listItems.eq( index ).addClass( 'selected' ); + + if ($currentSelect) { + $currentSelect.html( $( this ).html() ); + } + + } + if ($(this).is(':disabled')) { + $listItems.eq( index ).addClass( 'disabled' ); + } + }); + + // + // If we're not specifying a predetermined form size. + // + if (!$customSelect.is('.small, .medium, .large, .expand')) { + + // ------------------------------------------------------------------------------------ + // This is a work-around for when elements are contained within hidden parents. + // For example, when custom-form elements are inside of a hidden reveal modal. + // + // We need to display the current custom list element as well as hidden parent elements + // in order to properly calculate the list item element's width property. + // ------------------------------------------------------------------------------------- + + $customSelect.addClass( 'open' ); + // + // Quickly, display all parent elements. + // This should help us calcualate the width of the list item's within the drop down. + // + var self = Foundation.libs.forms; + self.hidden_fix.adjust( $customList ); + + maxWidth = ( self.outerWidth($listItems) > maxWidth ) ? self.outerWidth($listItems) : maxWidth; + + Foundation.libs.forms.hidden_fix.reset(); + + $customSelect.removeClass( 'open' ); + + } // endif + + }, + + refresh_custom_select : function ($select) { + var self = this; + var maxWidth = 0, + $customSelect = $select.next(), + $options = $select.find('option'); + + $customSelect.find('ul').html(''); + + $options.each(function () { + var $li = $('
  • ' + $(this).html() + '
  • '); + $customSelect.find('ul').append($li); + }); + + // re-populate + $options.each(function (index) { + if (this.selected) { + $customSelect.find('li').eq(index).addClass('selected'); + $customSelect.find('.current').html($(this).html()); + } + if ($(this).is(':disabled')) { + $customSelect.find('li').eq(index).addClass('disabled'); + } + }); + + // fix width + $customSelect.removeAttr('style') + .find('ul').removeAttr('style'); + $customSelect.find('li').each(function () { + $customSelect.addClass('open'); + if (self.outerWidth($(this)) > maxWidth) { + maxWidth = self.outerWidth($(this)); + } + $customSelect.removeClass('open'); + }); + }, + + toggle_checkbox : function ($element) { + var $input = $element.prev(), + input = $input[0]; + + if (false === $input.is(':disabled')) { + input.checked = ((input.checked) ? false : true); + $element.toggleClass('checked'); + + $input.trigger('change'); + } + }, + + toggle_radio : function ($element) { + var $input = $element.prev(), + $form = $input.closest('form.custom'), + input = $input[0]; + + if (false === $input.is(':disabled')) { + $form.find('input[type="radio"][name="' + this.escape($input.attr('name')) + '"]').next().not($element).removeClass('checked'); + if ( !$element.hasClass('checked') ) { + $element.toggleClass('checked'); + } + input.checked = $element.hasClass('checked'); + + $input.trigger('change'); + } + }, + + escape : function (text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + }, + + hidden_fix : { + /** + * Sets all hidden parent elements and self to visibile. + * + * @method adjust + * @param {jQuery Object} $child + */ + + // We'll use this to temporarily store style properties. + tmp : [], + + // We'll use this to set hidden parent elements. + hidden : null, + + adjust : function( $child ) { + // Internal reference. + var _self = this; + + // Set all hidden parent elements, including this element. + _self.hidden = $child.parents().andSelf().filter( ":hidden" ); + + // Loop through all hidden elements. + _self.hidden.each( function() { + + // Cache the element. + var $elem = $( this ); + + // Store the style attribute. + // Undefined if element doesn't have a style attribute. + _self.tmp.push( $elem.attr( 'style' ) ); + + // Set the element's display property to block, + // but ensure it's visibility is hidden. + $elem.css( { 'visibility' : 'hidden', 'display' : 'block' } ); + }); + + }, // end adjust + + /** + * Resets the elements previous state. + * + * @method reset + */ + reset : function() { + // Internal reference. + var _self = this; + // Loop through our hidden element collection. + _self.hidden.each( function( i ) { + // Cache this element. + var $elem = $( this ), + _tmp = _self.tmp[ i ]; // Get the stored 'style' value for this element. + + // If the stored value is undefined. + if( _tmp === undefined ) + // Remove the style attribute. + $elem.removeAttr( 'style' ); + else + // Otherwise, reset the element style attribute. + $elem.attr( 'style', _tmp ); + + }); + // Reset the tmp array. + _self.tmp = []; + // Reset the hidden elements variable. + _self.hidden = null; + + } // end reset + + }, + + off : function () { + $(this.scope).off('.fndtn.forms'); + } + }; +}(Foundation.zj, this, this.document)); \ No newline at end of file diff --git a/wp-content/themes/gf2013/javascripts/foundation/foundation.joyride.js b/wp-content/themes/gf2013/javascripts/foundation/foundation.joyride.js new file mode 100644 index 0000000..e8dd2ef --- /dev/null +++ b/wp-content/themes/gf2013/javascripts/foundation/foundation.joyride.js @@ -0,0 +1,612 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.joyride = { + name: 'joyride', + + version : '4.0.0', + + defaults : { + tipLocation : 'bottom', // 'top' or 'bottom' in relation to parent + nubPosition : 'auto', // override on a per tooltip bases + scrollSpeed : 300, // Page scrolling speed in milliseconds + timer : 0, // 0 = no timer , all other numbers = timer in milliseconds + startTimerOnClick : true, // true or false - true requires clicking the first button start the timer + startOffset : 0, // the index of the tooltip you want to start on (index of the li) + nextButton : true, // true or false to control whether a next button is used + tipAnimation : 'fade', // 'pop' or 'fade' in each tip + pauseAfter : [], // array of indexes where to pause the tour after + tipAnimationFadeSpeed: 300, // when tipAnimation = 'fade' this is speed in milliseconds for the transition + cookieMonster : false, // true or false to control whether cookies are used + cookieName : 'joyride', // Name the cookie you'll use + cookieDomain : false, // Will this cookie be attached to a domain, ie. '.notableapp.com' + cookieExpires : 365, // set when you would like the cookie to expire. + tipContainer : 'body', // Where will the tip be attached + postRideCallback : function (){}, // A method to call once the tour closes (canceled or complete) + postStepCallback : function (){}, // A method to call after each step + template : { // HTML segments for tip layout + link : '×', + timer : '
    ', + tip : '
    ', + wrapper : '
    ', + button : '' + } + }, + + settings : {}, + + init : function (scope, method, options) { + this.scope = scope || this.scope; + Foundation.inherit(this, 'throttle data_options scrollTo scrollLeft delay'); + + if (typeof method === 'object') { + $.extend(true, this.settings, this.defaults, method); + } else { + $.extend(true, this.settings, this.defaults, options); + } + + if (typeof method != 'string') { + if (!this.settings.init) this.events(); + + return this.settings.init; + } else { + return this[method].call(this, options); + } + }, + + events : function () { + var self = this; + + $(this.scope) + .on('click.joyride', '.joyride-next-tip, .joyride-modal-bg', function (e) { + e.preventDefault(); + + if (this.settings.$li.next().length < 1) { + this.end(); + } else if (this.settings.timer > 0) { + clearTimeout(this.settings.automate); + this.hide(); + this.show(); + this.startTimer(); + } else { + this.hide(); + this.show(); + } + + }.bind(this)) + + .on('click.joyride', '.joyride-close-tip', function (e) { + e.preventDefault(); + this.end(); + }.bind(this)); + + $(window).on('resize.fndtn.joyride', self.throttle(function () { + if ($('[data-joyride]').length > 0 && self.settings.$next_tip) { + if (self.is_phone()) { + self.pos_phone(); + } else { + self.pos_default(); + } + } + }, 100)); + + this.settings.init = true; + }, + + start : function () { + var self = this, + $this = $(this.scope).find('[data-joyride]'), + integer_settings = ['timer', 'scrollSpeed', 'startOffset', 'tipAnimationFadeSpeed', 'cookieExpires'], + int_settings_count = integer_settings.length; + + if (!this.settings.init) this.init(); + + // non configureable settings + this.settings.$content_el = $this; + this.settings.body_offset = $(this.settings.tipContainer).position(); + this.settings.$tip_content = this.settings.$content_el.find('> li'); + this.settings.paused = false; + this.settings.attempts = 0; + + this.settings.tipLocationPatterns = { + top: ['bottom'], + bottom: [], // bottom should not need to be repositioned + left: ['right', 'top', 'bottom'], + right: ['left', 'top', 'bottom'] + }; + + // can we create cookies? + if (typeof $.cookie !== 'function') { + this.settings.cookieMonster = false; + } + + // generate the tips and insert into dom. + if (!this.settings.cookieMonster || this.settings.cookieMonster && $.cookie(this.settings.cookieName) === null) { + this.settings.$tip_content.each(function (index) { + var $this = $(this); + $.extend(true, self.settings, self.data_options($this)); + // Make sure that settings parsed from data_options are integers where necessary + for (var i = int_settings_count - 1; i >= 0; i--) { + self.settings[integer_settings[i]] = parseInt(self.settings[integer_settings[i]], 10); + } + self.create({$li : $this, index : index}); + }); + + // show first tip + if (!this.settings.startTimerOnClick && this.settings.timer > 0) { + this.show('init'); + this.startTimer(); + } else { + this.show('init'); + } + + } + }, + + resume : function () { + this.set_li(); + this.show(); + }, + + tip_template : function (opts) { + var $blank, content; + + opts.tip_class = opts.tip_class || ''; + + $blank = $(this.settings.template.tip).addClass(opts.tip_class); + content = $.trim($(opts.li).html()) + + this.button_text(opts.button_text) + + this.settings.template.link + + this.timer_instance(opts.index); + + $blank.append($(this.settings.template.wrapper)); + $blank.first().attr('data-index', opts.index); + $('.joyride-content-wrapper', $blank).append(content); + + return $blank[0]; + }, + + timer_instance : function (index) { + var txt; + + if ((index === 0 && this.settings.startTimerOnClick && this.settings.timer > 0) || this.settings.timer === 0) { + txt = ''; + } else { + txt = this.outerHTML($(this.settings.template.timer)[0]); + } + return txt; + }, + + button_text : function (txt) { + if (this.settings.nextButton) { + txt = $.trim(txt) || 'Next'; + txt = this.outerHTML($(this.settings.template.button).append(txt)[0]); + } else { + txt = ''; + } + return txt; + }, + + create : function (opts) { + var buttonText = opts.$li.attr('data-button') || opts.$li.attr('data-text'), + tipClass = opts.$li.attr('class'), + $tip_content = $(this.tip_template({ + tip_class : tipClass, + index : opts.index, + button_text : buttonText, + li : opts.$li + })); + + $(this.settings.tipContainer).append($tip_content); + }, + + show : function (init) { + var $timer = null; + + // are we paused? + if (this.settings.$li === undefined + || ($.inArray(this.settings.$li.index(), this.settings.pauseAfter) === -1)) { + + // don't go to the next li if the tour was paused + if (this.settings.paused) { + this.settings.paused = false; + } else { + this.set_li(init); + } + + this.settings.attempts = 0; + + if (this.settings.$li.length && this.settings.$target.length > 0) { + + this.settings.tipSettings = $.extend(this.settings, this.data_options(this.settings.$li)); + + this.settings.timer = parseInt(this.settings.timer, 10); + + this.settings.tipSettings.tipLocationPattern = this.settings.tipLocationPatterns[this.settings.tipSettings.tipLocation]; + + // scroll if not modal + if (!/body/i.test(this.settings.$target.selector)) { + this.scroll_to(); + } + + if (this.is_phone()) { + this.pos_phone(true); + } else { + this.pos_default(true); + } + + $timer = this.settings.$next_tip.find('.joyride-timer-indicator'); + + if (/pop/i.test(this.settings.tipAnimation)) { + + $timer.width(0); + + if (thsi.settings.timer > 0) { + + this.settings.$next_tip.show(); + + this.delay(function () { + $timer.animate({ + width: $timer.parent().width() + }, this.settings.timer, 'linear'); + }.bind(this), this.settings.tipAnimationFadeSpeed); + + } else { + this.settings.$next_tip.show(); + + } + + + } else if (/fade/i.test(this.settings.tipAnimation)) { + + $timer.width(0); + + if (this.settings.timer > 0) { + + this.settings.$next_tip + .fadeIn(this.settings.tipAnimationFadeSpeed) + .show(); + + this.delay(function () { + $timer.animate({ + width: $timer.parent().width() + }, this.settings.timer, 'linear'); + }.bind(this), this.settings.tipAnimationFadeSpeed); + + } else { + this.settings.$next_tip.fadeIn(this.settings.tipAnimationFadeSpeed); + + } + } + + this.settings.$current_tip = this.settings.$next_tip; + + // skip non-existant targets + } else if (this.settings.$li && this.settings.$target.length < 1) { + + this.show(); + + } else { + + this.end(); + + } + } else { + + this.settings.paused = true; + + } + + }, + + is_phone : function () { + if (Modernizr) { + return Modernizr.mq('only screen and (max-width: 767px)') || $('.lt-ie9').length > 0; + } + + return (this.settings.$window.width() < 767) ? true : false; + }, + + hide : function () { + this.settings.postStepCallback(this.settings.$li.index(), + this.settings.$current_tip); + $('.joyride-modal-bg').hide(); + this.settings.$current_tip.hide(); + }, + + set_li : function (init) { + if (init) { + this.settings.$li = this.settings.$tip_content.eq(this.settings.startOffset); + this.set_next_tip(); + this.settings.$current_tip = this.settings.$next_tip; + } else { + this.settings.$li = this.settings.$li.next(); + this.set_next_tip(); + } + + this.set_target(); + }, + + set_next_tip : function () { + this.settings.$next_tip = $(".joyride-tip-guide[data-index='" + this.settings.$li.index() + "']"); + this.settings.$next_tip.data('closed', ''); + }, + + set_target : function () { + var cl = this.settings.$li.attr('data-class'), + id = this.settings.$li.attr('data-id'), + $sel = function () { + if (id) { + return $(document.getElementById(id)); + } else if (cl) { + return $('.' + cl).first(); + } else { + return $('body'); + } + }; + + this.settings.$target = $sel(); + }, + + scroll_to : function () { + var window_half, tipOffset; + + window_half = $(window).height() / 2; + tipOffset = Math.ceil(this.settings.$target.offset().top - window_half + this.outerHeight(this.settings.$next_tip)); + if (tipOffset > 0) { + this.scrollTo($('html, body'), tipOffset, this.settings.scrollSpeed); + } + }, + + paused : function () { + if (($.inArray((this.settings.$li.index() + 1), this.settings.pauseAfter) === -1)) { + return true; + } + + return false; + }, + + restart : function () { + this.hide(); + this.settings.$li = undefined; + this.show('init'); + }, + + pos_default : function (init) { + var half_fold = Math.ceil($(window).height() / 2), + tip_position = this.settings.$next_tip.offset(), + $nub = this.settings.$next_tip.find('.joyride-nub'), + nub_height = Math.ceil(this.outerHeight($nub) / 2), + toggle = init || false; + + // tip must not be "display: none" to calculate position + if (toggle) { + this.settings.$next_tip.css('visibility', 'hidden'); + this.settings.$next_tip.show(); + } + + if (!/body/i.test(this.settings.$target.selector)) { + + if (this.bottom()) { + this.settings.$next_tip.css({ + top: (this.settings.$target.offset().top + nub_height + this.outerHeight(this.settings.$target)), + left: this.settings.$target.offset().left}); + + this.nub_position($nub, this.settings.tipSettings.nubPosition, 'top'); + + } else if (this.top()) { + + this.settings.$next_tip.css({ + top: (this.settings.$target.offset().top - this.outerHeight(this.settings.$next_tip) - nub_height), + left: this.settings.$target.offset().left}); + + this.nub_position($nub, this.settings.tipSettings.nubPosition, 'bottom'); + + } else if (this.right()) { + + this.settings.$next_tip.css({ + top: this.settings.$target.offset().top, + left: (this.outerWidth(this.settings.$target) + this.settings.$target.offset().left)}); + + this.nub_position($nub, this.settings.tipSettings.nubPosition, 'left'); + + } else if (this.left()) { + + this.settings.$next_tip.css({ + top: this.settings.$target.offset().top, + left: (this.settings.$target.offset().left - this.outerWidth(this.settings.$next_tip) - nub_height)}); + + this.nub_position($nub, this.settings.tipSettings.nubPosition, 'right'); + + } + + if (!this.visible(this.corners(this.settings.$next_tip)) && this.settings.attempts < this.settings.tipSettings.tipLocationPattern.length) { + + $nub.removeClass('bottom') + .removeClass('top') + .removeClass('right') + .removeClass('left'); + + this.settings.tipSettings.tipLocation = this.settings.tipSettings.tipLocationPattern[this.settings.attempts]; + + this.settings.attempts++; + + this.pos_default(true); + + } + + } else if (this.settings.$li.length) { + + this.pos_modal($nub); + + } + + if (toggle) { + this.settings.$next_tip.hide(); + this.settings.$next_tip.css('visibility', 'visible'); + } + + }, + + pos_phone : function (init) { + var tip_height = this.outerHeight(this.settings.$next_tip), + tip_offset = this.settings.$next_tip.offset(), + target_height = this.outerHeight(this.settings.$target), + $nub = $('.joyride-nub', this.settings.$next_tip), + nub_height = Math.ceil(this.outerHeight($nub) / 2), + toggle = init || false; + + $nub.removeClass('bottom') + .removeClass('top') + .removeClass('right') + .removeClass('left'); + + if (toggle) { + this.settings.$next_tip.css('visibility', 'hidden'); + this.settings.$next_tip.show(); + } + + if (!/body/i.test(this.settings.$target.selector)) { + + if (this.top()) { + + this.settings.$next_tip.offset({top: this.settings.$target.offset().top - tip_height - nub_height}); + $nub.addClass('bottom'); + + } else { + + this.settings.$next_tip.offset({top: this.settings.$target.offset().top + target_height + nub_height}); + $nub.addClass('top'); + + } + + } else if (this.settings.$li.length) { + this.pos_modal($nub); + } + + if (toggle) { + this.settings.$next_tip.hide(); + this.settings.$next_tip.css('visibility', 'visible'); + } + }, + + pos_modal : function ($nub) { + this.center(); + $nub.hide(); + if (!this.settings.$next_tip.data('closed')) { + if ($('.joyride-modal-bg').length < 1) { + $('body').append('
    ').show(); + } + + if (/pop/i.test(this.settings.tipAnimation)) { + $('.joyride-modal-bg').show(); + } else { + $('.joyride-modal-bg').fadeIn(this.settings.tipAnimationFadeSpeed); + } + } + }, + + center : function () { + var $w = $(window); + + this.settings.$next_tip.css({ + top : ((($w.height() - this.outerHeight(this.settings.$next_tip)) / 2) + $w.scrollTop()), + left : ((($w.width() - this.outerWidth(this.settings.$next_tip)) / 2) + this.scrollLeft($w)) + }); + + return true; + }, + + bottom : function () { + return /bottom/i.test(this.settings.tipSettings.tipLocation); + }, + + top : function () { + return /top/i.test(this.settings.tipSettings.tipLocation); + }, + + right : function () { + return /right/i.test(this.settings.tipSettings.tipLocation); + }, + + left : function () { + return /left/i.test(this.settings.tipSettings.tipLocation); + }, + + corners : function (el) { + var w = $(window), + right = w.width() + this.scrollLeft(w), + bottom = w.width() + w.scrollTop(); + + return [ + el.offset().top <= w.scrollTop(), + right <= el.offset().left + this.outerWidth(el), + bottom <= el.offset().top + this.outerHeight(el), + this.scrollLeft(w) >= el.offset().left + ]; + }, + + visible : function (hidden_corners) { + var i = hidden_corners.length; + + while (i--) { + if (hidden_corners[i]) return false; + } + + return true; + }, + + nub_position : function (nub, pos, def) { + if (pos === 'auto') { + nub.addClass(def); + } else { + nub.addClass(pos); + } + }, + + startTimer : function () { + if (this.settings.$li.length) { + this.settings.automate = setTimeout(function () { + this.hide(); + this.show(); + this.startTimer(); + }.bind(this), this.settings.timer); + } else { + clearTimeout(this.settings.automate); + } + }, + + end : function () { + if (this.settings.cookieMonster) { + $.cookie(this.settings.cookieName, 'ridden', { expires: this.settings.cookieExpires, domain: this.settings.cookieDomain }); + } + + if (this.settings.timer > 0) { + clearTimeout(this.settings.automate); + } + + this.settings.$next_tip.data('closed', true); + + $('.joyride-modal-bg').hide(); + this.settings.$current_tip.hide(); + this.settings.postStepCallback(this.settings.$li.index(), this.settings.$current_tip); + this.settings.postRideCallback(this.settings.$li.index(), this.settings.$current_tip); + }, + + outerHTML : function (el) { + // support FireFox < 11 + return el.outerHTML || new XMLSerializer().serializeToString(el); + }, + + off : function () { + $(this.scope).off('.joyride'); + $(window).off('.joyride'); + $('.joyride-close-tip, .joyride-next-tip, .joyride-modal-bg').off('.joyride'); + $('.joyride-tip-guide, .joyride-modal-bg').remove(); + clearTimeout(this.settings.automate); + this.settings = {}; + } + }; +}(Foundation.zj, this, this.document)); \ No newline at end of file diff --git a/wp-content/themes/gf2013/javascripts/foundation/foundation.js b/wp-content/themes/gf2013/javascripts/foundation/foundation.js new file mode 100644 index 0000000..8de70e3 --- /dev/null +++ b/wp-content/themes/gf2013/javascripts/foundation/foundation.js @@ -0,0 +1,372 @@ +/* + * Foundation Responsive Library + * http://foundation.zurb.com + * Copyright 2013, ZURB + * Free to use under the MIT license. + * http://www.opensource.org/licenses/mit-license.php +*/ + +/*jslint unparam: true, browser: true, indent: 2 */ + +// Accommodate running jQuery or Zepto in noConflict() mode by +// using an anonymous function to redefine the $ shorthand name. +// See http://docs.jquery.com/Using_jQuery_with_Other_Libraries +// and http://zeptojs.com/ +var libFuncName = null; +if (typeof jQuery === "undefined" && + typeof Zepto === "undefined" && + typeof $ === "function") { + libFuncName = $; +} else if (typeof jQuery === "function") { + libFuncName = jQuery; +} else if (typeof Zepto === "function") { + libFuncName = Zepto; +} else { + throw new TypeError(); +} + +(function ($) { + +(function () { + // add dusty browser stuff + if (!Array.prototype.filter) { + Array.prototype.filter = function(fun /*, thisp */) { + "use strict"; + + if (this == null) { + throw new TypeError(); + } + + var t = Object(this), + len = t.length >>> 0; + if (typeof fun != "function") { + try { + throw new TypeError(); + } catch (e) { + return; + } + } + + var res = [], + thisp = arguments[1]; + for (var i = 0; i < len; i++) { + if (i in t) { + var val = t[i]; // in case fun mutates this + if (fun && fun.call(thisp, val, i, t)) { + res.push(val); + } + } + } + + return res; + }; + + if (!Function.prototype.bind) { + Function.prototype.bind = function (oThis) { + if (typeof this !== "function") { + // closest thing possible to the ECMAScript 5 internal IsCallable function + throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); + } + + var aArgs = Array.prototype.slice.call(arguments, 1), + fToBind = this, + fNOP = function () {}, + fBound = function () { + return fToBind.apply(this instanceof fNOP && oThis + ? this + : oThis, + aArgs.concat(Array.prototype.slice.call(arguments))); + }; + + fNOP.prototype = this.prototype; + fBound.prototype = new fNOP(); + + return fBound; + }; + } + } + + // fake stop() for zepto. + $.fn.stop = $.fn.stop || function() { + return this; + }; +}()); + +;(function (window, document, undefined) { + 'use strict'; + + window.Foundation = { + name : 'Foundation', + + version : '4.0.8', + + // global Foundation cache object + cache : {}, + + init : function (scope, libraries, method, options, response, /* internal */ nc) { + var library_arr, + args = [scope, method, options, response], + responses = [], + nc = nc || false; + + // disable library error catching, + // used for development only + if (nc) this.nc = nc; + + // set foundation global scope + this.scope = scope || this.scope; + + if (libraries && typeof libraries === 'string') { + if (/off/i.test(libraries)) return this.off(); + + library_arr = libraries.split(' '); + + if (library_arr.length > 0) { + for (var i = library_arr.length - 1; i >= 0; i--) { + responses.push(this.init_lib(library_arr[i], args)); + } + } + } else { + for (var lib in this.libs) { + responses.push(this.init_lib(lib, args)); + } + } + + // if first argument is callback, add to args + if (typeof libraries === 'function') { + args.unshift(libraries); + } + + return this.response_obj(responses, args); + }, + + response_obj : function (response_arr, args) { + for (var callback in args) { + if (typeof args[callback] === 'function') { + return args[callback]({ + errors: response_arr.filter(function (s) { + if (typeof s === 'string') return s; + }) + }); + } + } + + return response_arr; + }, + + init_lib : function (lib, args) { + return this.trap(function () { + if (this.libs.hasOwnProperty(lib)) { + this.patch(this.libs[lib]); + return this.libs[lib].init.apply(this.libs[lib], args); + } + }.bind(this), lib); + }, + + trap : function (fun, lib) { + if (!this.nc) { + try { + return fun(); + } catch (e) { + return this.error({name: lib, message: 'could not be initialized', more: e.name + ' ' + e.message}); + } + } + + return fun(); + }, + + patch : function (lib) { + this.fix_outer(lib); + }, + + inherit : function (scope, methods) { + var methods_arr = methods.split(' '); + + for (var i = methods_arr.length - 1; i >= 0; i--) { + if (this.lib_methods.hasOwnProperty(methods_arr[i])) { + this.libs[scope.name][methods_arr[i]] = this.lib_methods[methods_arr[i]]; + } + } + }, + + random_str : function (length) { + var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split(''); + + if (!length) { + length = Math.floor(Math.random() * chars.length); + } + + var str = ''; + for (var i = 0; i < length; i++) { + str += chars[Math.floor(Math.random() * chars.length)]; + } + return str; + }, + + libs : {}, + + // methods that can be inherited in libraries + lib_methods : { + set_data : function (node, data) { + // this.name references the name of the library calling this method + var id = [this.name,+new Date(),Foundation.random_str(5)].join('-'); + + Foundation.cache[id] = data; + node.attr('data-' + this.name + '-id', id); + return data; + }, + + get_data : function (node) { + return Foundation.cache[node.attr('data-' + this.name + '-id')]; + }, + + remove_data : function (node) { + if (node) { + delete Foundation.cache[node.attr('data-' + this.name + '-id')]; + node.attr('data-' + this.name + '-id', ''); + } else { + $('[data-' + this.name + '-id]').each(function () { + delete Foundation.cache[$(this).attr('data-' + this.name + '-id')]; + $(this).attr('data-' + this.name + '-id', ''); + }); + } + }, + + throttle : function(fun, delay) { + var timer = null; + return function () { + var context = this, args = arguments; + clearTimeout(timer); + timer = setTimeout(function () { + fun.apply(context, args); + }, delay); + }; + }, + + // parses data-options attribute on nodes and turns + // them into an object + data_options : function (el) { + var opts = {}, ii, p, + opts_arr = (el.attr('data-options') || ':').split(';'), + opts_len = opts_arr.length; + + function isNumber (o) { + return ! isNaN (o-0) && o !== null && o !== "" && o !== false && o !== true; + } + + function trim(str) { + if (typeof str === 'string') return $.trim(str); + return str; + } + + // parse options + for (ii = opts_len - 1; ii >= 0; ii--) { + p = opts_arr[ii].split(':'); + + if (/true/i.test(p[1])) p[1] = true; + if (/false/i.test(p[1])) p[1] = false; + if (isNumber(p[1])) p[1] = parseInt(p[1], 10); + + if (p.length === 2 && p[0].length > 0) { + opts[trim(p[0])] = trim(p[1]); + } + } + + return opts; + }, + + delay : function (fun, delay) { + return setTimeout(fun, delay); + }, + + // animated scrolling + scrollTo : function (el, to, duration) { + if (duration < 0) return; + var difference = to - $(window).scrollTop(); + var perTick = difference / duration * 10; + + this.scrollToTimerCache = setTimeout(function() { + if (!isNaN(parseInt(perTick, 10))) { + window.scrollTo(0, $(window).scrollTop() + perTick); + this.scrollTo(el, to, duration - 10); + } + }.bind(this), 10); + }, + + // not supported in core Zepto + scrollLeft : function (el) { + if (!el.length) return; + return ('scrollLeft' in el[0]) ? el[0].scrollLeft : el[0].pageXOffset; + }, + + // test for empty object or array + empty : function (obj) { + if (obj.length && obj.length > 0) return false; + if (obj.length && obj.length === 0) return true; + + for (var key in obj) { + if (hasOwnProperty.call(obj, key)) return false; + } + + return true; + } + }, + + fix_outer : function (lib) { + lib.outerHeight = function (el, bool) { + if (typeof Zepto === 'function') { + return el.height(); + } + + if (typeof bool !== 'undefined') { + return el.outerHeight(bool); + } + + return el.outerHeight(); + }; + + lib.outerWidth = function (el) { + if (typeof Zepto === 'function') { + return el.width(); + } + + if (typeof bool !== 'undefined') { + return el.outerWidth(bool); + } + + return el.outerWidth(); + }; + }, + + error : function (error) { + return error.name + ' ' + error.message + '; ' + error.more; + }, + + // remove all foundation events. + off: function () { + $(this.scope).off('.fndtn'); + $(window).off('.fndtn'); + return true; + }, + + zj : function () { + try { + return Zepto; + } catch (e) { + return jQuery; + } + }() + }, + + $.fn.foundation = function () { + var args = Array.prototype.slice.call(arguments, 0); + + return this.each(function () { + Foundation.init.apply(Foundation, [this].concat(args)); + return this; + }); + }; + +}(this, this.document)); + +})(libFuncName); diff --git a/wp-content/themes/gf2013/javascripts/foundation/foundation.magellan.js b/wp-content/themes/gf2013/javascripts/foundation/foundation.magellan.js new file mode 100644 index 0000000..60e2d09 --- /dev/null +++ b/wp-content/themes/gf2013/javascripts/foundation/foundation.magellan.js @@ -0,0 +1,130 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.magellan = { + name : 'magellan', + + version : '4.0.0', + + settings : { + activeClass: 'active' + }, + + init : function (scope, method, options) { + this.scope = scope || this.scope; + Foundation.inherit(this, 'data_options'); + + if (typeof method === 'object') { + $.extend(true, this.settings, method); + } + + if (typeof method != 'string') { + if (!this.settings.init) { + this.fixed_magellan = $("[data-magellan-expedition]"); + this.set_threshold(); + this.last_destination = $('[data-magellan-destination]').last(); + this.events(); + } + + return this.settings.init; + } else { + return this[method].call(this, options); + } + }, + + events : function () { + var self = this; + $(this.scope).on('arrival.fndtn.magellan', '[data-magellan-arrival]', function (e) { + var $destination = $(this), + $expedition = $destination.closest('[data-magellan-expedition]'), + activeClass = $expedition.attr('data-magellan-active-class') + || self.settings.activeClass; + + $destination + .closest('[data-magellan-expedition]') + .find('[data-magellan-arrival]') + .not($destination) + .removeClass(activeClass); + $destination.addClass(activeClass); + }); + + this.fixed_magellan + .on('update-position.fndtn.magellan', function(){ + var $el = $(this); + // $el.data("magellan-fixed-position",""); + //$el.data("magellan-top-offset", ""); + }) + .trigger('update-position'); + + $(window) + .on('resize.fndtn.magellan', function() { + this.fixed_magellan.trigger('update-position'); + }.bind(this)) + + .on('scroll.fndtn.magellan', function() { + var windowScrollTop = $(window).scrollTop(); + self.fixed_magellan.each(function() { + var $expedition = $(this); + if (typeof $expedition.data('magellan-top-offset') === 'undefined') { + $expedition.data('magellan-top-offset', $expedition.offset().top); + } + if (typeof $expedition.data('magellan-fixed-position') === 'undefined') { + $expedition.data('magellan-fixed-position', false) + } + var fixed_position = (windowScrollTop + self.settings.threshold) > $expedition.data("magellan-top-offset"); + var attr = $expedition.attr('data-magellan-top-offset'); + + if ($expedition.data("magellan-fixed-position") != fixed_position) { + $expedition.data("magellan-fixed-position", fixed_position); + if (fixed_position) { + $expedition.css({position:"fixed", top:0}); + } else { + $expedition.css({position:"", top:""}); + } + if (fixed_position && typeof attr != 'undefined' && attr != false) { + $expedition.css({position:"fixed", top:attr + "px"}); + } + } + }); + }); + + + if (this.last_destination.length > 0) { + $(window).on('scroll.fndtn.magellan', function (e) { + var windowScrollTop = $(window).scrollTop(), + scrolltopPlusHeight = windowScrollTop + $(window).height(), + lastDestinationTop = Math.ceil(self.last_destination.offset().top); + + $('[data-magellan-destination]').each(function () { + var $destination = $(this), + destination_name = $destination.attr('data-magellan-destination'), + topOffset = $destination.offset().top - windowScrollTop; + + if (topOffset <= self.settings.threshold) { + $("[data-magellan-arrival='" + destination_name + "']").trigger('arrival'); + } + // In large screens we may hit the bottom of the page and dont reach the top of the last magellan-destination, so lets force it + if (scrolltopPlusHeight >= $(self.scope).height() && lastDestinationTop > windowScrollTop && lastDestinationTop < scrolltopPlusHeight) { + $('[data-magellan-arrival]').last().trigger('arrival'); + } + }); + }); + } + + this.settings.init = true; + }, + + set_threshold : function () { + if (!this.settings.threshold) { + this.settings.threshold = (this.fixed_magellan.length > 0) ? + this.outerHeight(this.fixed_magellan, true) : 0; + } + }, + + off : function () { + $(this.scope).off('.fndtn.magellan'); + } + }; +}(Foundation.zj, this, this.document)); \ No newline at end of file diff --git a/wp-content/themes/gf2013/javascripts/foundation/foundation.orbit.js b/wp-content/themes/gf2013/javascripts/foundation/foundation.orbit.js new file mode 100644 index 0000000..ec3115e --- /dev/null +++ b/wp-content/themes/gf2013/javascripts/foundation/foundation.orbit.js @@ -0,0 +1,365 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs = Foundation.libs || {}; + + Foundation.libs.orbit = { + name: 'orbit', + + version: '4.0.0', + + settings: { + timer_speed: 10000, + animation_speed: 500, + bullets: true, + stack_on_small: true, + container_class: 'orbit-container', + stack_on_small_class: 'orbit-stack-on-small', + next_class: 'orbit-next', + prev_class: 'orbit-prev', + timer_container_class: 'orbit-timer', + timer_paused_class: 'paused', + timer_progress_class: 'orbit-progress', + slides_container_class: 'orbit-slides-container', + bullets_container_class: 'orbit-bullets', + bullets_active_class: 'active', + slide_number_class: 'orbit-slide-number', + caption_class: 'orbit-caption', + active_slide_class: 'active', + orbit_transition_class: 'orbit-transitioning' + }, + + init: function (scope, method, options) { + var self = this; + Foundation.inherit(self, 'data_options'); + + if (typeof method === 'object') { + $.extend(true, self.settings, method); + } + + $('[data-orbit]', scope).each(function(idx, el) { + var scoped_self = $.extend(true, {}, self); + scoped_self._init(idx, el); + }); + }, + + _container_html: function() { + var self = this; + return '
    '; + }, + + _bullets_container_html: function($slides) { + var self = this, + $list = $('
      '); + $slides.each(function(idx, slide) { + var $item = $('
    1. '); + if (idx === 0) { + $item.addClass(self.settings.bullets_active_class); + } + $list.append($item); + }); + return $list; + }, + + _slide_number_html: function(slide_number, total_slides) { + var self = this, + $container = $('
      '); + $container.append('' + slide_number + ' of ' + total_slides + ''); + return $container; + }, + + _timer_html: function() { + var self = this; + if (typeof self.settings.timer_speed === 'number' && self.settings.timer_speed > 0) { + return '
      '; + } else { + return ''; + } + }, + + _next_html: function() { + var self = this; + return 'Next '; + }, + + _prev_html: function() { + var self = this; + return 'Prev '; + }, + + _init: function (idx, slider) { + var self = this, + $slides_container = $(slider), + $container = $slides_container.wrap(self._container_html()).parent(), + $slides = $slides_container.children(); + + $.extend(true, self.settings, self.data_options($slides_container)); + + $container.append(self._prev_html()); + $container.append(self._next_html()); + $slides_container.addClass(self.settings.slides_container_class); + if (self.settings.stack_on_small) { + $container.addClass(self.settings.stack_on_small_class); + } + $container.append(self._slide_number_html(1, $slides.length)); + $container.append(self._timer_html()); + if (self.settings.bullets) { + $container.after(self._bullets_container_html($slides)); + } + // To better support the "sliding" effect it's easier + // if we just clone the first and last slides + $slides_container.append($slides.first().clone().attr('data-orbit-slide','')); + $slides_container.prepend($slides.last().clone().attr('data-orbit-slide','')); + // Make the first "real" slide active + $slides_container.css('marginLeft', '-100%'); + $slides.first().addClass(self.settings.active_slide_class); + + self._init_events($slides_container); + self._init_dimensions($slides_container); + self._start_timer($slides_container); + }, + + _init_events: function ($slides_container) { + var self = this, + $container = $slides_container.parent(); + + $(window) + .on('load.fndtn.orbit', function() { + $slides_container.height(''); + $slides_container.height($slides_container.height($container.height())); + $slides_container.trigger('orbit:ready'); + }) + .on('resize.fndtn.orbit', function() { + $slides_container.height(''); + $slides_container.height($slides_container.height($container.height())); + }); + + $(document).on('click.fndtn.orbit', '[data-orbit-link]', function(e) { + e.preventDefault(); + var id = $(e.currentTarget).attr('data-orbit-link'), + $slide = $slides_container.find('[data-orbit-slide=' + id + ']').first(); + + if ($slide.length === 1) { + self._reset_timer($slides_container, true); + self._goto($slides_container, $slide.index(), function() {}); + } + }); + + $container.siblings('.' + self.settings.bullets_container_class) + .on('click.fndtn.orbit', '[data-orbit-slide-number]', function(e) { + e.preventDefault(); + self._reset_timer($slides_container, true); + self._goto($slides_container, $(e.currentTarget).data('orbit-slide-number'),function() {}); + }); + + $container + .on('orbit:after-slide-change.fndtn.orbit', function(e, orbit) { + var $slide_number = $container.find('.' + self.settings.slide_number_class); + + if ($slide_number.length === 1) { + $slide_number.replaceWith(self._slide_number_html(orbit.slide_number, orbit.total_slides)); + } + }) + .on('orbit:next-slide.fndtn.orbit click.fndtn.orbit', '.' + self.settings.next_class, function(e) { + e.preventDefault(); + self._reset_timer($slides_container, true); + self._goto($slides_container, 'next', function() {}); + }) + .on('orbit:prev-slide.fndtn.orbit click.fndtn.orbit', '.' + self.settings.prev_class, function(e) { + e.preventDefault(); + self._reset_timer($slides_container, true); + self._goto($slides_container, 'prev', function() {}); + }) + .on('orbit:toggle-play-pause.fndtn.orbit click.fndtn.orbit touchstart.fndtn.orbit', '.' + self.settings.timer_container_class, function(e) { + e.preventDefault(); + var $timer = $(e.currentTarget).toggleClass(self.settings.timer_paused_class), + $slides_container = $timer.closest('.' + self.settings.container_class) + .find('.' + self.settings.slides_container_class); + + if ($timer.hasClass(self.settings.timer_paused_class)) { + self._stop_timer($slides_container); + } else { + self._start_timer($slides_container); + } + }) + .on('touchstart.fndtn.orbit', function(e) { + if (!e.touches) { e = e.originalEvent; } + var data = { + start_page_x: e.touches[0].pageX, + start_page_y: e.touches[0].pageY, + start_time: (new Date()).getTime(), + delta_x: 0, + is_scrolling: undefined + }; + $container.data('swipe-transition', data); + e.stopPropagation(); + }) + .on('touchmove.fndtn.orbit', function(e) { + if (!e.touches) { e = e.originalEvent; } + // Ignore pinch/zoom events + if(e.touches.length > 1 || e.scale && e.scale !== 1) return; + + var data = $container.data('swipe-transition'); + if (typeof data === 'undefined') { + data = {}; + } + + data.delta_x = e.touches[0].pageX - data.start_page_x; + + if ( typeof data.is_scrolling === 'undefined') { + data.is_scrolling = !!( data.is_scrolling || Math.abs(data.delta_x) < Math.abs(e.touches[0].pageY - data.start_page_y) ); + } + + if (!data.is_scrolling && !data.active) { + e.preventDefault(); + self._stop_timer($slides_container); + var direction = (data.delta_x < 0) ? 'next' : 'prev'; + data.active = true; + self._goto($slides_container, direction, function() {}); + } + }) + .on('touchend.fndtn.orbit', function(e) { + $container.data('swipe-transition', {}); + e.stopPropagation(); + }); + }, + + _init_dimensions: function ($slides_container) { + var $container = $slides_container.parent(), + $slides = $slides_container.children(); + + $slides_container.css('width', $slides.length * 100 + '%'); + $slides.css('width', 100 / $slides.length + '%'); + $slides_container.height($container.height()); + $slides_container.css('width', $slides.length * 100 + '%'); + }, + + _start_timer: function ($slides_container) { + var self = this, + $container = $slides_container.parent(); + + var callback = function() { + self._reset_timer($slides_container, false); + self._goto($slides_container, 'next', function() { + self._start_timer($slides_container); + }); + }; + + var $timer = $container.find('.' + self.settings.timer_container_class), + $progress = $timer.find('.' + self.settings.timer_progress_class), + progress_pct = ($progress.width() / $timer.width()), + delay = self.settings.timer_speed - (progress_pct * self.settings.timer_speed); + + $progress.animate({'width': '100%'}, delay, 'linear', callback); + $slides_container.trigger('orbit:timer-started'); + }, + + _stop_timer: function ($slides_container) { + var self = this, + $container = $slides_container.parent(), + $timer = $container.find('.' + self.settings.timer_container_class), + $progress = $timer.find('.' + self.settings.timer_progress_class), + progress_pct = $progress.width() / $timer.width() + self._rebuild_timer($container, progress_pct * 100 + '%'); + // $progress.stop(); + $slides_container.trigger('orbit:timer-stopped'); + $timer = $container.find('.' + self.settings.timer_container_class); + $timer.addClass(self.settings.timer_paused_class); + }, + + _reset_timer: function($slides_container, is_paused) { + var self = this, + $container = $slides_container.parent(); + self._rebuild_timer($container, '0%'); + if (typeof is_paused === 'boolean' && is_paused) { + var $timer = $container.find('.' + self.settings.timer_container_class); + $timer.addClass(self.settings.timer_paused_class); + } + }, + + _rebuild_timer: function ($container, width_pct) { + // Zepto is unable to stop animations since they + // are css-based. This is a workaround for that + // limitation, which rebuilds the dom element + // thus stopping the animation + var self = this, + $timer = $container.find('.' + self.settings.timer_container_class), + $new_timer = $(self._timer_html()), + $new_timer_progress = $new_timer.find('.' + self.settings.timer_progress_class); + + if (typeof Zepto === 'function') { + $timer.remove(); + $container.append($new_timer); + $new_timer_progress.css('width', width_pct); + } else if (typeof jQuery === 'function') { + var $progress = $timer.find('.' + self.settings.timer_progress_class); + $progress.css('width', width_pct); + $progress.stop(); + } + }, + + _goto: function($slides_container, index_or_direction, callback) { + var self = this, + $container = $slides_container.parent(), + $slides = $slides_container.children(), + $active_slide = $slides_container.find('.' + self.settings.active_slide_class), + active_index = $active_slide.index(); + + if ($container.hasClass(self.settings.orbit_transition_class)) { + return false; + } + + if (index_or_direction === 'prev') { + if (active_index === 0) { + active_index = $slides.length - 1; + } + else { + active_index--; + } + } + else if (index_or_direction === 'next') { + active_index = (active_index+1) % $slides.length; + } + else if (typeof index_or_direction === 'number') { + active_index = (index_or_direction % $slides.length); + } + if (active_index === ($slides.length - 1) && index_or_direction === 'next') { + $slides_container.css('marginLeft', '0%'); + active_index = 1; + } + else if (active_index === 0 && index_or_direction === 'prev') { + $slides_container.css('marginLeft', '-' + ($slides.length - 1) * 100 + '%'); + active_index = $slides.length - 2; + } + // Start transition, make next slide active + $container.addClass(self.settings.orbit_transition_class); + $active_slide.removeClass(self.settings.active_slide_class); + $($slides[active_index]).addClass(self.settings.active_slide_class); + // Make next bullet active + var $bullets = $container.siblings('.' + self.settings.bullets_container_class); + if ($bullets.length === 1) { + $bullets.children().removeClass(self.settings.bullets_active_class); + $($bullets.children()[active_index-1]).addClass(self.settings.bullets_active_class); + } + var new_margin_left = '-' + (active_index * 100) + '%'; + // Check to see if animation will occur, otherwise perform + // callbacks manually + $slides_container.trigger('orbit:before-slide-change'); + if ($slides_container.css('marginLeft') === new_margin_left) { + $container.removeClass(self.settings.orbit_transition_class); + $slides_container.trigger('orbit:after-slide-change', [{slide_number: active_index, total_slides: $slides_container.children().length - 2}]); + callback(); + } else { + $slides_container.animate({ + 'marginLeft' : new_margin_left + }, self.settings.animation_speed, 'linear', function() { + $container.removeClass(self.settings.orbit_transition_class); + $slides_container.trigger('orbit:after-slide-change', [{slide_number: active_index, total_slides: $slides_container.children().length - 2}]); + callback(); + }); + } + } + }; +}(Foundation.zj, this, this.document)); diff --git a/wp-content/themes/gf2013/javascripts/foundation/foundation.placeholder.js b/wp-content/themes/gf2013/javascripts/foundation/foundation.placeholder.js new file mode 100644 index 0000000..2de28a8 --- /dev/null +++ b/wp-content/themes/gf2013/javascripts/foundation/foundation.placeholder.js @@ -0,0 +1,159 @@ +/*! http://mths.be/placeholder v2.0.7 by @mathias + Modified to work with Zepto.js by ZURB +*/ +;(function(window, document, $) { + + var isInputSupported = 'placeholder' in document.createElement('input'), + isTextareaSupported = 'placeholder' in document.createElement('textarea'), + prototype = $.fn, + valHooks = $.valHooks, + hooks, + placeholder; + + if (isInputSupported && isTextareaSupported) { + + placeholder = prototype.placeholder = function() { + return this; + }; + + placeholder.input = placeholder.textarea = true; + + } else { + + placeholder = prototype.placeholder = function() { + var $this = this; + $this + .filter((isInputSupported ? 'textarea' : ':input') + '[placeholder]') + .not('.placeholder') + .bind({ + 'focus.placeholder': clearPlaceholder, + 'blur.placeholder': setPlaceholder + }) + .data('placeholder-enabled', true) + .trigger('blur.placeholder'); + return $this; + }; + + placeholder.input = isInputSupported; + placeholder.textarea = isTextareaSupported; + + hooks = { + 'get': function(element) { + var $element = $(element); + return $element.data('placeholder-enabled') && $element.hasClass('placeholder') ? '' : element.value; + }, + 'set': function(element, value) { + var $element = $(element); + if (!$element.data('placeholder-enabled')) { + return element.value = value; + } + if (value == '') { + element.value = value; + // Issue #56: Setting the placeholder causes problems if the element continues to have focus. + if (element != document.activeElement) { + // We can't use `triggerHandler` here because of dummy text/password inputs :( + setPlaceholder.call(element); + } + } else if ($element.hasClass('placeholder')) { + clearPlaceholder.call(element, true, value) || (element.value = value); + } else { + element.value = value; + } + // `set` can not return `undefined`; see http://jsapi.info/jquery/1.7.1/val#L2363 + return $element; + } + }; + + isInputSupported || (valHooks.input = hooks); + isTextareaSupported || (valHooks.textarea = hooks); + + $(function() { + // Look for forms + $(document).delegate('form', 'submit.placeholder', function() { + // Clear the placeholder values so they don't get submitted + var $inputs = $('.placeholder', this).each(clearPlaceholder); + setTimeout(function() { + $inputs.each(setPlaceholder); + }, 10); + }); + }); + + // Clear placeholder values upon page reload + $(window).bind('beforeunload.placeholder', function() { + $('.placeholder').each(function() { + this.value = ''; + }); + }); + + } + + function args(elem) { + // Return an object of element attributes + var newAttrs = {}, + rinlinejQuery = /^jQuery\d+$/; + $.each(elem.attributes, function(i, attr) { + if (attr.specified && !rinlinejQuery.test(attr.name)) { + newAttrs[attr.name] = attr.value; + } + }); + return newAttrs; + } + + function clearPlaceholder(event, value) { + var input = this, + $input = $(input); + if (input.value == $input.attr('placeholder') && $input.hasClass('placeholder')) { + if ($input.data('placeholder-password')) { + $input = $input.hide().next().show().attr('id', $input.removeAttr('id').data('placeholder-id')); + // If `clearPlaceholder` was called from `$.valHooks.input.set` + if (event === true) { + return $input[0].value = value; + } + $input.focus(); + } else { + input.value = ''; + $input.removeClass('placeholder'); + input == document.activeElement && input.select(); + } + } + } + + function setPlaceholder() { + var $replacement, + input = this, + $input = $(input), + $origInput = $input, + id = this.id; + if (input.value == '') { + if (input.type == 'password') { + if (!$input.data('placeholder-textinput')) { + try { + $replacement = $input.clone().attr({ 'type': 'text' }); + } catch(e) { + $replacement = $('').attr($.extend(args(this), { 'type': 'text' })); + } + $replacement + .removeAttr('name') + .data({ + 'placeholder-password': true, + 'placeholder-id': id + }) + .bind('focus.placeholder', clearPlaceholder); + $input + .data({ + 'placeholder-textinput': $replacement, + 'placeholder-id': id + }) + .before($replacement); + } + $input = $input.removeAttr('id').hide().prev().attr('id', id).show(); + // Note: `$input[0] != input` now! + } + $input.addClass('placeholder'); + $input[0].value = $input.attr('placeholder'); + } else { + $input.removeClass('placeholder'); + } + } + +}(this, document, Foundation.zj)); \ No newline at end of file diff --git a/wp-content/themes/gf2013/javascripts/foundation/foundation.reveal.js b/wp-content/themes/gf2013/javascripts/foundation/foundation.reveal.js new file mode 100644 index 0000000..907e97f --- /dev/null +++ b/wp-content/themes/gf2013/javascripts/foundation/foundation.reveal.js @@ -0,0 +1,270 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.reveal = { + name: 'reveal', + + version : '4.0.9', + + locked : false, + + settings : { + animation: 'fadeAndPop', + animationSpeed: 250, + closeOnBackgroundClick: true, + dismissModalClass: 'close-reveal-modal', + bgClass: 'reveal-modal-bg', + open: function(){}, + opened: function(){}, + close: function(){}, + closed: function(){}, + bg : $('.reveal-modal-bg'), + css : { + open : { + 'opacity': 0, + 'visibility': 'visible', + 'display' : 'block' + }, + close : { + 'opacity': 1, + 'visibility': 'hidden', + 'display': 'none' + } + } + }, + + init : function (scope, method, options) { + this.scope = scope || this.scope; + Foundation.inherit(this, 'data_options delay'); + + if (typeof method === 'object') { + $.extend(true, this.settings, method); + } + + if (typeof method != 'string') { + this.events(); + + return this.settings.init; + } else { + return this[method].call(this, options); + } + }, + + events : function () { + var self = this; + + $(this.scope) + .off('.fndtn.reveal') + .on('click.fndtn.reveal', '[data-reveal-id]', function (e) { + e.preventDefault(); + if (!self.locked) { + self.locked = true; + self.open.call(self, $(this)); + } + }) + .on('click.fndtn.reveal touchend.click.fndtn.reveal', this.close_targets(), function (e) { + e.preventDefault(); + if (!self.locked) { + self.locked = true; + self.close.call(self, $(this).closest('.reveal-modal')); + } + }) + .on('open.fndtn.reveal', '.reveal-modal', this.settings.open) + .on('opened.fndtn.reveal', '.reveal-modal', this.settings.opened) + .on('opened.fndtn.reveal', '.reveal-modal', this.open_video) + .on('close.fndtn.reveal', '.reveal-modal', this.settings.close) + .on('closed.fndtn.reveal', '.reveal-modal', this.settings.closed) + .on('closed.fndtn.reveal', '.reveal-modal', this.close_video); + + return true; + }, + + open : function (target) { + if (target) { + var modal = $('#' + target.data('reveal-id')); + } else { + var modal = $(this.scope); + } + + if (!modal.hasClass('open')) { + var open_modal = $('.reveal-modal.open'); + + if (typeof modal.data('css-top') === 'undefined') { + modal.data('css-top', parseInt(modal.css('top'), 10)) + .data('offset', this.cache_offset(modal)); + } + + modal.trigger('open'); + + if (open_modal.length < 1) { + this.toggle_bg(modal); + } + this.hide(open_modal, this.settings.css.open); + this.show(modal, this.settings.css.open); + } + }, + + close : function (modal) { + + var modal = modal || $(this.scope), + open_modals = $('.reveal-modal.open'); + + if (open_modals.length > 0) { + this.locked = true; + modal.trigger('close'); + this.toggle_bg(modal); + this.hide(open_modals, this.settings.css.close); + } + }, + + close_targets : function () { + var base = '.' + this.settings.dismissModalClass; + + if (this.settings.closeOnBackgroundClick) { + return base + ', .' + this.settings.bgClass; + } + + return base; + }, + + toggle_bg : function (modal) { + if ($('.reveal-modal-bg').length === 0) { + this.settings.bg = $('
      ', {'class': this.settings.bgClass}) + .insertAfter(modal); + } + + if (this.settings.bg.filter(':visible').length > 0) { + this.hide(this.settings.bg); + } else { + this.show(this.settings.bg); + } + }, + + show : function (el, css) { + // is modal + if (css) { + if (/pop/i.test(this.settings.animation)) { + css.top = $(window).scrollTop() - el.data('offset') + 'px'; + var end_css = { + top: $(window).scrollTop() + el.data('css-top') + 'px', + opacity: 1 + } + + return this.delay(function () { + return el + .css(css) + .animate(end_css, this.settings.animationSpeed, 'linear', function () { + this.locked = false; + el.trigger('opened'); + }.bind(this)) + .addClass('open'); + }.bind(this), this.settings.animationSpeed / 2); + } + + if (/fade/i.test(this.settings.animation)) { + var end_css = {opacity: 1}; + + return this.delay(function () { + return el + .css(css) + .animate(end_css, this.settings.animationSpeed, 'linear', function () { + this.locked = false; + el.trigger('opened'); + }.bind(this)) + .addClass('open'); + }.bind(this), this.settings.animationSpeed / 2); + } + + return el.css(css).show().css({opacity: 1}).addClass('open').trigger('opened'); + } + + // should we animate the background? + if (/fade/i.test(this.settings.animation)) { + return el.fadeIn(this.settings.animationSpeed / 2); + } + + return el.show(); + }, + + hide : function (el, css) { + // is modal + if (css) { + if (/pop/i.test(this.settings.animation)) { + var end_css = { + top: - $(window).scrollTop() - el.data('offset') + 'px', + opacity: 0 + }; + + return this.delay(function () { + return el + .animate(end_css, this.settings.animationSpeed, 'linear', function () { + this.locked = false; + el.css(css).trigger('closed'); + }.bind(this)) + .removeClass('open'); + }.bind(this), this.settings.animationSpeed / 2); + } + + if (/fade/i.test(this.settings.animation)) { + var end_css = {opacity: 0}; + + return this.delay(function () { + return el + .animate(end_css, this.settings.animationSpeed, 'linear', function () { + this.locked = false; + el.css(css).trigger('closed'); + }.bind(this)) + .removeClass('open'); + }.bind(this), this.settings.animationSpeed / 2); + } + + return el.hide().css(css).removeClass('open').trigger('closed'); + } + + // should we animate the background? + if (/fade/i.test(this.settings.animation)) { + return el.fadeOut(this.settings.animationSpeed / 2); + } + + return el.hide(); + }, + + close_video : function (e) { + var video = $(this).find('.flex-video'), + iframe = video.find('iframe'); + + if (iframe.length > 0) { + iframe.attr('data-src', iframe[0].src); + iframe.attr('src', 'about:blank'); + video.fadeOut(100).hide(); + } + }, + + open_video : function (e) { + var video = $(this).find('.flex-video'), + iframe = video.find('iframe'); + + if (iframe.length > 0) { + var data_src = iframe.attr('data-src'); + if (typeof data_src === 'string') { + iframe[0].src = iframe.attr('data-src'); + } + video.show().fadeIn(100); + } + }, + + cache_offset : function (modal) { + var offset = modal.show().height() + parseInt(modal.css('top'), 10); + + modal.hide(); + + return offset; + }, + + off : function () { + $(this.scope).off('.fndtn.reveal'); + } + }; +}(Foundation.zj, this, this.document)); \ No newline at end of file diff --git a/wp-content/themes/gf2013/javascripts/foundation/foundation.section.js b/wp-content/themes/gf2013/javascripts/foundation/foundation.section.js new file mode 100644 index 0000000..7bffee6 --- /dev/null +++ b/wp-content/themes/gf2013/javascripts/foundation/foundation.section.js @@ -0,0 +1,272 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.section = { + name: 'section', + + version : '4.0.9', + + settings : { + deep_linking: false, + one_up: true, + callback: function (){} + }, + + init : function (scope, method, options) { + var self = this; + + this.scope = scope || this.scope; + Foundation.inherit(this, 'throttle data_options'); + + if (typeof method != 'string') { + this.set_active_from_hash(); + this.events(); + + return true; + } else { + return this[method].call(this, options); + } + }, + + events : function () { + var self = this; + + $(this.scope) + .on('click.fndtn.section', '[data-section] .title', function (e) { + var $this = $(this), + section = $this.closest('[data-section]'); + + self.toggle_active.call(this, e, self); + }); + + $(window) + .on('resize.fndtn.section', self.throttle(function () { + self.resize.call(this); + }, 30)) + .on('hashchange', function () { + if (!self.settings.toggled){ + self.set_active_from_hash(); + $(this).trigger('resize'); + } + }).trigger('resize'); + + $(document) + .on('click.fndtn.section', function (e) { + if ($(e.target).closest('.title').length < 1) { + $('[data-section="vertical-nav"], [data-section="horizontal-nav"]') + .find('section, .section') + .removeClass('active') + .attr('style', ''); + } + }); + + }, + + toggle_active : function (e, self) { + var $this = $(this), + section = $this.closest('section, .section'), + content = section.find('.content'), + parent = section.closest('[data-section]'), + self = Foundation.libs.section, + settings = $.extend({}, self.settings, self.data_options(parent)); + + self.settings.toggled = true; + + if (!settings.deep_linking && content.length > 0) { + e.preventDefault(); + } + + if (section.hasClass('active')) { + if (self.small(parent) + || self.is_vertical(parent) + || self.is_horizontal(parent) + || self.is_accordion(parent)) { + section + .removeClass('active') + .attr('style', ''); + } + } else { + var prev_active_section = null, + title_height = self.outerHeight(section.find('.title')); + + if (self.small(parent) || settings.one_up) { + prev_active_section = $this.closest('[data-section]').find('section.active, .section.active'); + + if (self.small(parent)) { + prev_active_section.attr('style', ''); + } else { + prev_active_section.attr('style', 'visibility: hidden; padding-top: '+title_height+'px;'); + } + } + + if (self.small(parent)) { + section.attr('style', ''); + } else { + section.css('padding-top', title_height); + } + + section.addClass('active'); + + if (prev_active_section !== null) { + prev_active_section.removeClass('active').attr('style', ''); + } + } + + setTimeout(function () { + self.settings.toggled = false; + }, 300); + + settings.callback(); + }, + + resize : function () { + var sections = $('[data-section]'), + self = Foundation.libs.section; + + sections.each(function() { + var $this = $(this), + active_section = $this.find('section.active, .section.active'), + settings = $.extend({}, self.settings, self.data_options($this)); + + if (active_section.length > 1) { + active_section + .not(':first') + .removeClass('active') + .attr('style', ''); + } else if (active_section.length < 1 + && !self.is_vertical($this) + && !self.is_horizontal($this) + && !self.is_accordion($this)) { + + var first = $this.find('section, .section').first(); + first.addClass('active'); + + if (self.small($this)) { + first.attr('style', ''); + } else { + first.css('padding-top', self.outerHeight(first.find('.title'))); + } + } + + if (self.small($this)) { + active_section.attr('style', ''); + } else { + active_section.css('padding-top', self.outerHeight(active_section.find('.title'))); + } + + self.position_titles($this); + + if (self.is_horizontal($this) && !self.small($this)) { + self.position_content($this); + } else { + self.position_content($this, false); + } + }); + }, + + is_vertical : function (el) { + return /vertical-nav/i.test(el.data('section')); + }, + + is_horizontal : function (el) { + return /horizontal-nav/i.test(el.data('section')); + }, + + is_accordion : function (el) { + return /accordion/i.test(el.data('section')); + }, + + is_tabs : function (el) { + return /tabs/i.test(el.data('section')); + }, + + set_active_from_hash : function () { + var hash = window.location.hash.substring(1), + sections = $('[data-section]'), + self = this; + + sections.each(function () { + var section = $(this), + settings = $.extend({}, self.settings, self.data_options(section)); + + if (hash.length > 0 && settings.deep_linking) { + section + .find('section, .section') + .attr('style', '') + .removeClass('active'); + section + .find('.content[data-slug="' + hash + '"]') + .closest('section, .section') + .addClass('active'); + } + }); + }, + + position_titles : function (section, off) { + var titles = section.find('.title'), + previous_width = 0, + self = this; + + if (typeof off === 'boolean') { + titles.attr('style', ''); + + } else { + titles.each(function () { + $(this).css('left', previous_width); + previous_width += self.outerWidth($(this)); + }); + } + }, + + position_content : function (section, off) { + var titles = section.find('.title'), + content = section.find('.content'), + self = this; + + if (typeof off === 'boolean') { + content.attr('style', ''); + section.attr('style', ''); + } else { + section.find('section, .section').each(function () { + var title = $(this).find('.title'), + content = $(this).find('.content'); + + content.css({left: title.position().left - 1, top: self.outerHeight(title) - 2}); + }); + + // temporary work around for Zepto outerheight calculation issues. + if (typeof Zepto === 'function') { + section.height(this.outerHeight(titles.first())); + } else { + section.height(this.outerHeight(titles.first()) - 2); + } + } + + }, + + small : function (el) { + var settings = $.extend({}, this.settings, this.data_options(el)); + if (this.is_tabs(el)) { + return false; + } + if (el && this.is_accordion(el)) { + return true; + } + if ($('html').hasClass('lt-ie9')) { + return true; + } + if ($('html').hasClass('ie8compat')) { + return true; + } + return $(this.scope).width() < 768; + }, + + off : function () { + $(this.scope).off('.fndtn.section'); + $(window).off('.fndtn.section'); + $(document).off('.fndtn.section') + } + }; +}(Foundation.zj, this, this.document)); \ No newline at end of file diff --git a/wp-content/themes/gf2013/javascripts/foundation/foundation.tooltips.js b/wp-content/themes/gf2013/javascripts/foundation/foundation.tooltips.js new file mode 100644 index 0000000..1696e2a --- /dev/null +++ b/wp-content/themes/gf2013/javascripts/foundation/foundation.tooltips.js @@ -0,0 +1,195 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.tooltips = { + name: 'tooltips', + + version : '4.0.2', + + settings : { + selector : '.has-tip', + additionalInheritableClasses : [], + tooltipClass : '.tooltip', + tipTemplate : function (selector, content) { + return '' + content + ''; + } + }, + + cache : {}, + + init : function (scope, method, options) { + var self = this; + this.scope = scope || this.scope; + + if (typeof method === 'object') { + $.extend(true, this.settings, method); + } + + if (typeof method != 'string') { + if (Modernizr.touch) { + $(this.scope) + .on('click.fndtn.tooltip touchstart.fndtn.tooltip touchend.fndtn.tooltip', + '[data-tooltip]', function (e) { + e.preventDefault(); + $(self.settings.tooltipClass).hide(); + self.showOrCreateTip($(this)); + }) + .on('click.fndtn.tooltip touchstart.fndtn.tooltip touchend.fndtn.tooltip', + this.settings.tooltipClass, function (e) { + e.preventDefault(); + $(this).fadeOut(150); + }); + } else { + $(this.scope) + .on('mouseenter.fndtn.tooltip mouseleave.fndtn.tooltip', + '[data-tooltip]', function (e) { + var $this = $(this); + + if (e.type === 'mouseover' || e.type === 'mouseenter') { + self.showOrCreateTip($this); + } else if (e.type === 'mouseout' || e.type === 'mouseleave') { + self.hide($this); + } + }); + } + + // $(this.scope).data('fndtn-tooltips', true); + } else { + return this[method].call(this, options); + } + + }, + + showOrCreateTip : function ($target) { + var $tip = this.getTip($target); + + if ($tip && $tip.length > 0) { + return this.show($target); + } + + return this.create($target); + }, + + getTip : function ($target) { + var selector = this.selector($target), + tip = null; + + if (selector) { + tip = $('span[data-selector=' + selector + ']' + this.settings.tooltipClass); + } + + return (typeof tip === 'object') ? tip : false; + }, + + selector : function ($target) { + var id = $target.attr('id'), + dataSelector = $target.attr('data-tooltip') || $target.attr('data-selector'); + + if ((id && id.length < 1 || !id) && typeof dataSelector != 'string') { + dataSelector = 'tooltip' + Math.random().toString(36).substring(7); + $target.attr('data-selector', dataSelector); + } + + return (id && id.length > 0) ? id : dataSelector; + }, + + create : function ($target) { + var $tip = $(this.settings.tipTemplate(this.selector($target), $('
      ').html($target.attr('title')).html())), + classes = this.inheritable_classes($target); + + $tip.addClass(classes).appendTo('body'); + if (Modernizr.touch) { + $tip.append('tap to close '); + } + $target.removeAttr('title').attr('title',''); + this.show($target); + }, + + reposition : function (target, tip, classes) { + var width, nub, nubHeight, nubWidth, column, objPos; + + tip.css('visibility', 'hidden').show(); + + width = target.data('width'); + nub = tip.children('.nub'); + nubHeight = this.outerHeight(nub); + nubWidth = this.outerHeight(nub); + + objPos = function (obj, top, right, bottom, left, width) { + return obj.css({ + 'top' : (top) ? top : 'auto', + 'bottom' : (bottom) ? bottom : 'auto', + 'left' : (left) ? left : 'auto', + 'right' : (right) ? right : 'auto', + 'width' : (width) ? width : 'auto' + }).end(); + }; + + objPos(tip, (target.offset().top + this.outerHeight(target) + 10), 'auto', 'auto', target.offset().left, width); + + if ($(window).width() < 767) { + objPos(tip, (target.offset().top + this.outerHeight(target) + 10), 'auto', 'auto', 12.5, $(this.scope).width()); + tip.addClass('tip-override'); + objPos(nub, -nubHeight, 'auto', 'auto', target.offset().left); + } else { + objPos(tip, (target.offset().top + this.outerHeight(target) + 10), 'auto', 'auto', target.offset().left, width); + tip.removeClass('tip-override'); + if (classes && classes.indexOf('tip-top') > -1) { + objPos(tip, (target.offset().top - this.outerHeight(tip)), 'auto', 'auto', target.offset().left, width) + .removeClass('tip-override'); + } else if (classes && classes.indexOf('tip-left') > -1) { + objPos(tip, (target.offset().top + (this.outerHeight(target) / 2) - nubHeight*2.5), 'auto', 'auto', (target.offset().left - this.outerWidth(tip) - nubHeight), width) + .removeClass('tip-override'); + } else if (classes && classes.indexOf('tip-right') > -1) { + objPos(tip, (target.offset().top + (this.outerHeight(target) / 2) - nubHeight*2.5), 'auto', 'auto', (target.offset().left + this.outerWidth(target) + nubHeight), width) + .removeClass('tip-override'); + } + } + + tip.css('visibility', 'visible').hide(); + }, + + inheritable_classes : function (target) { + var inheritables = ['tip-top', 'tip-left', 'tip-bottom', 'tip-right', 'noradius'].concat(this.settings.additionalInheritableClasses), + classes = target.attr('class'), + filtered = classes ? $.map(classes.split(' '), function (el, i) { + if ($.inArray(el, inheritables) !== -1) { + return el; + } + }).join(' ') : ''; + + return $.trim(filtered); + }, + + show : function ($target) { + var $tip = this.getTip($target); + + this.reposition($target, $tip, $target.attr('class')); + $tip.fadeIn(150); + }, + + hide : function ($target) { + var $tip = this.getTip($target); + + $tip.fadeOut(150); + }, + + // deprecate reload + reload : function () { + var $self = $(this); + + return ($self.data('fndtn-tooltips')) ? $self.foundationTooltips('destroy').foundationTooltips('init') : $self.foundationTooltips('init'); + }, + + off : function () { + $(this.scope).off('.fndtn.tooltip'); + $(this.settings.tooltipClass).each(function (i) { + $('[data-tooltip]').get(i).attr('title', $(this).text()); + }).remove(); + } + }; +}(Foundation.zj, this, this.document)); diff --git a/wp-content/themes/gf2013/javascripts/foundation/foundation.topbar.js b/wp-content/themes/gf2013/javascripts/foundation/foundation.topbar.js new file mode 100644 index 0000000..1d8db3d --- /dev/null +++ b/wp-content/themes/gf2013/javascripts/foundation/foundation.topbar.js @@ -0,0 +1,225 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.topbar = { + name : 'topbar', + + version : '4.0.0', + + settings : { + index : 0, + stickyClass : 'sticky', + custom_back_text: true, + back_text: 'Back', + init : false + }, + + init : function (scope, method, options) { + var self = this; + this.scope = scope || this.scope; + + if (typeof method === 'object') { + $.extend(true, this.settings, method); + } + + if (typeof method != 'string') { + + $('.top-bar').each(function () { + self.settings.$w = $(window); + self.settings.$topbar = $(this); + self.settings.$section = self.settings.$topbar.find('section'); + self.settings.$titlebar = self.settings.$topbar.children('ul').first(); + + + self.settings.$topbar.data('index', 0); + + var breakpoint = $("
      ").insertAfter(self.settings.$topbar); + self.settings.breakPoint = breakpoint.width(); + breakpoint.remove(); + + self.assemble(); + + if (self.settings.$topbar.parent().hasClass('fixed')) { + $('body').css('padding-top', self.outerHeight(self.settings.$topbar)); + } + }); + + if (!self.settings.init) { + this.events(); + } + + return this.settings.init; + } else { + // fire method + return this[method].call(this, options); + } + }, + + events : function () { + var self = this; + var offst = this.outerHeight($('.top-bar')); + $(this.scope) + .on('click.fndtn.topbar', '.top-bar .toggle-topbar', function (e) { + var topbar = $(this).closest('.top-bar'), + section = topbar.find('section, .section'), + titlebar = topbar.children('ul').first(); + + if (!topbar.data('height')) self.largestUL(); + + e.preventDefault(); + + if (self.breakpoint()) { + topbar + .toggleClass('expanded') + .css('min-height', ''); + } + + if (!topbar.hasClass('expanded')) { + section.css({left: '0%'}); + section.find('>.name').css({left: '100%'}); + section.find('li.moved').removeClass('moved'); + topbar.data('index', 0); + } + + if (topbar.parent().hasClass('fixed')) { + topbar.parent().removeClass('fixed'); + $('body').css('padding-top','0'); + window.scrollTo(0); + } else if (topbar.hasClass('fixed expanded')) { + topbar.parent().addClass('fixed'); + $('body').css('padding-top',offst); + } + + }) + + .on('click.fndtn.topbar', '.top-bar .has-dropdown>a', function (e) { + var topbar = $(this).closest('.top-bar'), + section = topbar.find('section, .section'), + titlebar = topbar.children('ul').first(); + + if (Modernizr.touch || self.breakpoint()) { + e.preventDefault(); + } + + if (self.breakpoint()) { + var $this = $(this), + $selectedLi = $this.closest('li'); + + topbar.data('index', topbar.data('index') + 1); + $selectedLi.addClass('moved'); + section.css({left: -(100 * topbar.data('index')) + '%'}); + section.find('>.name').css({left: 100 * topbar.data('index') + '%'}); + + $this.siblings('ul') + .height(topbar.data('height') + self.outerHeight(titlebar, true)); + topbar + .css('min-height', topbar.data('height') + self.outerHeight(titlebar, true) * 2) + } + }); + + $(window).on('resize.fndtn.topbar', function () { + if (!this.breakpoint()) { + $('.top-bar').css('min-height', ''); + } + }.bind(this)); + + // Go up a level on Click + $(this.scope).on('click.fndtn', '.top-bar .has-dropdown .back', function (e) { + e.preventDefault(); + + var $this = $(this), + topbar = $this.closest('.top-bar'), + section = topbar.find('section, .section'), + $movedLi = $this.closest('li.moved'), + $previousLevelUl = $movedLi.parent(); + + topbar.data('index', topbar.data('index') - 1); + section.css({left: -(100 * topbar.data('index')) + '%'}); + section.find('>.name').css({'left': 100 * topbar.data('index') + '%'}); + + if (topbar.data('index') === 0) { + topbar.css('min-height', 0); + } + + setTimeout(function () { + $movedLi.removeClass('moved'); + }, 300); + }); + }, + + breakpoint : function () { + return $(window).width() <= this.settings.breakPoint || $('html').hasClass('lt-ie9'); + }, + + assemble : function () { + var self = this; + // Pull element out of the DOM for manipulation + this.settings.$section.detach(); + + this.settings.$section.find('.has-dropdown>a').each(function () { + var $link = $(this), + $dropdown = $link.siblings('.dropdown'), + $titleLi = $('
    2. '); + + // Copy link to subnav + if (self.settings.custom_back_text == true) { + $titleLi.find('h5>a').html('« ' + self.settings.back_text); + } else { + $titleLi.find('h5>a').html('« ' + $link.html()); + } + $dropdown.prepend($titleLi); + }); + + // Put element back in the DOM + this.settings.$section.appendTo(this.settings.$topbar); + + // check for sticky + this.sticky(); + }, + + largestUL : function () { + var uls = this.settings.$topbar.find('section ul ul'), + largest = uls.first(), + total = 0, + self = this; + + uls.each(function () { + if ($(this).children('li').length > largest.children('li').length) { + largest = $(this); + } + }); + + largest.children('li').each(function () { total += self.outerHeight($(this), true); }); + + this.settings.$topbar.data('height', total); + }, + + sticky : function () { + var klass = '.' + this.settings.stickyClass; + if ($(klass).length > 0) { + var distance = $(klass).length ? $(klass).offset().top: 0, + $window = $(window); + var offst = this.outerHeight($('.top-bar')); + + $window.scroll(function() { + if ($window.scrollTop() >= (distance)) { + $(klass).addClass("fixed"); + $('body').css('padding-top',offst); + } + + else if ($window.scrollTop() < distance) { + $(klass).removeClass("fixed"); + $('body').css('padding-top','0'); + } + }); + } + }, + + off : function () { + $(this.scope).off('.fndtn.topbar'); + $(window).off('.fndtn.topbar'); + } + }; +}(Foundation.zj, this, this.document)); diff --git a/wp-content/themes/gf2013/javascripts/vendor/custom.modernizr.js b/wp-content/themes/gf2013/javascripts/vendor/custom.modernizr.js new file mode 100644 index 0000000..4eb3d06 --- /dev/null +++ b/wp-content/themes/gf2013/javascripts/vendor/custom.modernizr.js @@ -0,0 +1,4 @@ +/* Modernizr 2.6.2 (Custom Build) | MIT & BSD + * Build: http://modernizr.com/download/#-inlinesvg-svg-svgclippaths-touch-shiv-mq-cssclasses-teststyles-prefixes-ie8compat-load + */ +;window.Modernizr=function(a,b,c){function y(a){j.cssText=a}function z(a,b){return y(m.join(a+";")+(b||""))}function A(a,b){return typeof a===b}function B(a,b){return!!~(""+a).indexOf(b)}function C(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:A(f,"function")?f.bind(d||b):f}return!1}var d="2.6.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n={svg:"http://www.w3.org/2000/svg"},o={},p={},q={},r=[],s=r.slice,t,u=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["­",'"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},v=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return u("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},w={}.hasOwnProperty,x;!A(w,"undefined")&&!A(w.call,"undefined")?x=function(a,b){return w.call(a,b)}:x=function(a,b){return b in a&&A(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=s.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(s.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(s.call(arguments)))};return e}),o.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:u(["@media (",m.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},o.svg=function(){return!!b.createElementNS&&!!b.createElementNS(n.svg,"svg").createSVGRect},o.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==n.svg},o.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(l.call(b.createElementNS(n.svg,"clipPath")))};for(var D in o)x(o,D)&&(t=D.toLowerCase(),e[t]=o[D](),r.push((e[t]?"":"no-")+t));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)x(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},y(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=m,e.mq=v,e.testStyles=u,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+r.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f type pairs + class2type = {}, + + // List of deleted data cache ids, so we can reuse them + core_deletedIds = [], + + core_version = "1.9.1", + + // Save a reference to some core methods + core_concat = core_deletedIds.concat, + core_push = core_deletedIds.push, + core_slice = core_deletedIds.slice, + core_indexOf = core_deletedIds.indexOf, + core_toString = class2type.toString, + core_hasOwn = class2type.hasOwnProperty, + core_trim = core_version.trim, + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Used for matching numbers + core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, + + // Used for splitting on whitespace + core_rnotwhite = /\S+/g, + + // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }, + + // The ready event handler + completed = function( event ) { + + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + detach(); + jQuery.ready(); + } + }, + // Clean-up method for dom ready events + detach = function() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: core_version, + + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // scripts is true for back-compat + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return core_slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }, + + slice: function() { + return this.pushStack( core_slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: core_push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger("ready").off("ready"); + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + if ( obj == null ) { + return String( obj ); + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ core_toString.call(obj) ] || "object" : + typeof obj; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !core_hasOwn.call(obj, "constructor") && + !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // 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 || core_hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + // data: string of html + // context (optional): If specified, the fragment will be created in this context, defaults to document + // keepScripts (optional): If true, will include scripts passed in the html string + parseHTML: function( data, context, keepScripts ) { + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ); + if ( scripts ) { + jQuery( scripts ).remove(); + } + return jQuery.merge( [], parsed.childNodes ); + }, + + parseJSON: function( data ) { + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + if ( data === null ) { + return data; + } + + if ( typeof data === "string" ) { + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + if ( data ) { + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + } + } + } + + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Use native String.trim function wherever possible + trim: core_trim && !core_trim.call("\uFEFF\xA0") ? + function( text ) { + return text == null ? + "" : + core_trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + core_push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( core_indexOf ) { + return core_indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var l = second.length, + i = first.length, + j = 0; + + if ( typeof l === "number" ) { + for ( ; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var retVal, + ret = [], + i = 0, + length = elems.length; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return core_concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = core_slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + } +}); + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || type !== "function" && + ( length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj ); +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // First callback to fire (used internally by add and fireWith) + firingStart, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( list && ( !fired || stack ) ) { + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var action = tuple[ 0 ], + fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = core_slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; + if( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); +jQuery.support = (function() { + + var support, all, a, + input, select, fragment, + opt, eventName, isSupported, i, + div = document.createElement("div"); + + // Setup + div.setAttribute( "className", "t" ); + div.innerHTML = "
      a"; + + // Support tests won't run in some limited or non-browser environments + all = div.getElementsByTagName("*"); + a = div.getElementsByTagName("a")[ 0 ]; + if ( !all || !a || !all.length ) { + return {}; + } + + // First batch of tests + select = document.createElement("select"); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName("input")[ 0 ]; + + a.style.cssText = "top:1px;float:left;opacity:.5"; + support = { + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // 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.5/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) + checkOn: !!input.value, + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Tests for enctype support on a form (#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode + boxModel: document.compatMode === "CSS1Compat", + + // Will be defined later + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + boxSizingReliable: true, + pixelPosition: false + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<9 + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + // Check if we can trust getAttribute("value") + input = document.createElement("input"); + input.setAttribute( "value", "" ); + support.input = input.getAttribute( "value" ) === ""; + + // Check if an input maintains its value after becoming a radio + input.value = "t"; + input.setAttribute( "type", "radio" ); + support.radioValue = input.value === "t"; + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "checked", "t" ); + input.setAttribute( "name", "t" ); + + fragment = document.createDocumentFragment(); + fragment.appendChild( input ); + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Opera does not clone events (and typeof div.attachEvent === undefined). + // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() + if ( div.attachEvent ) { + div.attachEvent( "onclick", function() { + support.noCloneEvent = false; + }); + + div.cloneNode( true ).click(); + } + + // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event) + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php + for ( i in { submit: true, change: true, focusin: true }) { + div.setAttribute( eventName = "on" + i, "t" ); + + support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false; + } + + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, marginDiv, tds, + divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + container = document.createElement("div"); + container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; + + body.appendChild( container ).appendChild( div ); + + // Support: IE8 + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + div.innerHTML = "
      t
      "; + tds = div.getElementsByTagName("td"); + tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Support: IE8 + // Check if empty table cells still have offsetWidth/Height + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check box-sizing and margin behavior + div.innerHTML = ""; + div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; + support.boxSizing = ( div.offsetWidth === 4 ); + support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); + + // Use window.getComputedStyle because jsdom on node.js will break without it. + if ( window.getComputedStyle ) { + support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; + support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + marginDiv = div.appendChild( document.createElement("div") ); + marginDiv.style.cssText = div.style.cssText = divReset; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + + support.reliableMarginRight = + !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); + } + + if ( typeof div.style.zoom !== core_strundefined ) { + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.innerHTML = ""; + div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Support: IE6 + // Check if elements with layout shrink-wrap their children + div.style.display = "block"; + div.innerHTML = "
      "; + div.firstChild.style.width = "5px"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + + if ( support.inlineBlockNeedsLayout ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); + + // Null elements to avoid leaks in IE + container = div = tds = marginDiv = null; + }); + + // Null elements to avoid leaks in IE + all = select = fragment = opt = a = input = null; + + return support; +})(); + +var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, + rmultiDash = /([A-Z])/g; + +function internalData( elem, name, data, pvt /* Internal Use Only */ ){ + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var 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[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && 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[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + 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 ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( 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; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var i, l, thisCache, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } else { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + 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; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + } else if ( jQuery.support.deleteExpando || cache != cache.window ) { + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } +} + +jQuery.extend({ + cache: {}, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( core_version + 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 ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + // Do not set data on non-element because it will not be cleared (#8335). + if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) { + return false; + } + + var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; + + // nodes accept data unless otherwise specified; rejection can be conditional + return !noData || noData !== true && elem.getAttribute("classid") === noData; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var attrs, name, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attrs = elem.attributes; + for ( ; i < attrs.length; i++ ) { + name = attrs[i].name; + + if ( !name.indexOf( "data-" ) ) { + name = jQuery.camelCase( name.slice(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + // Try to fetch any internally stored data first + return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null; + } + + this.each(function() { + jQuery.data( this, key, value ); + }); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + hooks.cur = fn; + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var nodeHook, boolHook, + rclass = /[\t\r\n]/g, + rreturn = /\r/g, + rfocusable = /^(?:input|select|textarea|button|object)$/i, + rclickable = /^(?:a|area)$/i, + rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i, + ruseDefault = /^(?:checked|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + getSetInput = jQuery.support.input; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call( this, j, this.className ) ); + }); + } + + if ( proceed ) { + // The disjunction here is for better compressibility (see removeClass) + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + " " + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + elem.className = jQuery.trim( cur ); + + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = arguments.length === 0 || typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call( this, j, this.className ) ); + }); + } + if ( proceed ) { + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + "" + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + elem.className = value ? jQuery.trim( cur ) : ""; + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.match( core_rnotwhite ) || []; + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space separated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + // Toggle whole class name + } else if ( type === core_strundefined || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // If the element has a class name or if we're passed "false", + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var ret, hooks, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val, + self = jQuery(this); + + 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.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // 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, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // oldIE doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var 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; + } + } + }, + + attr: function( elem, name, value ) { + var hooks, notxml, ret, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === core_strundefined ) { + return jQuery.prop( elem, name, value ); + } + + 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 ); + + } else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, value + "" ); + return value; + } + + } else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + // In IE9+, Flash objects don't have .getAttribute (#12945) + // Support: IE9+ + if ( typeof elem.getAttribute !== core_strundefined ) { + ret = elem.getAttribute( name ); + } + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( core_rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( (name = attrNames[i++]) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( rboolean.test( name ) ) { + // Set corresponding property to false for boolean attributes + // Also clear defaultChecked/defaultSelected (if appropriate) for IE<8 + if ( !getSetAttribute && ruseDefault.test( name ) ) { + elem[ jQuery.camelCase( "default-" + name ) ] = + elem[ propName ] = false; + } else { + elem[ propName ] = false; + } + + // See #9699 for explanation of this approach (setting first, then removal) + } else { + jQuery.attr( elem, name, "" ); + } + + elem.removeAttribute( getSetAttribute ? name : propName ); + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to default in case type is set after value during creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + propFix: { + 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; + } + + 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; + } + } + } +}); + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + var + // Use .prop to determine if this attribute is understood as boolean + prop = jQuery.prop( elem, name ), + + // Fetch it accordingly + attr = typeof prop === "boolean" && elem.getAttribute( name ), + detail = typeof prop === "boolean" ? + + getSetInput && getSetAttribute ? + attr != null : + // oldIE fabricates an empty string for missing boolean attributes + // and conflates checked/selected into attroperties + ruseDefault.test( name ) ? + elem[ jQuery.camelCase( "default-" + name ) ] : + !!attr : + + // fetch an attribute node for properties not recognized as boolean + elem.getAttributeNode( name ); + + return detail && detail.value !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { + // IE<8 needs the *property* name + elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name ); + + // Use defaultChecked and defaultSelected for oldIE + } else { + elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true; + } + + return name; + } +}; + +// fix oldIE value attroperty +if ( !getSetInput || !getSetAttribute ) { + jQuery.attrHooks.value = { + get: function( elem, name ) { + var ret = elem.getAttributeNode( name ); + return jQuery.nodeName( elem, "input" ) ? + + // Ignore the value *property* by using defaultValue + elem.defaultValue : + + ret && ret.specified ? ret.value : undefined; + }, + set: function( elem, value, name ) { + if ( jQuery.nodeName( elem, "input" ) ) { + // Does not return so that setAttribute is also used + elem.defaultValue = value; + } else { + // Use nodeHook if defined (#1954); otherwise setAttribute is fine + return nodeHook && nodeHook.set( elem, value, name ); + } + } + }; +} + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret = elem.getAttributeNode( name ); + return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ? + ret.value : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + elem.setAttributeNode( + (ret = elem.ownerDocument.createAttribute( name )) + ); + } + + ret.value = value += ""; + + // Break association with cloned elements by also using setAttribute (#9646) + return name === "value" || value === elem.getAttribute( name ) ? + value : + undefined; + } + }; + + // 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 ) { + nodeHook.set( elem, value === "" ? false : value, name ); + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); +} + + +// Some attributes require a special call on IE +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !jQuery.support.hrefNormalized ) { + 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; + } + }); + }); + + // href/src property should get the full normalized URL (#10299/#12915) + jQuery.each([ "href", "src" ], function( i, name ) { + jQuery.propHooks[ name ] = { + get: function( elem ) { + return elem.getAttribute( name, 4 ); + } + }; + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Note: IE uppercases css property names, but if we were to .toLowerCase() + // .cssText, that would destroy case senstitivity in URL's, like in "background" + return elem.style.cssText || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = value + "" ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = 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 rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[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: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = core_hasOwn.call( event, "type" ) ? event.type : event, + namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + event.isTrigger = true; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( 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) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, ret, handleObj, matched, j, + handlerQueue = [], + args = core_slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var sel, handleObj, matches, i, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + for ( ; cur != this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Chrome 23+, Safari? + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + } + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== document.activeElement && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === document.activeElement && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + + beforeunload: { + postDispatch: function( event ) { + + // Even when returnValue equals to undefined Firefox will still show alert + if ( event.result !== undefined ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === core_strundefined ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if ( !e ) { + return; + } + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "submitBubbles" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "submitBubbles", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "changeBubbles", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var type, origFn; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://sizzlejs.com/ + */ +(function( window, undefined ) { + +var i, + cachedruns, + Expr, + getText, + isXML, + compile, + hasDuplicate, + outermostContext, + + // Local document vars + setDocument, + document, + docElem, + documentIsXML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + sortOrder, + + // Instance-specific data + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + support = {}, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + + // General-purpose constants + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + // Array methods + arr = [], + pop = arr.pop, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + operators = "([*^$|!~]?=)", + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments quoted, + // then not containing pseudos/brackets, + // then attribute selectors/non-parenthetical expressions, + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rsibling = /[\x20\t\r\n\f]*[+~]/, + + rnative = /^[^{]+\{\s*\[native code/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rescape = /'|\\/g, + rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g, + funescape = function( _, escaped ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + return high !== high ? + escaped : + // BMP codepoint + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +// Use a stripped-down slice if we can't use a native one +try { + slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType; +} catch ( e ) { + slice = function( i ) { + var elem, + results = []; + while ( (elem = this[i++]) ) { + results.push( elem ); + } + return results; + }; +} + +/** + * For feature detection + * @param {Function} fn The function to test for native support + */ +function isNative( fn ) { + return rnative.test( fn + "" ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var cache, + keys = []; + + return (cache = function( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key += " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key ] = value); + }); +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return fn( div ); + } catch (e) { + return false; + } finally { + // release memory in IE + div = null; + } +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( !documentIsXML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) { + push.apply( results, slice.call(context.getElementsByClassName( m ), 0) ); + return results; + } + } + + // QSA path + if ( support.qsa && !rbuggyQSA.test(selector) ) { + old = true; + nid = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && context.parentNode || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, slice.call( newContext.querySelectorAll( + newSelector + ), 0 ) ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Detect xml + * @param {Element|Object} elem An element or a document + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var doc = node ? node.ownerDocument || node : preferredDoc; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsXML = isXML( doc ); + + // Check if getElementsByTagName("*") returns only elements + support.tagNameNoComments = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if attributes should be retrieved by attribute nodes + support.attributes = assert(function( div ) { + div.innerHTML = ""; + var type = typeof div.lastChild.getAttribute("multiple"); + // IE8 returns a string for some attributes even when not present + return type !== "boolean" && type !== "string"; + }); + + // Check if getElementsByClassName can be trusted + support.getByClassName = assert(function( div ) { + // Opera can't find a second classname (in 9.6) + div.innerHTML = ""; + if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { + return false; + } + + // Safari 3.2 caches class attributes and doesn't catch changes + div.lastChild.className = "e"; + return div.getElementsByClassName("e").length === 2; + }); + + // Check if getElementById returns elements by name + // Check if getElementsByName privileges form controls or returns elements by ID + support.getByName = assert(function( div ) { + // Inject content + div.id = expando + 0; + div.innerHTML = "
      "; + docElem.insertBefore( div, docElem.firstChild ); + + // Test + var pass = doc.getElementsByName && + // buggy browsers will return fewer than the correct 2 + doc.getElementsByName( expando ).length === 2 + + // buggy browsers will return more than the correct 0 + doc.getElementsByName( expando + 0 ).length; + support.getIdNotName = !doc.getElementById( expando ); + + // Cleanup + docElem.removeChild( div ); + + return pass; + }); + + // IE6/7 return modified attributes + Expr.attrHandle = assert(function( div ) { + div.innerHTML = ""; + return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && + div.firstChild.getAttribute("href") === "#"; + }) ? + {} : + { + "href": function( elem ) { + return elem.getAttribute( "href", 2 ); + }, + "type": function( elem ) { + return elem.getAttribute("type"); + } + }; + + // ID find and filter + if ( support.getIdNotName ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && !documentIsXML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && !documentIsXML ) { + var m = context.getElementById( id ); + + return m ? + m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? + [m] : + undefined : + []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.tagNameNoComments ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Name + Expr.find["NAME"] = support.getByName && function( tag, context ) { + if ( typeof context.getElementsByName !== strundefined ) { + return context.getElementsByName( name ); + } + }; + + // Class + Expr.find["CLASS"] = support.getByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) { + return context.getElementsByClassName( className ); + } + }; + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21), + // no need to also add to buggyMatches since matches checks buggyQSA + // A support test would require too much code (would include document ready) + rbuggyQSA = [ ":focus" ]; + + if ( (support.qsa = isNative(doc.querySelectorAll)) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explictly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = ""; + + // IE8 - Some boolean attributes are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + + // Opera 10-12/IE8 - ^= $= *= and empty values + // Should not select anything + div.innerHTML = ""; + if ( div.querySelectorAll("[i^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector || + docElem.mozMatchesSelector || + docElem.webkitMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = new RegExp( rbuggyMatches.join("|") ); + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = isNative(docElem.contains) || docElem.compareDocumentPosition ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + // Document order sorting + sortOrder = docElem.compareDocumentPosition ? + function( a, b ) { + var compare; + + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) { + if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) { + if ( a === doc || contains( preferredDoc, a ) ) { + return -1; + } + if ( b === doc || contains( preferredDoc, b ) ) { + return 1; + } + return 0; + } + return compare & 4 ? -1 : 1; + } + + return a.compareDocumentPosition ? -1 : 1; + } : + function( a, b ) { + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Parentless nodes are either documents or disconnected + } else if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + // Always assume the presence of duplicates if sort doesn't + // pass them to our comparison function (as in Google Chrome). + hasDuplicate = false; + [0, 0].sort( sortOrder ); + support.detectDuplicates = hasDuplicate; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + // rbuggyQSA always contains :focus, so no need for an existence check + if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) { + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + var val; + + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + if ( !documentIsXML ) { + name = name.toLowerCase(); + } + if ( (val = Expr.attrHandle[ name ]) ) { + return val( elem ); + } + if ( documentIsXML || support.attributes ) { + return elem.getAttribute( name ); + } + return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ? + name : + val && val.specified ? val.value : null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +// Document sorting and removing duplicates +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + i = 1, + j = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( ; (elem = results[i]); i++ ) { + if ( elem === results[ i - 1 ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + return results; +}; + +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +// Returns a function to use in pseudos for input types +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +// Returns a function to use in pseudos for buttons +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +// Returns a function to use in pseudos for positionals +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + for ( ; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[4] ) { + match[2] = match[4]; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeName ) { + if ( nodeName === "*" ) { + return function() { return true; }; + } + + nodeName = nodeName.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifider + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsXML ? + elem.getAttribute("xml:lang") || elem.getAttribute("lang") : + elem.lang) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), + // not comment, processing instructions, or others + // Thanks to Diego Perini for the nodeName shortcut + // Greater than "@" means alpha characters (specifically not starting with "#" or "?") + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( tokens = [] ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push( { + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var data, cache, outerCache, + dirkey = dirruns + " " + doneName; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { + if ( (data = cache[1]) === true || data === cachedruns ) { + return data === true; + } + } else { + cache = outerCache[ dir ] = [ dirkey ]; + cache[1] = matcher( elem, context, xml ) || cachedruns; + if ( cache[1] === true ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + // A counter to specify which element is currently being matched + var matcherCachedRuns = 0, + bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, expandContext ) { + var elem, j, matcher, + setMatched = [], + matchedCount = 0, + i = "0", + unmatched = seed && [], + outermost = expandContext != null, + contextBackup = outermostContext, + // We must always have either seed elements or context + elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); + + if ( outermost ) { + outermostContext = context !== document && context; + cachedruns = matcherCachedRuns; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + for ( ; (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + cachedruns = ++matcherCachedRuns; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !group ) { + group = tokenize( selector ); + } + i = group.length; + while ( i-- ) { + cached = matcherFromTokens( group[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + } + return cached; +}; + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function select( selector, context, results, seed ) { + var i, tokens, token, type, find, + match = tokenize( selector ); + + if ( !seed ) { + // Try to minimize operations if there is only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && !documentIsXML && + Expr.relative[ tokens[1].type ] ) { + + context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0]; + if ( !context ) { + return results; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && context.parentNode || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, slice.call( seed, 0 ) ); + return results; + } + + break; + } + } + } + } + } + + // Compile and execute a filtering function + // Provide `match` to avoid retokenization if we modified the selector above + compile( selector, match )( + seed, + context, + documentIsXML, + results, + rsibling.test( selector ) + ); + return results; +} + +// Deprecated +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Easy API for creating new setFilters +function setFilters() {} +Expr.filters = setFilters.prototype = Expr.pseudos; +Expr.setFilters = new setFilters(); + +// Initialize with the default document +setDocument(); + +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})( window ); +var runtil = /Until$/, + rparentsprev = /^(?:parents|prev(?:Until|All))/, + isSimple = /^.[^:#\[\.,]*$/, + rneedsContext = jQuery.expr.match.needsContext, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var i, ret, self, + len = this.length; + + if ( typeof selector !== "string" ) { + self = this; + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + ret = []; + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, this[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = ( this.selector ? this.selector + " " : "" ) + selector; + return ret; + }, + + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false) ); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true) ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + rneedsContext.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 cur, + i = 0, + l = this.length, + ret = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + cur = this[i]; + + while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + } + cur = cur.parentNode; + } + } + + return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( jQuery.unique(all) ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +jQuery.fn.andSelf = jQuery.fn.addBack; + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !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 && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret ); + }; +}); + +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; + }, + + 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 ) { + 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 ) { + 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|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
      ", "
      " ], + area: [ 1, "", "" ], + param: [ 1, "", "" ], + thead: [ 1, "", "
      " ], + tr: [ 2, "", "
      " ], + col: [ 2, "", "
      " ], + td: [ 3, "", "
      " ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
      ", "
      " ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +jQuery.fn.extend({ + text: function( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + wrapAll: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapAll( html.call(this, i) ); + }); + } + + if ( this[0] ) { + // The elements to wrap the target around + var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); + + if ( this[0].parentNode ) { + wrap.insertBefore( this[0] ); + } + + wrap.map(function() { + var elem = this; + + while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { + elem = elem.firstChild; + } + + return elem; + }).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapInner( html.call(this, i) ); + }); + } + + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + }); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each(function(i) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + }, + + append: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.insertBefore( elem, this.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, false, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, false, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + // keepData is for internal use only--do not document + remove: function( selector, keepData ) { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) { + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function () { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function( value ) { + var isFunc = jQuery.isFunction( value ); + + // Make sure that the elements are removed from the DOM before they are inserted + // this can help fix replacing a parent with child elements + if ( !isFunc && typeof value !== "string" ) { + value = jQuery( value ).not( this ).detach(); + } + + return this.domManip( [ value ], true, function( elem ) { + var next = this.nextSibling, + parent = this.parentNode; + + if ( parent ) { + jQuery( this ).remove(); + parent.insertBefore( elem, next ); + } + }); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, table, callback ) { + + // Flatten any nested arrays + args = core_concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[0], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[0] = value.call( this, index, table ? self.html() : undefined ); + } + self.domManip( args, table, callback ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + table = table && jQuery.nodeName( first, "tr" ); + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( + table && jQuery.nodeName( this[i], "table" ) ? + findOrAppend( this[i], "tbody" ) : + this[i], + node, + i + ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Hope ajax is available... + jQuery.ajax({ + url: node.src, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); + } else { + jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + } +}); + +function findOrAppend( elem, tag ) { + return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + var attr = elem.getAttributeNode("type"); + elem.type = ( attr && attr.specified ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[1]; + } else { + elem.removeAttribute("type"); + } + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; (elem = elems[i]) != null; i++ ) { + jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); + } +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone(true); + jQuery( insert[i] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + core_push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + +// Used in buildFragment, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( manipulation_rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; (node = srcElements[i]) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + fixCloneNodeIssues( node, destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; (node = srcElements[i]) != null; i++ ) { + cloneCopyEvent( node, destElements[i] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var j, elem, contains, + tmp, tag, tbody, wrap, + l = elems.length, + + // Ensure a safe fragment + safe = createSafeFragment( context ), + + nodes = [], + i = 0; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || safe.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + + tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; + + // Descend through wrappers to the right content + j = wrap[0]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Manually add leading whitespace removed by IE + if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); + } + + // Remove IE's autoinserted from table fragments + if ( !jQuery.support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[1] === "
      " && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !jQuery.support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = jQuery.support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( typeof elem.removeAttribute !== core_strundefined ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + core_deletedIds.push( id ); + } + } + } + } + } +}); +var iframe, getStyles, curCSS, + ralpha = /alpha\([^)]*\)/i, + ropacity = /opacity\s*=\s*([^)]*)/, + rposition = /^(top|right|bottom|left)$/, + // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rmargin = /^margin/, + rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), + rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), + rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ), + elemdisplay = { BODY: "block" }, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: 0, + fontWeight: 400 + }, + + cssExpand = [ "Top", "Right", "Bottom", "Left" ], + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; + +// return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + + // shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // check for vendor prefixed names + var capName = name.charAt(0).toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } + + return origName; +} + +function isHidden( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); +} + +function showHide( elements, show ) { + var display, elem, hidden, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + values[ index ] = jQuery._data( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); + } + } else { + + if ( !values[ index ] ) { + hidden = isHidden( elem ); + + if ( display && display !== "none" || !hidden ) { + jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); + } + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; +} + +jQuery.fn.extend({ + css: function( name, value ) { + return jQuery.access( this, function( elem, name, value ) { + var len, styles, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + var bool = typeof state === "boolean"; + + return this.each(function() { + if ( bool ? state : isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } +}); + +jQuery.extend({ + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Exclude the following css properties to add px + cssNumber: { + "columnCount": true, + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + // normalize float css property + "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, + // but it would mean to define eight (for every problematic property) identical functions + if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[ name ] = value; + } catch(e) {} + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var num, val, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + //convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Return, converting to number if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations + swap: function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + } +}); + +// NOTE: we've included the "window" in window.getComputedStyle +// because jsdom on node.js will break without it. +if ( window.getComputedStyle ) { + getStyles = function( elem ) { + return window.getComputedStyle( elem, null ); + }; + + curCSS = function( elem, name, _computed ) { + var width, minWidth, maxWidth, + computed = _computed || getStyles( elem ), + + // getPropertyValue is only needed for .css('filter') in IE9, see #12537 + ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined, + style = elem.style; + + if ( computed ) { + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right + // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret; + }; +} else if ( document.documentElement.currentStyle ) { + getStyles = function( elem ) { + return elem.currentStyle; + }; + + curCSS = function( elem, name, _computed ) { + var left, rs, rsLeft, + computed = _computed || getStyles( elem ), + ret = computed ? computed[ name ] : undefined, + style = elem.style; + + // Avoid setting ret to empty string here + // so we don't default to auto + if ( ret == null && style && style[ name ] ) { + ret = style[ name ]; + } + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + // but not position css attributes, as those are proportional to the parent element instead + // and we can't measure the parent instead because it might trigger a "stacking dolls" problem + if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { + + // Remember the original values + left = style.left; + rs = elem.runtimeStyle; + rsLeft = rs && rs.left; + + // Put in the new values to get a computed value out + if ( rsLeft ) { + rs.left = elem.currentStyle.left; + } + style.left = name === "fontSize" ? "1em" : ret; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + if ( rsLeft ) { + rs.left = rsLeft; + } + } + + return ret === "" ? "auto" : ret; + }; +} + +function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // at this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + // at this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // at this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // we need the check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +// Try to determine the default display value of an element +function css_defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + // Use the already-created iframe if possible + iframe = ( iframe || + jQuery("