From db4e7b432bbe7fd7a4c928a46874eb83885145c0 Mon Sep 17 00:00:00 2001 From: "cedric@yterium.com" <> Date: Mon, 13 Oct 2014 21:45:03 +0000 Subject: [PATCH] Integation du player html5 mediaelement http://mediaelementjs.com/ pour la lecture native des audio/video. Modele audio refactore, modele video a venir --- .gitattributes | 24 + ...T CHANGE THESE FILES. USE -src- FOLDER.txt | 0 lib/mejs/background.png | Bin 0 -> 166 bytes lib/mejs/bigplay.fw.png | Bin 0 -> 79426 bytes lib/mejs/bigplay.png | Bin 0 -> 3001 bytes lib/mejs/bigplay.svg | 14 + lib/mejs/controls-ted.png | Bin 0 -> 1559 bytes lib/mejs/controls-wmp-bg.png | Bin 0 -> 1960 bytes lib/mejs/controls-wmp.png | Bin 0 -> 5511 bytes lib/mejs/controls.fw.png | Bin 0 -> 80753 bytes lib/mejs/controls.png | Bin 0 -> 1892 bytes lib/mejs/controls.svg | 1 + lib/mejs/flashmediaelement-cdn.swf | Bin 0 -> 57058 bytes lib/mejs/flashmediaelement.swf | Bin 0 -> 57052 bytes lib/mejs/loading.gif | Bin 0 -> 6224 bytes lib/mejs/mediaelement-and-player.js | 5291 +++++++++++++++++ lib/mejs/mediaelement-and-player.min.js | 183 + lib/mejs/mediaelement.js | 1961 ++++++ lib/mejs/mediaelement.min.js | 72 + lib/mejs/mediaelementplayer.css | 954 +++ lib/mejs/mediaelementplayer.js | 3328 +++++++++++ lib/mejs/mediaelementplayer.min.css | 1 + lib/mejs/mediaelementplayer.min.js | 109 + lib/mejs/mejs-skins.css | 289 + lib/mejs/silverlightmediaelement.xap | Bin 0 -> 12461 bytes modeles/audio.html | 59 +- paquet.xml | 2 +- 27 files changed, 12276 insertions(+), 12 deletions(-) create mode 100755 lib/mejs/DO NOT CHANGE THESE FILES. USE -src- FOLDER.txt create mode 100755 lib/mejs/background.png create mode 100755 lib/mejs/bigplay.fw.png create mode 100755 lib/mejs/bigplay.png create mode 100755 lib/mejs/bigplay.svg create mode 100755 lib/mejs/controls-ted.png create mode 100755 lib/mejs/controls-wmp-bg.png create mode 100755 lib/mejs/controls-wmp.png create mode 100755 lib/mejs/controls.fw.png create mode 100755 lib/mejs/controls.png create mode 100755 lib/mejs/controls.svg create mode 100755 lib/mejs/flashmediaelement-cdn.swf create mode 100755 lib/mejs/flashmediaelement.swf create mode 100755 lib/mejs/loading.gif create mode 100755 lib/mejs/mediaelement-and-player.js create mode 100755 lib/mejs/mediaelement-and-player.min.js create mode 100755 lib/mejs/mediaelement.js create mode 100755 lib/mejs/mediaelement.min.js create mode 100755 lib/mejs/mediaelementplayer.css create mode 100755 lib/mejs/mediaelementplayer.js create mode 100755 lib/mejs/mediaelementplayer.min.css create mode 100755 lib/mejs/mediaelementplayer.min.js create mode 100755 lib/mejs/mejs-skins.css create mode 100755 lib/mejs/silverlightmediaelement.xap diff --git a/.gitattributes b/.gitattributes index 15978a50..3662f16c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -116,6 +116,30 @@ lang/paquet-medias_pt.php -text lang/paquet-medias_pt_br.php -text lang/paquet-medias_ru.php -text lang/paquet-medias_sk.php -text +lib/mejs/DO[!!-~]NOT[!!-~]CHANGE[!!-~]THESE[!!-~]FILES.[!!-~]USE[!!-~]-src-[!!-~]FOLDER.txt -text +lib/mejs/background.png -text +lib/mejs/bigplay.fw.png -text +lib/mejs/bigplay.png -text +lib/mejs/bigplay.svg -text +lib/mejs/controls-ted.png -text +lib/mejs/controls-wmp-bg.png -text +lib/mejs/controls-wmp.png -text +lib/mejs/controls.fw.png -text +lib/mejs/controls.png -text +lib/mejs/controls.svg -text +lib/mejs/flashmediaelement-cdn.swf -text +lib/mejs/flashmediaelement.swf -text +lib/mejs/loading.gif -text +lib/mejs/mediaelement-and-player.js -text +lib/mejs/mediaelement-and-player.min.js -text +lib/mejs/mediaelement.js -text +lib/mejs/mediaelement.min.js -text +lib/mejs/mediaelementplayer.css -text +lib/mejs/mediaelementplayer.js -text +lib/mejs/mediaelementplayer.min.css -text +lib/mejs/mediaelementplayer.min.js -text +lib/mejs/mejs-skins.css -text +lib/mejs/silverlightmediaelement.xap -text /medias_administrations.php -text /medias_autoriser.php -text /medias_fonctions.php -text diff --git a/lib/mejs/DO NOT CHANGE THESE FILES. USE -src- FOLDER.txt b/lib/mejs/DO NOT CHANGE THESE FILES. USE -src- FOLDER.txt new file mode 100755 index 00000000..e69de29b diff --git a/lib/mejs/background.png b/lib/mejs/background.png new file mode 100755 index 0000000000000000000000000000000000000000..fd428412ae26af13dab448ec833b1cb603e37ee9 GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0y~yU@!t<4mJh`208nVjSLJ7k|nMYCBgY=CFO}lsSJ)O z`AMk?p1FzXsX?iUDV2pMQ*9U+7(6^(978H@y*Y0v$e_T(u#x?LUY3A3&)y@Bex|ww j(M~QzfG7Rx2N+y>8O3+Juk2x9U|{fc^>bP0l+XkK?WQjj literal 0 HcmV?d00001 diff --git a/lib/mejs/bigplay.fw.png b/lib/mejs/bigplay.fw.png new file mode 100755 index 0000000000000000000000000000000000000000..66d0e3cb73ceec0b1ffc7cdd4c1bc5edaf960556 GIT binary patch literal 79426 zcmeAS@N?(olHy`uVBq!ia0y~yU`SzLU^v0S#=yWJXXA2^fq{Xg*vT`5gM)*kh9jke zfq{Xuz$3Dlfr0Ba2s1Wy^F}c+Fvyg+MwA5Sr<If^7Ns&crsOB3D!649rIzOxWfv<r z2b;avv#E!Hfk6zU&bcTxu_QA;Paz~TH<iKAP~Xr}-_Ss}c()+~1LN+3qOkCaId7+5 z%sp(t<KpRmNpzQI_zU-m_t!j5wQ_hEyUX$JmTfMl7G0K?pUd>U;l>1=7kzxLC*|Yc z&o7$#+UERalitS~Edow*lA>$xNZouT+bO40lCO5Q;Z(rV?D?CSuk$b6#52S1r!d=f zzlq-;O{>@B3uB#L7<Jk3U<3cY&#mSKr~kzEvM`^%6PmI6!D_|@|EjK5y?*nMC+85q zSdApZ<?oUbOBO2ePC4nl`b(xY+sgOPzL{Ql%6P%yWYy)Bd}kQ^>SvZ1ME-XP<}q0x z|5y0-<T@>pC2YA&uZ80mC%V6?zMAoJx+>$<{>S=!=eqZoJ$u3a(K_?bZ+?-ScpKG! zLG9-{?=Q9Yi7$U#E-J8A{>c3|3^#tg7GDs2euB8{k!5AypM@T{^#0tx{q`K`2V|KR zEB;`fkhQ+g_P^`%`_+7kY}Z!*TNd>~|BhsznSkew?#7qzr7wv5JmwJGP#e|oRrhzu zmD+#mF8XQ<qrKvr>Vm6pn?>y{{ZOud%t2i&OnFD69rGudH9W8N!)rHg2zj(lOu&gl zu|>d%!;+ycLlDXa3n)JM|3PVe(M0pgNzXU0ogn;!&GDJQG}+R{f(#4{9=X|0ZolrG z`Ugru3={&*CB_RG82k_CW`_h<%z0aTvsl`Fl6l!Rsp#$foj2QS6OU|{zCU@vx_!6x z;{{k8i_S1JPcT|3&g$2h9r@|Stcyk;_Seshyy`A0bv2ZM<5Jk>T+?5x-u+4qi<^40 z_Dk^V%U3tY{r{9@P<_pM*Pf)!e)-Ecy!!k1$EQ==%>@=xY@0tHp8ImD@$Lt!=kwpX zto_Vl^WWynFQ;<bSMC1$GW5tS&o``|Ca=Gq*L%3<nw*L0(*2R&KYX|xx|;j{o1FRk z_GjJ6<&j=|tlMq7VdkF3`02gZH#a|4wkYE7+taAL<|9jAoY_Ct^gZ*w-conYDf&Gl z>Ry}rceRgeuG$?~o-6ApzHGxHzOBD@mjvy1KK|?XmMqyz=dSs0xn(KF`=%^oce$5( zY1EdhFE75D@%~M@{`yG;*Q}nh`&YhRURyU=`JP<7Y|i6gxyQklo4;}H-qV%%G|Bj_ zaDSNWjhBZ`J=Nw9H&#yhx0q+<v9M(6Z*>iC)jzy8UBlk{y&z?e=b0N_Gd8|H^k(0I zob@013VyEr$kkVy;j`t&51HAWY|_g`W?%F;bnIe+ahIjpyzE}S&z3gKeCHbu3l~=; z@%h`lE}wrmwrz7={F>eB4N(RSvX9y&8}4&5luP9|?!3p;b0F$K$x-9(1gFC-%cNgi zkdauhvS1dUZ|h~Y*Rpe25+$ZN+<3q3$3(k$amBxG4!0J4thgz`=^)SH@ICRrb<-z- zzI{9O=53i!crU|K(tLyL`tA*tIvZXxFZNBGlV@7>;kEJ`>2R+tK`l3~#IN_+e4ry% z-_7#>nvRRJOrM@DzSwN37gg1=@=vnyvAh}eK@;z(mBb0=pO6W$P+GXc`Q+ZEi+k3} zF3tB2%(@&Q-K2G;_;T*ild;x*{a%GamrlwpmcE{8<;P{=#OSUOk-6vX;i?NiuKf73 z`%0G2Hdki8-~)+L1vA)WmKAvy%Pre2>67o6QGa8>q3g4zDc5^;zAea*;p;uTu+YMU zul-o0r`X&>9J^WOKl`rLy+<|mB6H(qvoHT-Gro)c`7Kx&ShFwqz{~gp9`ZXcFFJZc zo3)cqpQTfkNv(WE@t+e%qpy9{Hk}y5H}&+wPnIEe?Wdm4lP?y&`StL+3HO<-a}NA* zYsgHKQxFzO;Heds2~O*-<rX=vJ!__##32F0Lmws{C}20J@>QHMJ#xpx%}RHx3Q9Om z-##YIc{1b7!X9@ehskR^tzWg=zI1Jc^y~#0-GQgF>)HAC9NDbW@~1)hNLwb)>FLc8 ze8)4EJl^{90E=qUQ6|5I7Z@wPmNK}$d3IFk%7cxC=km8n{EJNZVcfBYf2oX^<_FCx z$LAj&EETGH*ZWzbH9_Ot)u_yvMK!;t9(x*H`ygb&F`H!dS(f|$Uf_}8lYW`WlDDcm zYi;|>X|n5|?sA-(G5IUkmZIYOcV{^4p3nHDt7fj?hI0ve?{boxr|^4lEzx_nc4GGV z=$WiSJ7m<K_4RyJpDn@fy-xpOyY<!vJ=uw|k5=(ty=-rkb7#X^sY#bhJQhVJazrm< zWhoczNn3EU$79OBzgJqEO%LSm{L;>%^Y;a(VItqh>qRYR*y1j&oBEI0aEj?ZVZ~1! z(&erZ^=lcvGlZ8LJ)E)f)zu!|@(h*5n=Vwp(~3@7?j^FODcWR{{JDKI{z`D{`*Q5x zR)b|Z^S4~uIYH>%?%9f+T91t-cN;zbn($v=v@ZJ$qmM;H%4E@FTQ{$2eqa2>VtZnK zQsUi-@$Ekz#)vV!$YS7Wna%&r>U+E}U!sNq4{OIlhl$B;_HDtbZk%gp+_TH9GB((M zate=McAwP#8wM(tYeS1Jor%#CpR6J`QMNr>{@9T|73N@tYS+e-t{IGhuKz=nv!1=} zd&3xe$kY4doag?`4z}BQE(Cm7mT=Z}&P>gDtQO0dHamB6SX?aXV$@W9Q|Ynov9?v6 zOOq&D-Q&5}%q6F~CCBt`oRK|8Rpt4tGe-;Z`1V=sDc;!mW73Ttb+L+Njo)e;pTFh_ z7d>0TH?PN8>Q|qN*G^AMbuaI=`IkN~vpfAD>Y+*dt87n$eUb0ytVq0ZKGI*WM{~L8 zPp`A@3?8rECNaC){UsA?uJZo~1H;a5xfL_ET}rrL!}IVw)9%TWmMpSkz0aPs&8h$D zf-7BSfufH)^@2>LrtB)4$-9<UTE`%@Ch^n{8U6etjElFrXJ6XBr15!iQk6Q>*}Q)B z<6o-2Nc@efzxPb9`Fq^5mclyb*aNF1`x@U$_-%B(yrhfM_NbrF+gVrsDsMGOS2bc@ zF8TeEPJ4o@`LhF)cHMopKye?-BfDN^ris4VhJO~?{8M21leWUmdr_8(c<WbNS&c+J z!ySJYvaE_{%hFJj&zw@t<aY45iLZ9r%>>=^odwPt-M{(lzc1X-oy#)Ix3_WM^pj2e zDZWWk=c<KQ&SVp~Y$;?mV~v%&(gI$Qwy8(evKHB;{?VJpqPc0=Bn8>0IkRqdw#<+2 zy<gsXu<xDOrWbBcwAvVXo~+V7AhWY8LAHB>B!5dtM;OE2DWUF4xy33f2Q<QR3n#63 z*<X}+x_-$;g(ulb1u7i<{8LZdZEq5>7d|5__;vw{|4~t+)4>7H{EfLU=gg9PJYiZ} zh#UK*e(j@r-ofdc4PxH$PHdg<@5Nk^8}}aOtWRl}m7MeJ!0y7C4$soAO9}e@_0{L) zV}HglT{<Ri=6}D;&D}!TZxgl{eqZkN%P;k%wd|UcQ4v=~wbBE(^El?c7f*E-`w@^{ ze5u3TKV!xA-gwbyvCq5jn=G@)?l{VlDzWLnbBQ*iHfC;)!$Ec>rxczf_N6ZS5v(`G z_(|-+wk_W>&bsGow5_+y&^#PFVeyi5i^>a9XZ@BW%)BDZVVxB*Yw41Rz@<FfJ+A9> zC7eo3IMTaj`M){OLwM!Sf4LOx9XIn#@UkCsgTBZVfANStd)WNT>c{&fYrOu5e-(as zyuRWO`*!EYog17#x|^pStb3*QHAwWZZ=JEv<;wqjvwo#^@YSA7@M2%ztG?=~`=Jdw z>*Dh2xP0~+`M4ME+&YEhyscp4X_Y5+LWT)a%W|GRtC8Afl6L0KjQ{KhEEMK@o}YJc z)8t!XTr+>Wv7W!26vw0DpjrLsU*C=U4}TkLoV?N5vR1f|&sR~E?e252v`DF&k`KPO ziF|c0Y7a5q&)g+FxjN_UpHB@N0;3|O_|uk_{kt*!%^$~=_tJ!m=X<6`nd_B*%KY%% zD7m(7O}OJPh0Ax=XIKd(S5Mx#$4K-<!OZ|p<NoWZX1m01osU?;77$u_yDrP<-TB!) zp%?y!I(+X@QdB<mvfh8{6p4`Ihqmc@*&kRX`1ehPX8fm}al!k(tV;G*j<lVaYA0X$ zX>C*0p(S5jx^&lgT6TJFRhnGZnlZITUPz=>z)QzHKrCfuSZ6!Wm)GL_#lf?emVB5L z(Z}rL&AaxK!~!ExbFJkrGsA+r%|CNAOgMUUh3IsZ3kNkGv_)j7djze0-srgP>J8=V zujc<+`6Os{4)3D~v(s)%!y>hMQn{NX3u{*z+<U%m3U3O(asOxCn;X_Qgu8B=B)8-1 z(?_qLxW>$4Yya5HRItwXNxopg9nKf$t^Jqzlr#OdpKxQX)`e*H%dF1?Gh1Iy%JSEm zn;m}Voax3pi<wUU?Ox;>Eh4lr&C2WKrWJW74t!o+`)z6b<OaW;jn|fE9M{nD^j~0U zb8F&1kE?;<J67CqmE+g_u_h~KOBYvpQRGe+z4VmBtJxmg=!Ci@Y}U^e%h*|Z%`&Hc z*DDe2g5@n?^O=gKw+5}#Tv+0x&+}vI2kYnxmj^c<+P?g-ue^faYWI<txpA}oUVi<t zv38%;@vCcsOWyuq?re%Lc{s&gOU^R7B4ww0(NE=rS^CwB-an{xyUDF_?9iS+0TuHP z{q|YjbHs-u%69QFeS<xhuZNa=o5%R!xb>co%s=*CKN`NV<cD^c%&*y^d>g+^sQAw% zxBEcyxmRyDsLuA_KWOG?KG~x@enMV5*F-micX87vtXFrK^L)jliBC^FFZ@(#`g5AX zePzdeattO-e#se6mpUDBmt1-3oTafvy5%80i$r$Q#OVre_U6PqVqv@`>#Cd=HN(cE ze{N=<uDip0;S1|IcN{wLq~(Xh!M<|MoKq)s?4O@`FlVZZUb1QG^aVM2b-XWF6Dq|% zhqP?G{5PHZo4)(jhG5+lo!gi$?n=q)<7&MYEXd^jeZKCE{W2Go{I;x6yT#@5TEO5j z&$KBPKmToJ{XJbd>P)BDb(iR-41U&&Wv+~`^HsideLL;!xNMX0Ij!>%eM>miGlM3V za89bz^|-a@<jwDqb_Y#X->RJ6>sb1}=!sNeQEyg}uH(AhGlM&n+xM?@`}+K|@+$lJ z@{xTd$$q;EeRqkP+&e$zkLAqE6;La0wFu`13ForL@15;GJI(Ll-ZOnVa@Ln+qWc<x z{SK`BlE812H_N20*DUaf=-F4xcJgR`Uvd1rR-gX&2|h0Ug?H0f6RdN?Z+%*#8-L5{ zDa(z;3o6d8b-S}m#IKyyueM72g8HKBKL3bs0iDw=I==+?UGBZScwcvS%@zJjiw`Hf z;GJ1x;=|weMP0sUllO7q7_W^TvN6w2e)?VgNBUV?b(3^e$b~D5S~i{fc<6oHzlhGq zJh6vACS5zHE2&?>;;T`)=f_eW@t=y)Cu$z1&XwzX9H=1Qvw88u6LU9g*kV8VWrc;* zdFN{5{({3HKes8oZA@nU9~W>>&VT30%qLUr7A0&@V!L_as)5>{-Z?@ii(}1qCeC@E ze(RCBVS7uy$)BxW$!EUvy5xOSc;)2z=-K(Vd{>$i>jeIXOKe|}B>re-W8hl7y!V^$ z8|W_)3rh=sx-D$$u?Nrk|2_0EY4fx;@41}px%^$=BkOtA>tnrJ-6a3BZf=cHv8|oC zvI=C?l>Nab4vyc#74M#zpUUA}wt=DTWd&FJ)8@{qrDAVQ@4uM#;!f<T{^c%uTDB)F z_IPRU=rf-+dCg3ol*1}Xhh5t&X8#C|-xyisTw@?<*)?^Z^rO$b#$P*oL=La5`y>6V z*PT_n(qqoY#<>0keTRb*WRG`;?w!fZ9c3!%(%rzytbOIhouA&yXP5faDk<;VakanR zyF^i}eb3Tav-o?3KjyVhzdCQ(Y>Q@v$OLiMrOxH8WqF<YaTVd}GOM?2d7dm_`8jb$ z;<=c!78*RE*{crJR3w_j9;x|rtec_re^2k*=s!QQd$iw|-I~9y%)0gE70$w=j7!}X zo8=zdKmWzwHJNu3o$h>?bI<3SOvR(8IooglFS&Z}=F$4PMHjc;o)I+HvMP=JfaxBN z*FiNQOZR@}Irqz}B6sr5H3e^LU*1x#ia+7FSa;pe_s2q&7cEX~KKRJw&N1O1woSG_ zxWD(ld|YYxru#vMv$sRK+Xww-<sGJz-&L8vPk+4SqvT$%!sGSX7MEsz=Su(Q<Ju=L zwf@M?`a|lI&ecU&Sf5>4b^Lf>neP>jDcNNULnk<WS;ws9-)j0)LZ@O``<KcC(^ZaN z;#b<c@b$g)@QO>K{4f5-zn9*xV-vsE`Cr@qZ53NDGz5hP&G|QX#lobi@l$ORAJ+K4 z{25y@>$=GKS!V(r>;4^YHSX6a{?h!z=a{PNp-Zc06p5~PnfSwMdc~tv>!ts*f0)m8 zZesP9j#oGTYwl5#;e5RF_4`9#{SrS)1+$*6{S^FF*N40N)}h+0hg(0Cou0S9U~5t8 zd@ax8SGqT8bNjDL*sgtVE?>;07Zd7j>+`q1|15J+J?@`+K+=sL@^+_=ZY_V1dC{rb zUR^NCWh=i)-LE5+@?w4G-(PxUR`_gptIX=SO7q=8ve#eD{4YM?2kX53&LJ}b-aMSU z;27tf$EF|j>UFQLKQK8z^T__@TGx|hY|rIC&x$LY{+o5>?$8OlRhH?he7WxAR9=yq zsyjFPWzE}5kyAytmaJP^tUI^#Te18tvC^YkTh^(5+3KAUdhMFfu4xyxw&+d1aR0n_ zMxkA*s_Bn#?d+Mcr{BDub~8_RGl-ePy?Ph>iidv-&Rhj4zplIRaFo+^5R*;lS6p)5 zJ%Kl~quj0={o0kfCI0ja5c5{jGlA1Z_pemSZY{ajP{Nn>GRFIPlvVnroh_61-#B9( z=KUgCVd3jDyQ7@`UsNqQH+Qwi3w`a+>!zLC?r3#=W;w{gn|uHMd75(Xs?aYpj~7;- z*MS^rHt|B~vsm5D`R!-c8Nbh(8GAZMdiAf<C-<yY{gOKYEVnS5GgoQh{v&60N4ec+ zlZ;KjchzXuw2NlO?eT8UVs+={H<y64f*cfMwf&*almAS%qAzvazO^m=%<v@g(uYJz z=jxA9OE%BT4xPs>n*V!VNoi<Y>BpFV&#uPII?|=1F)#XD@(RHi-}q-s7qN%4NI%>* zrFol*+@`17jyK)@q<?JBgmb?x?Z{tnp}O|Y^XTIH`%M?!H+*j^v?u(E^(xh0zG<C& z9F6u>CgD%l9^JO0>fQV6LZQD4FHg&udpIn5QGJg0mqa~(=^wdGO!u@;WSr?aAol;o z%wuu7i?bzTPrp!2F$q3arn^}D^b7W#Hdnn~92er<z9RfjwefoHxI4BhU+LR!i?n=u z$=p9_Lcs%LX7R;7Wr>AGmc73}$h`4AWo+pAO|!D*grjkGr<7LF(x_W2ja`=&C0)$e zDW~_v{6Oo|n$0}yc4}MVgY{L`Z@73QwNHHY&&(Sh3@-)$bpNV$s=BWpIro$BG4=_w zmmNvHQ+<5%#P`b%v?p8CZ(|f${VT4f>3_?<Z4cyvtC-G}>OY8k-|;zM{$Js3_9^Gv z7k{qbY<+j(zWj&#gI1SIF}ptg$N5XIzdK(l`LM)wS&LQI15KEwJ($EUwEu3*98G~~ zkEZ0fY*A5;sIjQ8j7*hI=kh8^l}(>@ePZezrO)@6D~=i75SL$>AI<v4^7`MMGp_D! zQITS9XK^UKlFeBueZn;P0ozsPPUBZf;fnUX59_yZP44wj+PVC?O8J@%|F!RYjeRE0 z;d`fIRo3UFTU*#Qly^Bx&9C{R)?ho?%}7q(S(`6Y$o+y~ri8#*Ge>D_m6YE}5k*hA zv;OKT{8!uD_RMzq#7nzQhMFJME<f1p^LG7r?_!oyY4Uyko$@<!(i;*2jH2#J%dSoR zJ2mxt^`a}*pZ3LZcz<Ng*`LEB9u%|h+0+NpKUdYOcP_hiHu=#S{<iX}2#foF^vWMv zBz@5SvwGWko@)C@3F(Vp?e?GA^S%51mKEQB?Ow50f1CdIf45op*5CBlZ@lY-a$HM8 zRqD;pwpxx0U-k8SPc+zhyOy)}=kFCC=M=fL@&2nl`)PS_;hFgX`_{erDK~Aw!u_`w z2kESOU*hlNw3mIi=%t^#kJ;5G|Imy`l9>F{BZ%*Pvs9Yxuj)B3^S@tvnLqj8X_H#l z=d&|nWVU|JofY#__vhSi(+)E4cw{<v_RlJ=`BRQR&pT&!L$SmzQ2zSi+{rz+_e3Ah zP5nD{XLpHu;{R=ho@V!c-;5Jyxchou-7YKpI|tvF#C^D`bN@LT<Na>?wBp=HJr}KR z*GxG5b?dfj`>B(%bH6Uz@!L-3zlY)bwTparZ2EfI==JserPtmsvb!!;kjn@r?%Q$y zh}*~BSCsjq>hQ$ZhLMVPu1@YI+szjEw7Yc1EDklEut_l^ZRRH}^{$%zn+w8r=4^YN zJ>lp6i#-Ne4d*3&pBpp16HD8BQBGF>$*kA2?rJTb?(^CDg5AEK$w3Q>+ShQ-vpigE zJniC<;8Pxj4MH8(S$8$h`aLb?;mb@~a{O%8qfc`ANk`5u{=c@PecAhjn?hoT%(ncI zKF6Tr$T>aZ!KD+D6Vff4w)%f=cb%=V;HT_no<*-0x|F^*cbvL@lclQP<eKW4fd?Mk zm{QU||K{SA?@MRDxwvP#dE>{sCDP~Y7NyTS-@489_THlz)4zUKEBL={Bm4QU6CbHf zH__iU)%Ippn!=nj?4R>wMORhF*R<`Q&>LoBz4gkyiMsX+c$)hom!187VX<1~fur6P z$|3bGCEky7RtMWKbRAuy?c|`M5^FDNe8jHzfM#S?k5LrUshopz!nS-%wn{cgpBl@5 z^sDWDwJ48!H`llR7XO)U*Q^@2=E#1XJ!OSy-LsY(o#(VYxLx9H%<&uUoNogASf(G) z+bS=t{$Nju!<+`?8m~PDYOjx|XBsTMXn#vU{Y6#X-#H&@)eJxUGg4o1@wGjplac<P z4If_BAE>%ep<Ah5?_?Q$kdt5Pyz~#b1M$}nuy(FUaOM<9GfbWS#UN}uuczFCBOE8E zOHb07F{%9dB>who&((G$6s})CpLt(v@sGW^EC0v7oVskv|EMQIdl&b7GLO8wcF*;B zuaqx6d+|6?Pv`rOiqJ!Qj*H)2aWDM$E>78)zF*9h@4c?+FZQ{h={mh)UYOHjgISw* zUs|(o_M!U1_4$25{SPhg2YltU-!%1UpuRS1YW|V^NAG!r-d`Ut_Rm2`zrIOagtONF z>y6hN)|9@T?s>;y;*R>OG5;OIcP=?n-IuwJFMaCekNbV2^0n<Zne6xND3&>OK{jYk zu8YmniPvN~`FZ~Hu8`AQ>+cY2t=QXZb~EkR|3z`9e-%2U?``<KBz<P!>-J09_FY?N z-QD|g=fCyRdtL>c<MqG)w$evKsXW(e+rF1x&X&Q|fAiIXw3B_ZcxM*5hOSk-6<+q$ z{PS0~(!GgR<zd&Q>pD#z&R((fN0wu0_)Z<a`;J@uXY5`3^g~xs#NKCSClaT=&(e(X zerP{Wq_21B2entZ;+_xfnNO`hxk~=<51-Z7x_(dlxNo`1_5;eY%7T?XTr(T?)Lmm- zS-JV^<|6;~_pk5cKR@wa{yphKf|Gt-nD<GocejeaefGLTb%$;>?7J^`z9{D2#3=_Z zZriGK^|(lCpNFxU%hw5M;zFIToM+X0sjPbZKiI0=*f>z_?|<b_hrUlq{T%sa>UGch zw)^`Qu%#V-muB}-FwryYDpzrkVdgu|-W<8<eVNNPNlfR{{C{-uO^-j*^B-6F{5G2` zYH<I)uZv1fM$ncY1?O6_PtRWDyJ_RcRj<G2F20zYI_>wAUmfLpb{dN0yvY^$wJ*OZ z%s$}Qt<>i8xnCAepZ-Yv*87axqAS1p&MU1r`=zr%OYrO&cN6FS|7}aOnK$*BInMui zFRw}IJLhlC)VGUR=cOH97Wyl8(@pyeE9$O3c>m4i{5#>^?MeO5)(UOTIFNLEf7dpP zWD~{yG_QHK=U)51=$f*Pc~gqARAyfVceD1Jdn|nqboTh%UVq}3gy^1<tDE<)+s<%9 zp|{?>R^ibb%fGkp+WjrLddqUpo>`afubKS+*xEd|_xTz3-n#xvlX84%-D;a&TwV2c z^24ddujg#jE8Kc}Vd(!CpH8)|y?k2R?DdyhC0^@~_rLvo)pA|h^5<*)!(aA(Yk5$~ z9Q)(t<*VmoE!4}>ekax5s^@!a`Qb6cykB1y)K-f69{)GxS&!d&>(`kX+p6#VExBrG zbyV+-%q8b?{>0PF1`kVE9rl?n+Fx>d;r`J6Ugwxo=Tn$tHtDiYUo(|sI%}?9f#!Z^ zg9EC!lXfhL{>Lyqr~Bcgyh={Jn__>LM&~toZ#!C``TnrVk)?ku7Ypj$oYwBWOO&th z<hB>*m$(Z@oq9j-Lj1O;k0<3FRgT%DD?k0y^DB1~B_2%5<2|+`C7Pw|=Vl+}m{ac+ zice@9P~Cl>W%{Sxr*mKJ@XHI{>32A?>&3+13l{GFX2rW}*K4o-gADfj_Iz@V`2OS9 zml<q-6g|w%ZoiZJ6e`bp^V>JR+}!P%SJ^KbG#cO5(D)V*V6l0B>HoS)(FeQEoBRJ* z)qVYaDPO_Y?RN8w8@}q@w>kRk-?jXS8*JW8nquQ7x$nCDk=pjZ#xYxezS`g)RJy#r zW%}E9Ujnbl#eXS$y}>{F_j30eC;n-MKhHJd4A}Z-^0g2n1MBw}cCx$YT4csY2u?oM z-@AN^jA_N)bF+Q^|1p1gvNq$LX2$C8DfthgGyk#o?H4jLdspohcv0}j$^DZ;zc-$% z^8EEd^X=oE6~epXtIh>maKAn`@6dmVN;{kVbI+I7xqPvEEBL3uWZk*jw_SS9S=tmc zU(@Yc^*sMd<?RRWb1V5D?4Khm|8xGj2lG#_E^u3|8E?3+Xo~0>>k7LSHxk^m4Q}@R z=DYiP$N3|-M6>(t4}avFSH7#(qyP3_$?)eVByzT0wpv_V7PaI_S=8+<+xPlLzg_Gf z-ahy8%c+-n(w3{o{##tG@NJ9Vk^Y<KEH}P+^Fl)I{fiyGx#xCO9~U|H%8V^#SDxvF zlNk&p{Cq#T{Qv4394tG@;x25>=Khv5$9UGPhnySkG-OYFx!3u(RmnVNJ!ZMr6Mnv9 zzJ6HvJRjfBgq;l&i+9vA9y{+}z2os3_v9Y|E}nI5?oyLvO&`=4THB~}^!+NicahKZ zvfTp4t;HQ_m-NhbeinXr-}XrL*|hU~3(lYa;ko(doxd`L_Hz^;-S?{SjA_^@k^Hjn z+^qLML~rhRFSUQl-PVu0Ex6xZvb}r0Y{j?7b69Vl(mk<zit}eCk8{bz(`Rn~AYZ_e z&VKRqt3&_lJ7*j)>+SZwaeD85#@^dk&ea%{*Zpc0PAuKFtzSQrRq4#^Bb&p1Gc5VO zrnICbd1WcfZuZS#_0#=cU2e!+_>*(BSmULvzb>oiCSPRO9v^LM6casHEdJt$4B5|f zYbTuXw8$>(-d=ht+Wzh5*)ku${dm=I<e;IQsKB?D#*duZ;<Gd7S8RD@U}Ah*cKUjo zn7eL^cU*n_=yRF>PS5%xuRB3K;qx2s7qN-lV)fUV+pqC%b$UzqOu?|{S^1}XHY~sM z`1CBnIFrSZ=Q+a9bDZBR`|a8}j@i$jR!DcSdm10wn=EiS?vUHW_l*<F`t;XX+U}eY zXUiD5_p;;H%WogwTlW5#<C8<vEOuzWy(?O6ed%7`joVCy_j5}fr+zv4HS;U~N4LB0 z_*UJ{)2{XBOa5bOS!c8R#UZPn+54WmKiC)d<>On+Kw}Q(>x{3LedoEoaCv{ydFJA+ zwtKlAsU-)B?AUy*ct`SU%bDxezI~qZ<H`1e&yK!5w>xO}^V*l|PUXhzzI~+e&g?&C z;<s*Zcv{80-FmvC_4TG_Gw!hEZD~H@tn4e$ze4Qcu9lp;aq`>J&zDU+;QNei^Eb&z zd&`x6eJdqj{#y3<IFH2yb78Z&DjrVjcbUd#wyB;eti9NCza(<T4z{x_UdH>Rt8|3U z?(pURX#662g^4h0LA|4_e2nb<<hYQ#J}Rb<%_3hM-*<ZU$E1v_#Sg-!o;~7aocQ9W zrdiw#pGhZJ|7gwjT#~kD*=u&4+8GO8x@{DeP_PMz@|>el;&id+I?p7HvenU&UTc5& zGN^G}3X3r2OuDfyFHOZ%*yOJPN3CPtdB&pZx*Uh)8?X4>_>wS(l}XAxkIC6u?a4fk zvo5~<M?2?tq!nCtJsEuSOh}em+wwvqr=5<*e6iC)K5uyMaaP6me!sBVj$>aLweFiY z+?alB`)d>DV+AulrrGRhQjIgc&2U|OcA~FDvga+YU7<HS)J-RSedzQqG1Yj|nv<Nx zij&uFlJvax<W8C5=OnP0+l5w}JzCKdU3~54=r7qAce6_+v*==xBKN#gX)2zRxp!@m zRAkehJ<-KiuS`E>Va&}QmFyzb31-S6E@1tkLAQDWBBq}8*rXOdA=B8YHq1=<<g6yi z5Y5;-LR;UeA4peutRsJTvRev+31hZOSB~Svt@RH~olUA^qJ>W0vTsn7Xenfjc5a)v zwO-)h1J218wx`BN{$}^QTzE%=CzpNln!nD=B^!_Umd^QjV%pUD7iP7`Q#Y=iGI46X z1jF1z4VBxJ{IC5>c-mHY#HgW{b;Fv!%GY@ID12CZwQ<c~W%(DcEgRS7O`2LSVzSpF zEiq@cdg@d8*0Tx;elk(nxt>4W1#g7!R87ir@^DgevfAjga)z|Yrg!~96%yzDU8n7= zRL%Y`aix*{?U8NA=B@dg%=S$5b8zyl8=t03t$))bQNA}MNpkkVP4C*n79HqMK7UPZ z`qcV2rnVB(0=s%PHY;S;XRxtoaSKJ4yI%WesNrQ_Hu=c4%1K-8O@v+IW>`Ktwr<Xv zzYAyH=$x#Pd+f%>DO>GLCbQ`HZ8R(|PJJ8Cp&fFHHEhwgtH)1l+0iJtL1Icw_wCI3 zR+pV(+b{p)I{YN+j^A(XH?y+~t>3QaSq7F&&3FzLEm8}9Ty`sdTIE9iV{*y!9JQHy z8P4@GTEAVtqS+uz$(jAyt@tp%oxX`H|El^*9%Pm4NMIJ5mvN;mZ)QYR{mqV!J83-p z!crZ6?#UOQ%%1ite%ty_cDGj6AH8+@W!mz8qPLCH-K@XrOCS3AVN>w`uE2TxW!8V! z@8H<^V&moiU56)eJAt_VJ0rGT{@-OhU7HicowoDTrZ4|e-Oa-nOuJVvw_?4_CBK>b zb$9=L*8lM2*%OW&#Q`aQ*SENw@l<(Tuj-I|&S2BO@I$W8-e|wBSFK33o00N&z00LD z?c3J;f4X7b&N&mW?iWfn5wF_xFI;KfGo=VKhABT*?{u2L%U~&%vu<w6-}NlZ&Xz6} z`aS*d6R}y*eSc3oR&!fB_5D2^%<;^vSLpY2b(1r`IyV^tmW7|;wY$j>pjLh6tp81h zfV6o%zKN0lPj60mmbP=v|EZdm#p;gN{-0u5xbw8q>-yAPm+mx9`nun!GV9&BlfU9; zo-!@hOZ~gvPe*$9u1){q^XjV2tTSbUx1H9zW*c}<;Mtrl{@d+i&zAXX>`bbD-;rJE zdnzTiC^%jG+RfI|vc$Qu5$WRp>^5^No6Y$2=8$?`X4OMs)r}uICk6dDVleZ9_LHNo z5iy6pmbJ91|Io>?5Y5bgV4x;=xMG>zZa$ksCP!qOiaFFWo^)<=3s&1MI&1sWW4`Qp z@7xxx{dmQ+a-HkTiaNt5YTu*tHwq|xUf6aiE__Q%K}Phc-!T`3nhft>`t<jd?nb@d zFXt5w-+yF&{*;d4XQ7$ay>FaXluq=CRSBNGajRtX?2Xqy-8z!9^6ZUUJ$qeUjVydO zZt!5^KPP_j!M&eKl6SJBRSsX;CA4hHNrTH)l4&vOo1+%`T&=zIq<@dQ*GeAawNnk> zUF<q)^z{2it!atbtEMGpYfVo~ikoor+)Pcy_-TGTx75yR2xh3IvBfsONr^qmBOKhU z_V$HW+Kd^}CM(r1T{&Z5X#V2%v$I;k;yylnR%}l$O+9Ncac@RY(xTO~6O(3Lw5oKQ znVzJy^|I*!_i)R@M{1sSO*Qs;vUk>!)E8dqGiH1@nW=i|>N$gnB5$Og7-V#%&$wYS zWAT;g=hv*RQ(HRkt;(z@2jv|`8_q5Y)ylYZFm1N$;%OH;Hs%LuEYe-%nL6>U&8#Tb z$)}EGMMea=Id8Hm;<<J4`bCbri3i$#IY})%&2#Hw_$7|JSr^u`E;V_*YN=t}gsvp1 z<OHo%nLV7LfquznEPho<6}w#%zcPbgr`EOir^EGYS7w}+tqttmDRCwI>WuEx+Q_rB zUS;WAnYL}yF{kb<@9dl{yOwP`cI?Cj(d#pA+uV92#Vza;9h;me^y*Z$j!sB!ZEx$* zHETC)-0)zls+kyH>$YRZ4jsHGb~C~v=9ZQ;H+w*ITJpmQS+8?+WS)F-l2-P=yWmpW z+Lc$@I926uOR;M$3{uU1koB@FcSgXciMdZ4Qd1T_@x66%>TQFCPkgf`mV7ny(fD~_ z+nq2`8>f@%Y+o)-xnnT#i^RH!;=?T)6F%_?#$MzV)?7G|(Pq~w>232iNgw;1syx}e z{Kc!h85?4Kyk?iQn&<dVHP7)~YM$e})!b)-zDa=au1C^pH!iv8WUtDXkk8qdENvN} z`@{6={SBs~4>p*FKG+ZvaXX5A6}!e1_lyrVyQE~)rp#m%f0b2mW0k8#j&G=i82=*O z!-mIQquY`l)pBL~SZ`-=7wX)Ii0(`_T(f1Vh1lVk@a|;A(k(|V#GC@6dy^HXY<+4W z=H(RLpS*DM7FJ6!tB~l4$%`+Ss#=<vwXIV-e(1?Xv8NF;5^k-M;hr22JuNwLQP%4s z9i6n;)V@~6^}1&_7HDkQYAMFox6R`Cp@)~ko<~?T-1;QL-5wG>Kl!1;bnzDv=T=@9 zwJOa@o_i}|x!JXqy`@=?#pm6!h+nw)iJ4vCCaL)vKYRRnj3rNNm&{n_a(vIKw$7xf z2D#q47eDIU5_+l?ck5bA=Q$~@k{eN8C0uvowz@69@LIIHWX<kvQB%+5tiS%RWb5(C z#os41Cbsr)+ntp&(pz^~|JKB*X1BAO9XDQI)-`wUH~&`W>bJFja>9N~PWrOMKkSC* ze7kIu*W1b;Y_nZeRe8<&(Y70YiC2GHU)$MGZYsmuEV=MefybPi=h+X~XDGjYoIWAu z$Hm)kgIAa_E;sK?+xt&abnBb9Dce%TPq+7QHN2ZD%8+@w;zrf!iaDaEE9R)4s#v$w zB&&JGU6+@W1=GH>rrmk-pZAMqrrhLB8?dbgJdx9se&C^GK}8au|CxuK>3{Vsj21s! zb6-6B&#!sXJPGYT64@S<GaWcn;dqT{nfAO$7GWthle-S>&kiv7wq7pD(3)cw@&1Jh z$Keeuhw8Q;?f>#~7spF;rb}YI$4?*gVEE<0u*<*fTtv;$Z)ZzCE@|!g?B;!HN8{Uy z*p{=&jlQqab4{yWmOs)`jnZ_=d9^-#S!BYIb>fTX)Q26(I6Ldpvz;#v%82XQ9t!!l zQ8L;5jQvWFd||8g9p))~S~3#@t}J|V?^58gYkiltFV)zZx#r`IJMRV6%imhqY900T zP_OREi&_5CLh}I!tIWcLr60H5e=uMEAD-oZnhjemTi2WFy8oLbbo=223mK_)=f~hx zfSV`jSS_`<mA^ka@`<iyw;acuZ41A@ci6o>BafvZu*R-O^B=dwOXc#YEfSSW6)rw( zRoLiq;0a%8pZv~>)4S@Hs!ck*un4m7FW~2$&&hd8yX$U<eu_?L=bdq%!{F>0=9DI; zo`v~M$)|EQ<~Kg7a5cWn;w+)$CSfNe@h-q)-hO{|Uh|r;CDHxMzO{*n=qO3{T2A@s z!ICk_G}C=<LG&%D(qv(gTtlzQx9<-$T0|<ii~WJD{PV7??>}rP^|B(@%D}NRVq-(F zMhQb)t*nFK?#hiErWHAJKF`)|s~3}awEV99l%j|w2bRBJoqM=>y4Q=H=I4?{nig7w zXD=<hx#*>;%=G-Pjlqpl=MG6&T|D#gZF|~-f*T(G$_2r(A=$P*+uu~^UgurqGJ8$< zf~m8AzdOcq>o3oO@F%Z(H2ypFTHn5*@RWHH)5`A3>?gNAhov<>_+BK4b?M){KY_M? zl@A}|y}e4&(zjh@mT23C)F_7n@q-y`v(9$7yu9!4YZ1bHXPS4t$AL@z^8|#S3DoPl zpU8Qj`ZnsNy?}G%V{1XB{vCzkEnly574R37stfncTorfrMp3()krwyf=j%49maTF* zsI|jY`S-&&-8cIiA9&}#iRVr}_03azF1O~xeY+(mtuV5iyivP2j{n>LpoiO!$sA~5 z_ArY~jImyA^~27+zgYU4n%FhjpQRo0=Tbk`96idwcIYg7_1xd<Iol0HB-)sc1S~jV zcv$}MN~6UsVLtiuP4-I8xS!(1w%pXcH$F#V(wu8rmYHdK)4M%|`cL#7-pZex<UXlU zbHd(52c9TxX;`tSewCo<=Q8(i4SElkEUh^Ac{$^PdC_bc8Wq7Co++I>BXXWeCb;qD zLKl`f8J0&IrU-pIb6IM;#>7vue1DEvugy2o>OHnYD%tS5g}28!)0y25@5s~?Ry<D< z{;0Z9(qHF;5A)mKOy}S1-CLZotoTEU%%uzEDuJhbPgw>=Wz|leXZ|&k?K;<T%aC~Q zrjKW<p1bfKt~*y%l;~r*_C$DAS-WKX)}uFKY`nxZGNgYVZ|d~il7IN{mZ@yNpCxnD zi`|$zMMd<h<_|l8&7xIn*p`NE>0Bk@Uovsk#RXTkp3ce0y^+wU`ItNS*z<}?Wj=|u zwo#M!sq)&)7rtyQm{C@3W68GKdRfH+`~2eR2dnji550HME4s>a{6HDc@*9gXgO0Y$ zOHyA}=KJd3#Hd-Dg=RKh?y1h4=DcB%ba8^`-Mr!p0`W|R^N%q$o>(?j;$MJVy#QmK zamZrTK+{RxhkniDn_@6s;?BPSrmOnQrXrL3O-|V|E`E?aYnkZgoDI{SyX;taL%Dj{ z{r8*)j+!x@U3Sdj{^=A({qTb(bH1wu8S^SED^|%dh%D`Magf&F(eC!W;!=C+N30HK zP>Qdrqt&UKCYyyh?YB$qf6vwYS64JTC)aIVlEeXrb-S3(OkB-zZ6n9bj}9KK8LSt) zBTH2-nYlYL^(0*tQ}3MhPeXj$A9pEUr+sQ{?oA(l1a#i1)$sUeyq;h1B46BGrQJ?x zm0YL(WTqv~@-<GDxpZm5sTU5v3YXqU&3u(3)^>WY;wFJh@_Q#U-L{_db}COmanD(q z3UfW-6L;Q3DIZ$7|K-wy4-d#ZC~7{f{rSFTZdqW`TG<}6Xa7Px?yuCTUEXXO$-R1) z(^H*S(-cp<{ktgV1e5%$96za#FF1L>Zu_`8>GY>b-a0#+R#r#0DRS5JC2AyFY-ljh zdFs5J$4Ty4L|T{qQzuL3d!jiW+5OjQzO*I%nAJSZ=nku;S5@0&_O%z^xNuGLv~Aq5 zxNT{qSC?q$se<m3zl#`_$*{TIIZ^fMe5K#j4<CK>_ilYM^`uQ|*L_Xb^M>yISFYOB zIPbUmH~Zl7BlUsyf^~n|kJlGio6O^|7O5`@7JIWiFGxSs@XizS!zOdTzhAI2zU{?@ z={(CyKHREU6ji6fbNbP%r_YujxT1ZyL}Yrjcjt#Y!h$<|oZhJmGA~O!6_$5yd7^jn zu`|6t>lu2O;{w;Eo=>>xnakaJrgm}D^Grj1HlYPmYzyn%-@O0uS8__q8<#`ZIxX6l zO%Q5+SIoUxr}qudhid1pU&=e3SIxZ7c=Yc?t+uykNL%(-k!dnDe0622)`W+f77C@w ztv{VpqQ7PSMi1Tvt3GY}dnM)0d~?aw3x2O|=-Z#2>|*)%{mMy`_6tAc72R<$+es_! zxcARV=fBSSv@~3{TI%GhPMyy`PfX4iy&|l(R6Qss(f5?6&nnTGTeMwPKlwdjfksO} zl4a8-h0|NSY*H4)@2{9K`<Bkq=IKX@WD=sXGNvA9n7VRDprz`mEwiHb%yegH(b02T zyF;as&yCUih?BMBq%2#0o=t1t?B%*ewH1HI<BdMwTHuf`>mxqHeTnEY?^U)dOV-5} zT3<g>)X$~!UB62#H_+qAtd|<9rx)!~WIn(C+s)~9zD!n6*`nqzl3lz)#kTR;hYa^$ z%AxMD4;LkgSK4fOuz6MCMJ=s6CsUsa?VK}_cfC~4=M5o}jc505iCpmXTIBN$e_x(@ zaI~O2(S8wPonOjT@uQ_(>tyQ{0zY)?&H3bUR5_iyU+24rUcE}h+f@HAvNq>6su_<) z%$P3E^**>_{>v#7XK+^f>i7I&Z7ct^tLxl7V}^ef?dEk1`@iq{p*4-K{%DtT{pLf8 z)8vHS#~(}<uQ(IAS9V*9@Jq!TYA@1+UcTeL^fo~8QpdeuGyi?_7z*bt?sA`|JpcH~ z=U1OZH`VmB{H%I3HI})mb*>K?tNDE5SN)vkBgHt|$msNW&^kcXiKiocZ>nm{o*mCz z#TYT~sEugio09)GoBo~-)O`@bowaDK!xp`nvllxp{2J17;1Xn=-<A$x-BqA<epY{; z9+K42Ec^r&pCPQfu5%m9MLDiTPv5)#UvNX8pLOP`a~7*@k}W5x%~|5<dr8&f*H(qh zZngCL=|5R6ugQ8IYsPkU@9BxzM^2iqI=Pi)=esmN#XgyT%cQQ(Ki|LNUrk+#<)vQB zm&Z(BhFz$z5B~H##qaUc-{-~N#P?+g`)%>`-6C4^HP0@0mL=<VBkN5SZ+wb#ESdZ) z8JAybwmq>U^OD3R?PvBEve#TXaiO`V`pV;U(c{yrJ=7K*-;uYOX~W!Y+PRgNrs?O- zEn<2T7_jGAm~vh$*Ye#=%kB1xz7W1>dt6<odc_g%IWAQi%U>RQ8F>GwtKBR1mlqQa zzO?z+NiAb{{xzB3?dH<QoO(+mj_~PyPWk!Q_8)KYVcUbewptlkfliT6D;}2X*RMHJ z*tYIrg<<ydX+6_rf4w-Jf2!i6x1`=DXR`@E51qEMl{voH!A>IG{qRKV#Kg>cwaXt1 zOy;$JOOt!pw(?W1<1OanT>thi*ke1dX!7L~+O;kR6I^*VEnJ=G^F!KFb<*=)c}0gU z?w{XsG(U-t^M1yU?5W3QyqE5{^T_c^>!c%R=iioH!G8FU!oT$fd4Wguju<m9j*7i= zFMWSvoQLk3GwV*}uFdK_cvk-J;h7mclgsiXmLH$wcX#oTa+~tF-P5>wjs9_`aqsk~ z`ehXS6=ao0{ql^4rZ?-IcFnXuEztHRfsyC(M-jf$?80BYbZ=$vyQq6{=k6);{+%%) zRTBy;riK;B=9{QT8cUvN^E}el%~NRharwTa%}?5XBp4NmXxo|}c`lvyN?1~}E&A^d z^E1-@Tw$LkSUhIlE9WTNzVv`qpZMx3V|KAESw<aVjNEKtD=zN*Jl$=U_sm}|ZZ(Cg z<^NB6;iSV?>1}E%FQxwIE}#BtTVL}+Hpfi|^t!y--*LUYBNV^q!#Y2Uu*}T!#}$g6 z9X2>TXXmWK0Et!CLK=U5IFzxg<L8fFaYnBHlG3-g|M+-aBK+RlE%vdZc6om$>{%(^ z%k0%V&5nEaQCYPkyyst@O*!AF9{2B{eZ`xY&+Pq+RqZO)+*|sp`S>gL=+*Y+YwkT< zW?%j$_eb&Z%a{89U7K&c?%$n_%KG&k=Vh&>f86=_x9Q4VtrM|Am&JsBWh*YU-m_`b zv~yca{vEFE*#~CSdOg2V_s;qDqIEk!OR@HqajrdeD+;m@ELG^&?@CVHbIaE(Vf&wz z3R*W-d)Mgp+SD=-GdD5xJA>&S`M#YX<-c~RmPB~J05NYlINi@ab5^>kHW;*SEPi{> zH}D##D7WY{GD(r|W?QXaJnfwHgmaFdwQMoo&wZ?>7km<*U3ol<vzA+>WNu}+_Y3=7 zE$4O?i*o)=O}%&Z(oZvw=b*)6=eCw?+c<y!9MBT8`)r(`WniEcYidHf&h1&9`t9w6 zo8X0H*)wyKL+dSPmTzs@#|xHIEzw=*tMX;~jLPuSFK#O=1}#!^yKZzV?b(OZC-$sf z`Z;&PIgr-5*)QjKKR27x`X_$Da;3RPPu$y3BG+K!EoG;ZoS`4rU2?5>?Wy90k8<x% zUbpVlYQ1@<@9&xAJvm|`>(S!Vl{}_Rt6!ep6Y}LjSAz1LX+;;N9dX`v=UYTU^uMDs z#4kn0OMT}RsaoIvyC(bH@9l11te@?5Z~ER<<-XNr|4E&TjEW!J`=71av-O5p==r~Y zqZVb^=iL%oTYMwS`%8arr`?&Snaulr0}fQPO7_kayzxlh_VSI@sU@H#WP4kB(oWr2 zm-;11@~^`5<x!k}BNjar``T5X|E%<2_ipvjze|ssX)llc^~{q;h_5E?LDH0ydOCh; z%M0b_HShJTR8u=?r`peNnUSU&=<K>K#M`=b*@+N89Vy-Ghg<)#?bt9Uf7-(X$6LN- zziNFVYBp=fnU6`P_Po-Z3bsx4f%X0#?|-YT4z4@&gQ4j1lpQ_Q?<>qc-4*#!!1MgP zSwm9j{cisc^DkT%yOZqYe_-c3);q6d3*}yIu0Qmx{msvUl7IPS%dM|`*ZmWo_0=zV zLB<_>$NNtUKl&!;NIc%f?EclN%k6+r%qNFO+h=zhvmOeXGpV;@S_(@y|8sr))j5xS z96Q&odF=DqYEw^i%Drla^A>EsA1Qy$UEN^&e3!lW=3Ub#xFkQAz_6mPN>?$Td1o5W zods12g>JD=w4N+C{L>$nxJl4c<@=XePx?f^)wk~6clr<0!cJ-b(A<4nrhQ;Ybt(6F zJh}fq%ZBtz9>*RhXB<`ZeZ*m<#LK+srdmdFdrM9{kN3J7$F=)epWIKmc45zRlb|T` zov)TvJk_h1u=4NMy39U@n{N(()cnXi{Vk6GkC)r(>cxw<uGzooO`ZRgD))QWxf3<_ zHN2hP`_QTD^z}VLHOlc{->X~<*<I-~=j*`_e*E0eXWxISC*#gj*IIw|+swrG>fFi7 zyY4*?pZUG+<6N<?arNR`zaRbf^j`h$1>g0hUzWRxS03pW2w1OEz0X}$BjoPKLQNsH z^4<Ci4eRAi=LPqj*l=+F`pADJT75r-PhFpCd;hSI$(Qo#kS^D+bKiM-toWX=-N~x{ z`i<rJJoc>KJjq7#o~Itx1{_}FUf*y0_w7Bazqyy{XD(a+qDHv4dvV!5-^tqhRrg=M zXH>xuzGqpnalHS-$)A4QIeU}My5*eutH)J4awiqeE`Pma?V9~Y<rCkjyt!|tck)=Z z{q5IG3##v4_78vFZvA8KIqrS4p8me0@SytR@tk$Oa}1->XY&{B+;^?){qmrqwQKK* zl;3ZEEU)=&Z|D}z@NIRGX@7rhKldy4%JW-H>vSK0iQDOn_fLO65U9r+pKnoQtEPQq zxyOr+XV=)KyqushF?&lETaX#cS)Jgxr!EuUmy4a#ntrydme=UN`7A*<-Vc_GU)H!C zxO-@g`K`r|TVsl2H%F&_nUq<_e(Sh-y$@H&y9uTTjngagjv39W@RHQz3t%dAUu(Ve z=E|DBgNnXAUv@<L#@u`C+q0wc%YM<17rw~qL?3dx(KfCAuw;X(#zP_A7%5BUPde@! zzGeQ~kRi-!vOjs6V~OpQ74QD4t@spbw){xuq<np2E(w|0liqzat~U9)H*d1-tnZ)H z4ED{=JABjq%bCwRFKo-$y<Ot%rhoTX-rYC*_F$)7(48lfp1E${q#k{qr)BcbgnMfj zJC(lgKL0^{)5Wgz<<o9iZ+gl;CGmsd=`BCys;;Q;?x^6*Z+X?<k(W6qx3r7hVdIPv zSB{RBC9jt!wcS`QXrb!e8|dckFjIHN<*sXWKIuHq)@*vcaL2yq*Il?zTL0c!@L%cw zne+`RT~mKdZ@sQ}E+_DF$TQ1@>OaI5&wVZNTcgqT)WiouH<o@&e#A0oI$wuyL5qK< z__36^KU8>^nf!8>e#8=ce*Jvmedkr!?!`Z2F|GQm?%?sPRbDLaFMkBT)OywTPy98~ zwJjbxKCWcG&-~-H)D8tf(HsrNLpsaeOp-hHYMbIo<|z`2KZ~3vu?By77xU@ig>QFQ z#C6_%{aSordja46?Ydw0Ywx`@<x_lj%%busf&bK2@1FYoR&cG$Ety)IGp$eM<kx%6 z`2J&&^wr;4@#YJgPY2d3ypKKkD|HH|)zTM2=P!F@h`1G(h0nTL9{fZ9-Pf~$j|^>| zORutf=)P@}&8yU<3*Pkp*nUHL<*VOcPal%^c=Xi&LzB|N_bcV9Wv6Xj_t&UXT0`jj z`dP2-UuaFAQgPn!?A3>Bimd)^_k5lE)P35s?VN>u&XT*FyEgZBEVsF|OZj2r!~Kj` zm6v|yT#>E5WaCA(+h=~nU&)TN=X<e6ykPzp9pkLO0aZ`kH->HAZEk!0e`#~L?5Uj( zU+%W;=X8Ct&iD8=^Vm#{^sM#&&$?u#_IR#U3|_Zlm8r|`Q|tbv?Yp;Now?8RbFZon z>u*%65#A~iue;)%*7Tz<tvkMPZr;9CCN7X~_4PY!mTNx6>b7QU{y9GR(8i4-_gwbA zRnq*E?(owz@@ulh{LHISh4+o_eV_77tYS&Bic-I)qVR<4=dBb>^S9N7y?gof_pR>_ zEie5(TkUM&6eNEu_}-Gj=}%s!pAEg?A0d6=yY-{UzSGu|ge-1t3tRGQ#-cNVna5gI z$X$Blq!d`|@!7xArSwm|*YmtIwNp#}*Sp01n71j%u6y4ntC#0L+!nubAm_&2GwOCq zIww~}CHiTpowZ#!@$BPEhG#>>9$!*?y1&9iy7T|1+?f8%`)Qk)p8ek4+0nx5+a)G{ zZe~GlW$+eHGqbqTzx#4cs@9w-nja+pvCrJRt*Li!uhaeSz87AxpNiO>^I>PN-Iq^6 zf1G~H=I&P7y6@y>zV$Qh1OrqT&HUMs_TuCH2_>lx*Dk8PFus4=H{gj~qW!`(v0DyY z&bhJ0YrnVIZ+5Ax>!tqOo%iBq?V^uiZ!Yc$O%mgc$oU<9Q7pYj?a4)-lberM?&XY~ zc&W@`T8@kIS;73og4VmU4+zd_ou2tyG*W(X)AV&!->!cZV~}3*asBSvUoTf}Ev~2p zog|?Czc>1B&$0U#Vs3Z;$u()(RnAp??%B65x6}`7r(d(ojeV50-FfxDi%+L=M=zfq zo^$Qx)|XS_`sHswUtJt?*6)1u{B@V4-*P5?PAj|epU}#&&e4@)cvp_GH5%W3E&piW z;eV3rZq=0DP+z(0vi+gcW#zv#vikLZ?I^vmeC^-M$~h_jr>y>9Hj{CM-#^c6E#Vn+ z%U|4SUTijJi@r{~=i}qYf}{GR_Jlq6T~_>WcFAKqlkXxXSE@G|e(*K<&wM<dbGOuY z+oc{aIBFippPcmDA$_lk?2jqmKK|Lwc~{@|x#pbKt!e%b>wC=P=iNW|+{#|5YW_El zItQun=WlbB+@8zK+sXJ^%=Oae?JxG^ekk9%hy6qRxxW5C{^1|aKMl25e09otiFnIX zT-Ri6<U?`{7K_fvJYL)WuJlfN(%Y`B$LBw+U_Wnt*KW!2xBq%p7pL%;-OikQ(b8Hs zsK|P4?ycMRmaYAEarx@Q=U#p}mC3gG@?^dL7p(=VqtqWA&v`y4qO7chr@y@9&N8#~ zyL*$lVoRl&jl#D}ok%fZ*u~yn)4KehxJ0V%oGYx4ww}CO>7;7D<LKr2mqk3LJ3aM3 zu;kJ6>H;>g2gx&x7|I`P;P<z&-qWB6S~wPV-oLtH_GUSG+eJ33uRf61s_=Yrz@_8k zn-3E%SU!6ECZj#<Ewhxjb$f>5+oZ+T_7DHvb>4F}=i3{GUB7$go6OeT^Ef;uVPE#2 zpfd4e?;q*x@cv$6e|w=+QSq`EZS$w^f|yQoADG8}OwTy@ul)lKzq1RwFSq{vFU0rL z%<zTko2TopH?Rd{eXyNjZU1*qhr$1-+sCJGVTyd@`zUgCEkjbtH7hHpWqGm(-yK|Y z_5RYyzmDwG-NKxBRVg59?fi_b#X3?C+EP}#i>0i-{7C!J<!grbZ?X%{Y}qVkZX3OP z&)3U#`%eny_pj&6h>?37%$Vpe5z)AzXyeRpo$jmooU7O0E&O@v@YUQce$jjN?DD@) zxqVH2`4Qct2_Gdbc+(vg#uhYRI@$1OUzJta)Rz&Zi@t30IbL<jcHf$pH(W1wel5xQ zTJq-3>d5@JC2J~!dbT$v^q9!rwq`SYtC}P7Q!c{$`HyQeE>G@$c~yAARcqN0`@44U za)0H?xaj3{Ht)W4FLvX0<+pD;_Ua0Jz8fYU;yJ%&LfC(S{3~zYE!g#T+okDO436Co ze0+R!x89n=J6=}TvD7_rm5+}VHf=U2klm11b$)|v)h`XU{eO4dpBKkkIC-N6*PY1M zmUlLOos)Co+P7k(noqYAK0hjZ9=r1H=Y1vNPtDfd&3)wX&bMwh_uJeXMSB}>&po|h zZnk5wPad=REyqU-C#rS0hjbUjI&I5a&wqP!`fiU0YQ@cwzkAlqpA({f{7O$r?d6Zj zY%(WibI$e?Qdt;&ch-87!$Qw??8`Woze~p_ra6sispNfLTd~fxJImUCNPf``nbpa( zWB-Cae!KSfhWe}W)F#a;oUQXE`To<h6^2`0Sr)85m6o)0roop#BGURfYMxJ+>ZYDm z2{Mkm{FQl{ozI1m#Wy&41mrZ<s`!amEzCHU&E_ex`|4VrrD1>67=&3ewb#sKG0X`! zH=Z<$b5@;1%RYte&lz^w+M6x79Fe7#Q)O_DiLqDOym6tdaFPF#v_;E~KRV*?V!Y$! zq9-eJ(zHy44_~&BTzF@JWV@dCs>&PXOVTDSdw-l$IOg#$hN<tR9o~39zFj&?G1=lw zg|S@BL80}tavNTEpWUF=vr#2i_3o;iBa@|0{wh%XzG0K3=d~v-J13kBy9rw5mA89B z<wlTLit-C5xwxroJr=3SpA)|nu|CIjlF81DofBC7Q;jDrImsG(t4E-D>RFFPYT~=a zHwCQAahqhiQ^;espw=Rg{wG?Rxo#S3PNk_tPS!rLMRK8?_Uwr%z6W_$P0`Eiy!B1^ zf$^lmY5fm9m5mr?HJA#yZd-8Tmi>oWinDCj>2{{Pl|LZBb7)7yTE)XBZrOJvd}#4} zaeLGHHGi9zytK#@Y1`K9dF|iA%RLT{mRX&vNI8AVzGU{k$D3}1ojP&Ko~OYt@qkVA zMD^_Y4Mm47k|YltV~V);PcWM;PT<G2R}R<yP2~Ubb<Tk>^OL9Sxn{-5Y&O_-b@HZ9 z{fE*74AlA7Zr!%z&ti@@tM3RInk%X(3M$TxSQc`IS1R(mJEu+0^W{pX@9dehwVvnI zf#$NL=w$zE{|uQwcl}&xn4431>Xdz%W6$n5t&Kfr6C%GmYX?3!zA-&}^669d-)712 zoYrtXcEfSPR(lg>rm3u*Yj-PU|CbP1D!<z^>9x(tTk^9wmGsZZ6efrJUHf;z=gkq% zDQ3xUB2L|spXJFUw*1D7-8(mZ({B;gddj37c>7gyO4OYL91%QT>yEzNvfpV@40x?r zVv%m%^1q_r&Tic?_ggqyFj&%POEFl~a`MVT>$m!+_gr94?l(NYU}~cq!}DVebH9aO zag;EfxR5#ft-kj1JIgj)`8R1<&jTiYmko^E{w7)0+kJGl?$2>?$un+i=j3%+zIbEC zCtvTc`nSU?<=<Y}pY--=$>!kyU2kU^FP{5rI`6}pikmCzk7}G}-#zzVcuY&omm4qZ zk0zdET{!n&_?_i3I=5feADwx6Y70pAbWCbw)&EV4XKM#|zqjYV63&;o{LKAnck4bM z|L`R3i9(B|#-@MaPD;;ICVky6w7@W3BJ#iXL#5(xQ@`#P+G8Z|16mE1`OG=`+W(@6 z^D*a6yo&EMoW*S$`CnVmzgSR5n!)SO)fmMSYz;EpX4m~T{R?Nh{A^cH=ik$bMcij~ zkN<nRU~j9e;_-h^HCc)myLJ9OEiCm+ZCVb4#%1kiZ1Zy%G$z|Vd$v4>LBrVp*s=|4 z{y&X0DBc`%?f<DMb9PQvcwL{`bm30w#IO5}Vl&@4fEI_@n3g|J`Mcid=`8E%oBoBX zPwS11jr^}~zTbBC+%0{Yw^PNt`!w=7iv4aazde6l+HUnJF&p=~OYUHIuZ}$S<fmu5 z-NVD-F)iI0r+SLsH8Gyw*=+js&e5V%cNvO59En{ZJ}c(Tt`*DtqSss&d%fkTRqjT= z=s&f~blq|co@RFY-?_BssJhp&N5ZP%A3GDLEeiM8(Y>LjMVdu$+O!9oH#`h^a=B4` zmJ1K_(qCI_3rsKHsN{%Kzp-ti`YkEnnRmi6?oE?6m))^bx^vsH;OkFziaq`L^Jv7p zJNbJxT^i0DH}I;Cy(n~OVXo%;VpngDV>RBVziXR+++}jfzL}@KJKiYz&=Fzz+>+S5 zCp(4n7B)CWrafsrcjIiY&F4+?tb5;_URj#xAA2J>`oz}OnCKJNKg~Ouvr_lTEvJ31 zt+p0hH*MI!&VNq)+k<;Q56Ruhj=pjDQk2B9Dc=k(-;zs<xxG26(En=frIx9C+`TIK zjn}>htuSM?1FbOokeI#dLt?hp$HXMP$v4k^)=bQr=9hL$?UzPiv09pOY;#Xm>{Nc? z%QMy9zBpAgW5#)tm5rCK{4_9}|MK>;Us{)SeS9*&E6jcwOf1X{5?j3bYhqH?6|0Bt zGo_Q2WUqo&n7uuGMCNtZRXd+2uVyWo^x{<Qj2Wv<XWqPY^|!&q6K|xR#Aa~SfmWD> zU!DGE&FW|BOXs~kGC%4Ic!k-Y&{cJy6=pvdPx}j6VRmPc?jO(!vpe&nenMB6{c?t` zF#88tVfIKKvcl{?WQEyN``4@fgI1U^DI_OoX*GaWm@%cCvG^sW09s+jIFnzeR&>Ho zhwIlEXP%a=Rh$4?Va7DGJGEBx!mO-D&<ZoD6HeV(ryFy&>{=#w;@F7`qAW9S+uUkW z0Ie_+Oi2`a<<$gQVdgub_2`<lT$?sL*qZ7HT4APl0<^-6Ez%<9)+q(h3NxvchZC~0 zn?Wng9w~rUm|1nKU1`&Sy26aB1#N{HhvC8}zOR;-m^y)1n7Ks2SD0}cPFx|mE<*iC z%f^IH_k?2?3J7Pe0j)6eQrtE#Nby*4jq>E}y)Uv_K`YEoZ7ezJl;eBVDaZGzQ;zRf zC+G^ZCPl~!Gp#lWq!ng78%;%dH=2g>ZbV&Swo4JR!t7Psja9AAIlfb!#rPNL${HPa zjkZd0RLgxkf%SGqce~Dwh-ljs!!=u;I*T2S3AayCEZxHD0$O3_n4&mktEvlVg_(28 z!p&P;T|g_$TvHZbE=_d-tuX650a{@u6geZ|mX{J}g_&1M;-akVPS6T7(}|!JX6l;? zG`4(o0j)4waN^LzOJO3B77e#1DS=j)1*d>kn2AQ7Te*J!st(JvQdi+}p{u2?rPosC znntGkUW=SudhLn4Wp>fNbsnCxYZj^a*aZfu&X-X0oOWH*Fg9^wrLKUms#)T#X;BeR zBDbh^<?PwAcITl*rdLEaZWR#|-L*F>HE`i|?P+3><!`03x@RO7UNo53m($ffLql&D zH**mavxxm$iwE=9PU`BpQFLEp*4wQIuiVUj|JeNKt@9sv{#CC1AO6X5t?sWW*ZN!i zGyhtA*IX;_ZMXF6;vZA4^>f=p8GnMKdgUK#TD>ooKV|iD^1-T0%k_iL{<Ghrzf`W` zRD&G@1H-=DY^UIgIkA4H`I-y_-kiPvL71WWK;Ws>iL2SNSn@M+4uwuuOWXWE@ATp3 z;+ZGUoJ&iYE2Sf4x5!_%pjYmzajfeyLyqquoJ%kEGi7}WTm1N&(XHk!TXgp}EMRXg zc)`1@v~v5$rHt+cQ}R=!*>V!(zoqDJOSL;$#$|a!=zQ$t>*r25N{MXxBYAh_470Oe zwtu*D^X5GFsltbwL#m|>zj<)}4(!Z1;-PNUm3gtbZ{F&ANBaw|CQ7Kg%(RkN!WzFz zE`FKw#yhSI3@nwo*-jz9&Yk+lP;YUR!m|#++AHR~oz<E9+CYFc)<eouQB$RN$pn!} zZb2RPW<Qc`ay)KsO!+a3ou_2Nqm8GXmA2m3UOFYnOA|!=z5f0C_kXWnXM45YZ{8#~ z-RHN^%lP2X`FHcopML&a{QuXlU&VE&OP9-qUegWTS6^9ac_aDtm-TDE{Qv#?x4u{D znkxIn|1*D|fAD{%ot<6XErw#o+{Np(d&&-$wqBk1L-gF<$XTUlEH-cXwYk(!@{;|M z@Bq70hF-->y23NV{y+aS@o#*o_Xk(`|DES|bm$k&IrDSzp^o@Rv(mk%hR0stIB(`z z*GRcf$vLM!>qIY`A2KIW+GBUfzVi?M^KF~`^Z(noZ$I>P)K)C}e%wd7)^WDNo=cDB zd~^RZFHH8d`JU+$<G$D0P0qYDZ`UT>=Q2ND{F|To?Ef3<+Ic=+KQ_FHc&m0i<W#_S z<G&&Il-GZ`zd|<s|GE!e^77Yy=I|-Vr9Szq{@%9h+7J8IvorEvKL455@OES3x7TlG zf7x4OF3~Ic({9#Z`{NV7gicdEZN2)vQ2(N}fBN-5=6>5c&#zwp#beLDtvA1?eGa_V z{HLn=#7CRUDQ8}qy-b;z_tW~t`dg>|FWnTlk9k_|@9OIBrf*gL9{A0Yd2w0AGm-!4 zHpf&xDV>emr)vA^&w6l7%?qA>>-pJ|_o@0nuT6QaFnvQ}t@PP_*}uMDiQoFIa;yCs z%PX@^=A5nSz4X5}S9$+u_xpdmvlZ9O{_;6n<Fw@~_dkyfckiEa??u(L>pE)#_p80j zIhz^wY=76^O?Q4P$6vGgH0RqP<DKW`<*Iy-vrOlmUTvwip?tI2p4(QZXTI(%?f;r~ zZPu?{L9O4duI=^F&J92QMRG!T++w-qN2*l6drsf`ZmH4y#qXx)<S+hrK1zC9n*F|P zlW*aB?i|;Bp}gkvT2A{g{WsH-<Nj|~{H`caEm?YI>!~fF%Wi&_y1D(ou;ZMIe<%KT zPqlNe{bzslzhwQle-p|c&Dks2_rv)A$q3=Pti8YHOs{78Q5CZMi{p0xxbvS*ZMbMB z{C%^1@!ZP(Q#I?heW<_ht~ozonT@{THN!fiX&2{RZ<`;ae@MdoM?Zt~<$VIhx!>#M zi;Ma{&G`SbUg@*O*WY*lZ#J60I{DxEowC+n>L!)ye*LIf+q}Qyw9U5AABMZrCAK~J zYxO+wSiz&D=UYsx=l(GMuF*fWxjy@&Vy=4bsd+a~{9kM||FhnSy69_~weI)N?Mmvu z7~y)yXZ`c*e{cRiIIG~$v{zFTuQcym^4t9Rr;Fwi=f6L9tNdzk%i(^vkF>D;=Xq0i ze&6byk-68wcHfu%&<qLAm9f6of>Z|+t)IxZPw&ezUlyyzz`z)cD1<^g!KDa=M8%x9 z*B)jzCy2BKvKI=n7Yc|M3V;|J_cU^EU#9rKi}QJ-^KAd$uYGgQ1y54(L__iy3uT_~ zd+-0;^7Pj7@B4T8f6tG-UMzFGc-FGx=if;D)%kv9Z>iYnO*V1I4S4GJwU@l#lsvU| zb7I-rv%hV()?YQ>|F8F5{I=KCVV1AwKdqWu`}^3<{k!5W|2<v2?|uCL>(49eZrNXd z^S?IrcGbJ<?{9DW`|Hg2=llQeU;j()`uEk}9oAhf|2@a`>U`Pj*>I=*`VKnTn7DxX z;b718bIlIhkd++_49qJK!JBZ2I0Nvjs+jZk?ry&;jv~iDE*1=Q?5WuAy5|w=dWrCZ z-tU<sf_^akV#s^Xtg}~is_91cZ7N|QZC!_2x{l;*JZq(1tj4%WDB{6?`SUgYpH8Z& zsLlR7d#>gGy?;b+MzA+GJ~&~;{O!BWs@rdq_#<T}%=o-9LB&FH&Zgsnzkes5Opv{D zS3h4RZT(F??=ydr3QTvT^-pgyKFHbmI^n=SU)|91{d+drwCg6Ht+tuLA$RNX+y}dk zlonW7=zWY?k*dF9cl^1GHh0y1?@WJJAH4ja^1~rH^=5aW>y7U?pR3N}b`Cl`bAsb} z8%vdsU)NOs+mZU;s6uqlw&R)6+`IVXShhE5Z~Ex7B1bmmg0VlFv$uP*;puIOJL~7n zo%?s^u3f(t-ptvzalfzU9ez3QJL-8Jyqg`_Y(Kkvud}_JAGPk+t?PU2w??g9clG<z zr%%g!-IU+5?-I9}T%mSnYFBzQPt~)|eQD>}wyVDT8*KaO`mf6`OQN{Bxij@W(w(B% zr=De#{BlP4?8`YvHrHP&s=clJKV<*yx7+6N&c5!L3brU^`OoE-Za(;X=8Vr%u)vc0 ze}ZeHqoP)on4MUVKJSfLz3yDzeP_;}4>ytqdEuMV|B(IHu3am$l792U2dpIZ-^#i* zYu4nXo4t4q5pn+)Ri#!F8x!;Add`LK;NZEr{!j4BuSx4~E_na?C{NY1lXcJMd#xA0 zex9v1UO(-EvHz-5_E*>4_dd5EeO}1i{b93sw^i@mk*E){;mX8%t+~8*=g*$aHI<Hu z+b+(ti7n>o{H)dIXMXjO*!<k$kW|6U`c-l7RbLm++OX4M{__oUSxdj4?Vj`L`mH~f zpQoH<{jOSPpL-?k(5~OlT=RY|_nL3~TI$04B{mx?9p=9l___PM{nU4?m%rWlvg<+9 z*(Q+Qn9t9@#;5(8^Z)6y^MB&g{>A*CKGXjF|EvAq|DQhgygv2u=l`2N{++++<KO+8 zKK{MG>Eqx3n?C-Yzv<)e{hL1izQ5_?@Bf<$|Mzby{6BwF;s5oU3jgolRQUh=A<pmr zb!Qd)f4?ZQ@c)0OT&;iq`SE8QJhFez|6^LcM=K_>zea|Ef$usZ&(5#Fqm5{(iaBrR z_D+=1<Y|@d5H3{UJJM+(!2ZZZ=0x1fS9aHTr+Ye_KmRXceO6Zb?o0t8jtkB6rcXbZ zU?9Q6)(oQ_*#G(U_4U)|=jYegJhJ+}>iMJMrE3^ce|$gqKk((xu7Acg|Ns4cdU?4& zSlX!O=clLl&+F~0{r%1Q{RZ<?mM_2E-LCxJGH>cU|F8R*%r5?0_bvWw;IFc&%O+oc zd;jO$*pN?ap0LD9?TuS{dR_Y4J=JyvS<hEjy?!JAH2Z$(&Mo=Xa<lj=Sy%mAUzz%~ z@ArKB`hVZ6U+7-?`{U!|?|UoScCFCocCp$k_tMzq-#oQX9eZ|)r>>6k5WoJl^3{S& zWqp5l*)LUpde5)=fBgRX`2GLt-f>y|F7{2m_(|D!%6a3+`O3E6jehUu37mJEWA^d; z7iKQ&eBTotQ*7%hHTSc{mReW4CGO%UR=x~*_hSL~txcz7uZPI5O4ptLvG)4EUuQ(u z{HYI1yY~NO{oFl`Xa2p)UlANu{zj%MtoEYbqh|dJb}Q-{ZNiGmb~)IcQnddr8ansy z&k5&G-<SOV-cWqU(SI*&ekp%__hjk6sefx_A060s!}gzBv_k#A?{#f!z69RtcKW=~ zZ>HXd?Rwg8C+>_(txvh~eD5EheC_C%qq^Ug%VzI>|AaT?TX=o@`?J3^YVZE-e`WTr z@a|ugeaf5dt1g&Ld+Bs}<=IT}6YswrxBukx=c(jb^L2`kjo<jk2i9Jg&sh5P{i}S* z`!ciSX1<L6Wjk*ve@XVz6Wzam_#XH_@z{Gs^;&)AugBU`c3mhk`gt<`xbv^}|L-@g z_+vGF<(HScWMRp~%HsR<yY**3<sY=&(V}gk``M)S=<RujlAj(~8gV|Qu(3KR^xvzS zqVum6&geh1^4z)?J09h}S6qE;+v;?!bE`hdhsIQG{}cUli@W2~Yqr91%e9M2KmMuS z`r0S#>D52~IG=|uwb%R~X1Dgz<j-yAG=IslKChV2S~G_^^5vRKjmJcHr^{v5e|bD7 z=4fT+ow(#@p}#JF%71uS%T{nP_kqoaJ}Z7c_3y~r5V5J7FGntA-fCZz_9^|}|5I|a zgnx(6nO=PD)ZQ?en|VL4eASvCc2oXc#82g?BDVj}xShE3w|*7#`PGx^r)x(qlv@43 z?MvO!N>-26F+S7lzz#m=f2n<OPX_-N(|LEd?(dVF_br5d`M3R|uks&AO(|br6PzZ# z?)RO8m*-EZ*PegvrRL`C=d2~gx4b#y#`sih^A>BX3f|wZZ=5{-{gI}Ahkx)n?#fNC zLw`*Mx!&mBxm4y;nqjHN>gDUEJfE2Eo<6hB_Py7?b#d^#$#rC3$Im%Ur3%?ILUmSo z3m4y({r6n%#zfPGJh{kc>vX=eJx_`#ujZ*|eI&nTfB7}FyT889{4Hs`F7W!4#vgub zJ_M$gU6<$Vk7Zx6{@C_i-`1xmd#wL;dfs!%cbR+Ve($P&H~q^Q$7ROzUVibc|7_8A zJY(~x@=vEy&Ri<JUVi$-mmSTaGM?X`gg-Bw()__<?YpbjpL;I0W1p)%eep+!r*Ee4 z7tH)36L@s~!_Oz&lmA6cU-f71r<h}_&b<27x95m-=rQ3nZ|=|C&Jug((og*#R&W2m zICb7Q<+=6A)mG_FmM4Pd_MZ6izQ#SgZtC=R*UKeW8?AnA{VA==#_@Rn#QR<8Z{Ebe ztbd*(`19BD)8dsE{`Q@}^l#qLN1H#{uAjTPC3NQ1ud<cKw(}IE|4)tnViy1Q_s(1Y zjblUq#-D!o=Dp09RsXZ^#r|LatUmVt^-U17?`8dO=+m`pdpN(O=H(CV>6xbgR^Q3{ z-!Sjt>T~nccSW6ztg-oO=vR4kO^vJhzwBQSpM2k7|8?E9|5f_gv+rEDdtx)|{D0ft za}#U*=AV7KTcYt?>(6<Nl7H-;mOc%yT${4y)S7kcFQrt;z%q~4i#sv);T8wn7f(8U zU0$B?{3E8w-M{6|T(xTYd+EH3X!`1J$@|i6y1CDMGt%C)qv74ntAGEizYgCjy3uU! zyu!R2^Q-5v7riKbu2jCm=2A%ZmveeE<-Wu$C|WXgU*1z`{|CR{U$qN;(?3JFF1cMf z#D4Kd?RBr`RepP4y(jSJA)S7mxVeRHvicE6f0tS8(z~`YUHIX3<Jz|;c06M85BORC zrk|%SPxWy|DEmEk6Taooe`v)2ZY|EM39k)FSF4Cie*I;#j@#S6t=o?O6y0$6;@Ta2 zpH_d_s{Oc&+veb@|H|66`j11)Eu78;WyGI9_5R7ln%&06iu}3Liek(|Eqiib-Pfo- zdU0;S+?o5zQtv!vD!=eD`uCb&73*K~xvzM?^~|sRefMMk-`{ATZv9o~dEWg?dzo+L zms{+LUAOtt^{M~XpTD0}|NZ}ocaQCV9rq7=xySbBj;NdQpU)lpFZ+A3^8T{aKlTq_ zl<hp{7axA?|J==eqN~2{FS-}$)A0IMzIC6#&kgg>8E#JBWLXdvH`RS>o!!jn_=hjb zcKG>k5B@GIIbYNmRu}H6Kk)p;t@nXDCT-sr{aEh(zUwy*aF(Uk`^Si6$5}93o6^66 zxy**~byQN-uJxO4v&S&@Jrt4he^aouZ#`?0*uFfKI<XJ6YxeOS&wo)h)mY-=#TmT0 z-jBIotbSY;dhFc4*tp%9Tl{wM-+Q_vT-Nd1ZsjfCEBanfS^bh};<K##r%H}|eIvtN z$lbfyihc3^^RBiRc&k*ewcaoMsp*{j@oFUFR@b8!-!3Vfxn<p{${_c@x(l^Sc{KRF zWB7k(tO>X*sJ`@$R@{w+oA$@8f3yB$;Vs)-A=}Ct@6VrplpS52`ls`D%-<PBC%WdE zFm9cHT;8^C_Q&e*S37>)HN5ouH_KdW+q>JJeyWhU^;)>#w{^aQ-LKhGPRw}877}x% z@2|F;^Tx?+wp#CJo?KlsW54?cFIoQ`&ZnL-hsXY$CR)*FsJD6M`>hN3E#qD1U)Z?v z5%1o=VSfvc|6}}Gf9kPj*(HtVD;_U6HL>>moBh%5Pgy?xlr3K|Xa2k6yO?Bee|cQ3 z`=~kp%U+o~!LljWr^cV2_x{}V=2QQE7(KlrYn>UQHosi!{<-pB?b~Ngwqm=&wrlzE z<LTGeZkrtZ&wt@#_Tn>d?q&7geYNYoYE*A@UHs|wDKD?B+rH%EChfU%u6_Kn^Gtc{ z&Hv`mNdB>V!E1@w^LMi4Zoc*GDV?xSJ9W8F>}sL+=dLxqXUunu>wmuCowcod(8A63 za~NKhy;;9e?3%UBcd;*(P1_an#rjqJ-Wf_i-_l`gb$@BVyRgTijPpw8FSgloT){?d z^`HH(jJ;P^3OlddA)zn+(`4FWnWE#GnYLU1Y3bLT>x-KZdpdBZ--Wq`g?;WjIeM3t z+a2Cn{dDR>ZX35%Uq65DJ$Eqd-~6IYMtk#a-pk4Vf1~%t^5ZodbGPNs-o~W<s4(fx z+P8}?cb|S&G&do&{>`h@w2l8o`(K!G8L+R&shTvu*zsQcrah}AHoW7%RAIjH+MDf* zwcdr+_P$#iv`+Q2r1st&`<>Sbulck8cKmbB?YHLFdB*$={C2%=V|M)?w#t>~mE*Vn z&&p@7bEyn{%70*8+^S#m5={Ruo>$Pbi~XtC@9drL+Vi*CTP=~fdV1a8lg`Kaw(fja ze)A-I{klK%PrtUazwBLh{;8GYwtt^%U9GmCI2XS<Pe!}?;=j`Whi%`i|GfXzouUPs zXMZm|J9*!k&9QcN|4*k}td-E-`{U2~r&2XOds@FfdhpfY+yC8$fBu1*sP9^H{%-F| zZP@;0-Os*stJZbbcYWN}HFsV@`1S8P#;5%s+ppd`kui4qKGqn^-vNz3uD`208@*w1 zw*P;Q-{C(q-?%4>)*aJ)%prS3*Jd7H`LaEFfBTIK&(u!ke>|^Vy=+zKhjNv$jg!{o zNlm_3_VAO&rlL)|4*lP;&b05n(aOCY!PenBx=;Pj?ukF|eewL1&ucB5^x5wooSX6U zh3omN3*@J(cU!(Hx3BlMzEolLsY3e0E>@dqZ)zO2@!w9~eB}Jzb)xOde}?^fQ2FSX zDEsc@`tSc8ZcpnAmMcGN;lwU8^;6-x!|(pb{$4C@+yByt{Yy^2)8$mNu-epb-*<M* zTf6#G&|i)1H(nk-{qP=V*uVR!r@lpn$Si!_VsiJl{QJcEltpV(jo9x^`m3GyG4k8_ zXZ1gvzE0oO&on=zuw`BFpZe?nnRox=yFcZn&FsVPf7GvyRy%L|r#|g}Uvy2||L^=? zzZY+)dKd6qQ_}s#(-$`nuBxq$y54%uc=hI)dFDs6{)rd-4*$IWTzT5ll5g*Kxb81M z|MPzI@x9lro4>bi{GX6x56w_0)Q9g61*<RK{QYI(!8+mpYrgH>eEib=Ou>YFpKp~d zcBT0%58uy>DeQdX{kf+0KgWB9OZ>mh=ba2LE44i9{{8L8m2cMXPd>Cy`P<ExcH4E% zXXSrb`>DM8>(#bjasutwr0;HO_xa88({^=k_={JcP8gNOFZtHH=D)>__0yidoS&6H z&wlqU=}p=7_fEU~`f>mM#)aSNbN96U{aem{#qP^tzBkJ27Syi1eOm1L*X^!WYu@<Z zUg&Ra^MB3%;<<k+r_X-3@Jj7$##^)ZWp~!r{pxwQ@oLRh-$`xn)h#5QL&X2BTev1) zdqs5kykAXczV+<=(H1)M$;$Wd1808yTcrN&``&jk&+FH!Kc7@GCnR#m`SLGaXR7pE zJ}<RhaVNay^2xeF+xUh17%Ero^WA;t<MW$08P6X7K5hMz<NewH7)zGFPYSj*diJ|! z>7|Y5E4TRFim&xw|1S0V&neF)?!Ddr?ZMv<B|Z=41e?t-OmP1H_Dq&c+TSh4)09uY zyt84mebrS%?*A{}dc0l#FZTPa$<I6gevMIj8-DuCz1XLp*PQzI$KQINk-EdaH;*0a zO5CN-{ju7$`p>H8)lcu1HlF(T%A7IRuv_%S%)r?D0pWAy!=6hU{SIE&_p~bZ{L-rV zmx|@*{+)R8_I2Y6M`O#Li%opD>dxJY@=No++_kzj-R@Rp*TIAj3qSIAsAMg&FA4q0 zz#w`C(ZyXzbT<~CLQof%dq(Kh(&Ob!U4puv8$CQ0Hb=<^#Mvnbi1v26xO#tLeJZ^6 znw!v?rI&<m1w9tly>RNf!rE<%I>gp4T9_f)8>ZN_@j~YcgN`&82X-}|_I70+<A7cD zclOROtv+X2{Qk^b%W}Qy`uo2s?pZ&7^Z(ZCz1NM@{(g1!c8|0=c4_0ZUE7-aO79>3 zUYd1&dPg)nzno5nS0?AP_)R5qmgY^{75z)r+g4}p4W?HQ?aqI%xq0d1GDG{Cjj{L6 zL}xyZPWaL6C_ee%)9pTNtLIItyB-wpy*$F|>ZMHG1;KZp|D1Pk+P*9!n}g>Y_CGNG zu{O3+F}H@Bq5l7xVl&I-@y3#C4y>KOv~e0+wAJNHk-7_vL0bMz^E2oD!%%-P{R2}C z`+wQoTaEmej+wjuxf%WKhW+a~XD9oz$!}oVUaV7l_fmnkvQF({R+B@u^WIBl8QB;f z`OEWz+pbysf%T8|voqQ4Jf!c7eE8pVa!&cTX|~_aTcuAf=CV8N!?wLxcW(O28h7Pr zhfg;@-}!z}_z?dG@ftS$1Lf*7m(>(Zss6TS-IkBJ>3?q8f3e<nol|Y|@i(PcBH878 zf40W%Dv_+d8XE2!zo+8kB!0Ue3$|?9w5jI%ySvff-`w0>e1Bi<{Hs^5I+}j{`Zb_5 zH}~ywQ&Us<H+Ob^UYmP++uxkOzrKFA`+lc5yieZVu1o%b@ekg8(kU-_E+1f5-;sVS z?96H%59#}5N9NZi|F`hJ@mN)@*}7V`{F?jM_xJyATRy+8>ZkhrnoYIqV}E~tzrLAI z#$v<$ON_sJF8n`wVPSpw|LN!7Y@Xk0ZnxFu^XGp1e?Q88-(B3!FTbvmabNTQb7kj` z87s}c;2UpPIgK^*@ol~z*_G%2eKnH&`;T3%x%x`ve2e5`Jx`;z<vg^xE?=O{_&mn5 zf~oFC-qR!J&GYV5e6Ia|w>+?4&bG$xfh2pxuiD8Qg<Zu;3@aZrZuyv-{HM0EKexTl z{hIP~%lA#c%h~v3DxPmXZ`ZwtO}zK#!46~I_$#;mZ$Cco`T2=Iz5boP|90z^^C!ER z1wT3cJHzk1ZAxf(`2Qy-)#tms<B<Q*bEEr)$_thh#!uXqWj&dy{7ZWCr60XN{d-^D z{|!4Qel2>o|L*qu`;z*5J{)peefqW1xm^#=?r(gVw)*n@4ZjlZtqNWJE@n%{#r}7D zzuz+ykFVLd?W^9KTU%dGeSEBUwn_TAIs2>s{d_K8{rm0q@EhlA{>+S>=6*r(_v5<0 zzv}Z+e@#;L)_Zep?d%)uO578oPv}2lk2hPph4a#}?Ytk(yWQ*Vn{SbQZOvEfvNr;E z78|VJw(YL=Y_r^1zdju1k2gv<(4aE=U(Dn;+6m5e??0W^|9`ucTYS;~jhZ!)%0`TK z73){6dUY#0Z>Q^NrYB;bUW<IsTf2$#(lPV%Kb|YS7r$ZLS<^S==(qRvk%569pMSq! z|9^Yc*H@xXcf0=l;uN^CNn_uRk`E6KemL|$BED(9q-u3pWZ}mHr>1J}zqz-%d?WV{ z$>uw|znZPx05Y@x2luxlMMw7aPx>AnTmSc~^qZOAzZ%xNwC_*J-B@@%wmf!9y_!Yx z?B9mAPrU2Dua?)gxoz^STcd7A;;k*2>vQkzk-Y6V&zs}ekE`F_-aZ~z`}OJ}=EHY( zZ#|{vA${NGQU4$7b8ioOszu$qpIKX8^VMyK{FxI`=YH>y&fjCmRor==r$}P+^E#jX z{U_%fwOf|C?g7vDosE3P^Spl?{BF5^wpD4?%A>pdJ}wv7^+I31>cv8p*$V1%Afq4l z|83@T;hVPOuf=VXY2W|<x)z<kFnjBo_HB`}e;)t*{QP&_^kXr{(+^7Q?Y4jS{7Xy8 zx(&;J|KID&9RJ|*_wxI-%O1Br?Bdtk@J-q5W&WGZKesVfC4I|YzgH|>_yF^X18Yhg zZ~b`2SbtBj?tj<q<a4(oxqf%A`S<VU@Av!bE#e-(u}RUY`>q<s{`xb^eV(!(9M7!m zm3Ky`^qzYuy!`!}x~p56j_>@hUvu$rqRO8G=NsbNE$lAXSf_n?aq)*#-5SoyuUBqu z&3-7H3$m?I`0jbzRVO}*zqxrkE>FMRLWZ@v<W*h!&Nqs7R{uh$^xr-IHZi|-=luC^ zQ#M`S7+>%|{`!QBx(DfB3eWq^QP)!Ydim+;>F>X$h`;~xr(M2oMJ0nJgZ{yA^&Ru4 zzK~wlo3H)h`Zu}foHyHTj_O%me|!7Vr%y$_w)=&q&o`+3RTAIs)x&$I+M?!`mb(6* z1LcRg_rJZzct=I8c3Wo7?mu6fSh-i(-fk^--q!o(&d$vr4Br>ERr9ALEz+G}wr}l$ z_}kTU!c*kaBhH=ubLmo$eDx>8$N9TnF0+u1N_ul5w_>&JD}x8D2A3=~?=7F7`D(WS z_lhlMjdki@B)0W_IB@;$^9kxFj^wEw6!Vb2FZO8tTiXKXXLA>S%RF{zsrPG}H=TQH z^UusMJp1!P<@t@N8y6K_651`1BK6tSF5&1r+v+d76R!)IyFF9Xe=u`R4yd$Y{HOGN z;`tk?`}USUmMy>2D8K$YyLHtaUh_K-ZhM{h9d`V}ryWbwmafk1i2c;FFXyoT(f+Sr zrRv|`W>Qs4POmxX@}czBk8KR~29M@^E2(ZitM={Q_FrFKI{$Nf?NRY?mgi)(pEtVK zUwI`_C9QKZ_Crq6?H@J{_Y(WN<GbR6w<RCvyDxTNp2PA4b=kN77i{@>R<QmXtDV?R z`vY$~Z&ZH{Umv&jan*^Vn*BDPJY>FAo?N)~qR{=e^e2%IOYiUd`+ItP-Oj){C)Tlt zuZvlk%V_6p!!!5N5qS^k`!XNf>mMfnklc5z=zsh7JH_YY-rGEo&zx&<;%)N6Wc}5a z|Hbb2+f15P{^sD<;AK7!_dcxr!%?DAeazZ?5@Y7$+06fvJ|8^(;j_Y4{wMG1_hw($ z+sl6?wO7uvC}oPTj?w-J8>e55sd;@V@o-yc<lXhj%<n@&LnmI(3u9Z-o6q+{IQsFM z=J|7Ke@NTS|9Z(=|LSTBO{2g^Pb_~QVcjw7bNR9}v(5c~TmSjj=h`jS$s=Ihus50C z`n33Rkmlyd^6&p%d`MjO@Xh1fo-xzo<L~dO+<c<8<R8OiXP-3=;URmRZ!>9YX=#0t ztJzZhJ@3uK&pyreC*(G?A3rgDS#SQdAI;(6-`|}mC{k0tQysi{X|BSn>~%YTKAY|O z?V<dF&mYD6%p;E+;V$XC-_7@2W^#Cn{0Zrg>#qCEvG`a#-C9i2;_b)d^6C9<JN}=( zx3T@r(}l(p%=Se->Ob3b&aH0pbjNR;_k){tYy9`Tx1W1feVf1iWrgpbgN$cBdUW$+ zeTVq}c_&{mzWx8_`ZC|yTX+_1^L(OEeeB*w@i$KutqpQ(HXn$;U3<dz?fc;6-g-Xg z?6&D|mHzeSv*e?n?UnnQ_3ts-HrRYleaQcQ-|u&OtL)#r?-c&=`{D^cAL++wAN)7{ zUa|7ZA3t7qrTyY3yEeD35Ip?t`d6ka#;Ug(Gn4P|{5z5JB)0S9jlxgs>MgRaXk<Mu zS<_y%*QGXGMf;^sfd7imac?GG5p;*DR{Gs}^WkCs^7odnkBY}%vEwhbxssJNe|zWN zXccWw^}5SRdv8CrKf?E?n_a$UgYvD$MXx)q|E$?}XYybDDbuG12W#8SKT-GQX<yc7 z^|dOqe@uw8nGyN*l$zMy4qu;lJ$p4%WDBNLyH&bxEIn8``*fq1?UnmB-)<!Do7bHG zV1Cl1zndo2JgTqx`}O+PoFnd!-Zh?ZyU6(Bs?#;b<2%wttld*&z85T&<5J>R`>t`3 z{{`ol)*CyI?%E=|;_<^D4p!zKJ}uT>o9th3e`~Lh_?L3a;`qcTzx)c%>+G6;W7)I( zq`%@NudZlL+uvQHddfYk{qD~P^OOve?z0`xw=1#ZVtB1#b<K9M{(Z6h8ygnd34gL) z^1D9q>)nY<ey1*E?#O(^KH<K?z1Dxp`eET=VO_OHA|LWS^0>S}zEi%7cZS)yLX}@{ zO)e+={>XQy|3c}V{xxxXqwe{Bn!ESTJ(0!lu6Nrii9LCLanYtto2s_DpWc>pGf3yh z<l7gv=9lZo?XftwU-O&jc6a-&W(jMr^xQr=Q&a5E*0=q#6_?M<G)~T)trTBa{blm< zc~xH54;L)o6Y=5x(=7R=_nz*a9$R*EV%qPMUAL998n*B|@aAlM5Wo0Q^qr>{x5--? zzPl_St(kV)KkSa&!}qnzzIECeA8oR?`oAFhkKMU%_A$?cj%ergyUnfnbW*B5C2iw_ z_~$kDV*B}@?|&&L`2KRyq&W^7AM8K;Y10G$y4Sb&R)6RFwg01BY~8<~&#$ler)J&t z;?MtMcN?206yBG&F3Z{QU;6z;dH=aqp|}6v?mqGFc2IDz@;`gi{73&?kC}DX9DRFn zODnf{)}PbeC;n>}|E)gqfARXPH@iiDc6I;%`&l}F&%(#{`?VJRI6qrdR5a+Z)4T5% zFI@`yf46GZqvQ6P|Mq9x-BtQk>z}`G&Bh1+-~9UeTJ=A>yiWPg`O3Qg=1=(_y*2l? z*~E#z??`G+`y*d#UTQD$u3o0|=l&hPII<3Gt1|p_lHcZo!^S87H-68alG{ALdw;RY zm47cq!=)>~wr~pDh5z1s`u6<3xc|)c+42lO-SofikV$ag_gQfJq%7r~{41;P7Mhy{ z+KDk-3%qjER(WgJ6`fa7$Ct|2ehJ*WiE+h$8=<WKsj4sQs;<8e-&tSfqI%5@q;^Wk z;}bD$R!1LCy6>^)b&!kpx^MiJ{`wNN>@U{K)qc5n<JJkL1D4Z#{=|yE+k1V-Z+Ru= ze>vaY+&p`)Qm<)h3471Jwq0hEB3`CCxAVQt*cJc5f7k0z+~Lpl-tStrYSk;I@aHns z&v!QKzhq~ud$RM7^@8lxt5<)mjYtzMJ#wr5p#94C?0<hheYgF}POtaEx$H%LT~Fm2 zzU+6Z_qLbV$!zy<-R^g{Uf*s1dvNXcd$$DN|Ks?l^TzzgR5>%Nb4RQHMqOq4r2V&` z<URX2_VT5c`adSi-W1PR_y21B>KXk<YEttY+IRn6{=t9Od$-u?y_d>=@mV})nx|fO zBS-%X--b!Q;{QJQb~}H4=(i7csozUa?B35+U-^B<?>y<!|Ki>^SS`OF()pmeZ^9hL zwd^m8YcrO$PHKLC+dlru-S*r|%v!lM#Ru$9imP1L{5wBo-r@OC@e7XDZsgASX?tM9 z!!3MM{)PXtTXO%u)+YXxTR)yP>^J<lPoenpz0z9#Cp-bldV4Qg7x8a+R>jb__uH-P z?b`M7zn)%O8~ylKyy+|E*=GAJAN8M`RI~hxz0hCx{_y?ocH0(wXn4o?!!&qCZT#P< zzWf0%8yBS?@sNLz_B(!QZ+_p8?!VnU8iu~V9~2(<ozGlz_~!b3zp_I311c5-{IYXj zn^VPbKmES%dA5hO@8h@SL|*&5{?ajX_dk(mzaA8>5BOgHZ}RQD-Ma5LU%r*$dRD*Z z6=UE1;MXUu(}I52+N-k3-DFnJt%+{ff1h37OFnFM-HJb6^&$W4X5Y-reAT?;XX`&6 zhF{X}KK$B0`SIU>I|?6fdiVFNm-KzH2l~IKToD$pcX)39^XueUv!ot2uDF?*d7d$W zk7L)`ot0b9FsuyvHt&e7`q{bG=F9K>U$f<7uHwIACijKKqZh;-J><go=i-x-lNYBg zcRkDaa*B12rS83h^O>iZtpDb2oPO?(-sku^_uQZVKdile&!t6{37L;?bN%VftYf=S zpL1iw!TEoW+G_k-<kkO2qxM5+`_YffKAu@$qg&v9?(qH-X)~GK=KL}dwp~9>vb8<C zDx~iD{p;&urOodzxM|st`S`ZipT%hnM?W@9oBpD$zVh=~^H%mhmI)`C?3TSeV?Xoj z^;wbyA1)WZv)*|6!ucvb1-rG=zMpBTuQ@x*^mmBv_9GROHk{Ae=XmSKHlg~P(QlRA zKOWe>_wzaHe>NHwNvW=`N6Xjmc*IrD_duY%b>7dD<-y%jrp%ixKczc-E4kl!#_FzZ z{uP;kdA<91_sKE;u8-Q7<huI#tR=nqav#o5WAB(~Hf#FhZ<Fmjzf77E@pC6%^TK5x z&)mQ4dw5O!hRKo})YBaQ@!SZ$TP`%)@mayWzm^BK+kQS{Jb&fCW$n+aFT77VIZ3s0 zX69tGeU*poqvd9pq@R<qbq+l4dvEo+b!vVB=AWhKwC#9*#dyJH)tQXC#`Wh7eV^Aj zUD4kY9vb@eyk1NA%F3&iy<z8#y+FOAe4jEK1*5I!Hgg{7UsN_J^3A_L<#zUWOy)Aq z*L^AZ;a{Y>yZ`%lp;M<$eesi-bC=fo&1=B@K<UY{{0YGqjdP|?W^LO4f+gjR)M@1} zl1t_lEy=W)KTEzywb$~?+`7NN3d;)*pPOsVT0Zx1>xQ2n-%om0yS-vs=&c{y82=qR z^10!Cu%P>5|9R^aFV{58{knha)~#p44%R)0JL>vv%^`kW)vVx-+m~0*n{oHwiutt$ zj~5rL@2#9)Xt+A;yrH-BeX~RNXDqXMa6Dwoy}4Pn*;yWZA01ib5?JKsxTdY26koe+ z&6*zTZAYXo-aOICy}RsfRiUTn$*GTz_b(UgpSh-Znr`&BFS|-#|KQnNebLZvf99Qs zmS6rq*;)MD>up%E;cKzuT9=P)=ly8D%#eRWysBE=KC{Zn(eo=FbsA-}EB*gFqfuY_ zm8^e2K3n{Sc-C5{eJhXsmHl5P@t)&M?Of-*a>l+})_HaXZnH|CYPK)8XTPCuu~yYS zvwz}cjn_EmSf(x86A>4;@9f;`zgYehsXo+vDF21KeEN}RSN5@|%f&A|TO<M=2ig4S zS@z^`)qCPgg%^0U^UL}0s{U<Tx!gIv*zbGhJdX)aeN$RhpD=&_xa07-TG6cOEZ_5Y zJb$pK**abB{>CF)0{e_|Yi@JaNB*nHePr|^=ptv~MhTAFy>g%J=b7i<oBV#?Z@q1j zpJwgTx-u)U`KV7`2}9*F|F`!8yBp*i{dX?dvSo^;%yb?Jg9G2yS;|X<j5;kEkH}em z&J9~U!EE2#p8Yy2*Iu-0ycHqaJ@p5VUHz2z(^lV=7x!<t|G@eO|7||Y{+vm7n0NM? zo%USboA32w^P-Zbb4L^84{+bO^FVo{w1KnTlUKj{4SFBD3;DbJKTxi|bN>0_3F->z z3OkRRt@iYkzAy4|x~kQ|^GA!^`QjAH80=1@{9ydqQ*%P~Tluu#XA&+8*iWl*>dZW_ zcXoB3-m<x`CR{qUo#DgurP+oS)d`IH6Fw`~DeMGWB=p<<Y^~e#ewFzia~n_mSnO+k zeg4wke8z|Cr+;8FW7_fJj_z}jJDX1a&V2RIPCDFwg4f-|TR+4!{{5SDi}zuBPSL-> zC)fLz?7MW#JYa!CBNHo^hz1oItj_=W<2{ex36xqeiGhJ@D`H%CeI35>T4LoYz)P2I zTkyCAqbw=+$eS>`{PR0*kCTz>Wp7s)&%64neF=xqB8CaSeilo#CBjjK=f3*?|8BoO z-Y@@OcDH(HU-k5dH-CP3csPGQXdTe1@3;1){|&cX#dG*~<DT=6zI~YXZ|Cl9eOL3< z>({x5^H$r{{kd`Ns@K1F|8wepeR+BPe*XP^fB$@Xdb<ACqHp3`*MHK~(m(f9;`v0s zzcK4>o!@vX|L5egxzU+X@mDt{p7%O8_n*Gi&-#CVeqJ~G>i=JN=M<g^mPSeT&qMy5 z5Se-XUyk^f>~pI2+l6m2J(d3U=1IKKryuKIJUMUp#HoHO&&1-bqTeH*95;Pnx6i80 zj^R|Yt>K%SC;zYc=l`?(J<p5ECvo+wbrr7P+NSgOOvK6iRSYkFPn}nK_(HMoPvz^A zLStXsdBlI8aiH=?<fP+eyA*GCe(iZ0pL-;e=YLS?qkqL)<YUi9%*mBs9-sbOGcxj? zCjYP8XR+5Sb*67xlY2{{s?G4^t69*ntZ<b$et)w2hU?4!f6mu`ANlF-FS(dk*}KfX zuB&J{{o-vF`}t?-9&<lT`?hcQwC|ti{yBf+V}DIs<-G5u`;O@Co%-j0+rQ6ZG5@}7 zPCS2jS)Z@k-}0BY4~sv^eyKe7{DfaB_UB@MGW$NyU(yrP|M$c`o!k0v@84QF{nK{& zM}fB;PTj9FlP|W{tnECfvr|DjXWyIWbG~rjNRLoZepAN!Jn;Dz{>k6cx69t*`R+7t zrr4)<Z*I<vJ9WSG%ZkU1>;5yBX6${iFW0`WwmP=wf?nN;+6!gz-~W4Azpi+me<t1Q z+v_ipv6Jp?eqHad?Ip9`o7I{#ALbX<J5T$wf3kh;eLIKaza!=!ICp=>Cw1LF3{Nhf z{I9V$e4_pNZ@*@5+PJ6t%hB87&wt%}$@Zo5Hs`LRyCll~9h<WM{Oc$Fb570t67+A* z^`D3TmA#4fwvTqKU23oUxBT1Nr(3V&Uc5T-Z>^2{iR7o=EmQX!)^_Y!Ui$Q7#WSC( zd&}hHLjN5$-~pk4<mflE|Jc~=Pmi(v)*zX@Uw&Kd$IZU`y1Dm?)*t?JI6Xc6@~b}& zu5rHLJKpmA&VetwPI0e4XUC`8pZT<4y_@}<#hX_v{GWRFdYM5@&5gbb(l_dDk1zMw zA8_p5?eyoxZ?-?yKb|3fW8z0o-s2^I@6?H3ub%kn`LDdV<+Y95-bX$A!N050W!~%Q zpU=P9{@L_J$IJiEBTm*Y{U2WT;mgwH{<6}VZ<T&;Og1<tbGj_@!Q>l9xq1FSkNWh! zrtZPccvb!LtUBku)EC4woIbg;^4x~!QJ?fLoP24mU(qIh?curNuYclSvTe7t|1Y~b z;LM%%rgwM8yp7)bxU%NnO(u!M&%Yk&wU~S5{M{e((;1%p-hcYkMxW{@_TX?a;CU_) z{~+6V-+||Cc3UPr{=qa~`u3e;;y<dMNUc8kgDJjw?w{l0KmNo7|9i|`W3x{4e^O0j z|It&=&G#LECF(rAty4>0x5*^d3)$x!`5x!|c<Oz@vh1~MZtPWF_u%iHy42qj-f8~d zVr*j^cb)yV^tPRcvOlaz$@!UFe^70EmbdooIZyNJl~O<bveA2dYF@(ZgRkN=jH}Lk zI{)oODcAgi%W`gOo9+H}zii99*)}uVt_vJq-_E-)+dTHae$M4&>F9*N{<psUypUJB z_xkfsvszZa=bq?(>i+A#jcl{7AE_#tAh;v0?EVuY&3b$5@Z4iXUrp!!k<EXS{7ruI z{C}QRZ|r~Vo6$ef|K0bhitjzuJJoI+SNz?Yy0c2}-^xF`|IYn$S^UaTrHkt?zFkuP zg?Hy&!#^U|K0i75(LMe8|F_lJm-?BvPpZEzm-D;ahVid$t^3`*Z*I9ATQMQ-m!|yJ zxsBW2RC&r4JaOMY^$+*@$KG!k)?Ax&uKH~C&6D?2PrT>;J<EM+{X|2fm&b3fU4OoC z{qmWarMYS1(<j^Q*V}*f-`(0Z>(0LZG-qAiyu>%K7~3!_x^&C_+1ek>e*~8mt~vbv z&9iH3zg3=Vea<Dj*ZyA9#QOePiERs?&XJ1v`Mmt?(QOlNm7TG_|8&Fsl^?#leE8qk z|1;|L<PW-q`qS+1Z~kbz|CNp4=`(fPdS<sP|Gj_n+1md%pY68WcKN1T_Wz#SN`?P^ zRBd1^TDw2+MLwtHu_HyxbbfTaTf02(Y-F^x%-iMp&#V|V>mB%a=q6lWu6x70`;SKT zIq8k}*Ut{V^mh5(U%MUFAKLo#{@3~5Pu^R~zj*iO+JgNjcTBFg<F}fhchLBy=yR_4 z=>PFr^{;bFHYDf1IqYorq;Sdq;D1|seJ1}9IL=|S$^N;JP2QsZi|g|g{~xlm{r>!} z&8IzP$Lp<sK0dzsOYxuYFaF(urbdaj>IW64duGNQt-sfG_xGy;*^1}e><zAW?-5u2 zZ#wV(gCAATj$iDb*_^yTcG>1l3oH2Ie!a?R|FmbpRQ?OcHH5FH{oMH9s!o3XveTDu zE{<c&S&+$pH1D~ol;!%(E5+x9A3tBWJ;qw(wtd;ZyuRsgcYk|6$t?9u(bD@D|L*@B zniO1D_H+5a#c?~ohw}KF`)j<cvDW?>eEy~Tmp>*o_BYbr%5V99;rli%`{PA@)4zw; zoi{q4f7I{aw43u!)i3=Y{Lk|L^}3Y4#MRGdJpc6WTKk=o_j5%&y3M}5$vqJ9Kl=Y& zuYaw7C)AxQ)_W{;i@9>n#s3p>n@w(R^S|@<y=aY--2b&Hf98Gq{zL!ykDKf>{vAv* z{dfE1{u7n|?*4cm3eWPO0ufRyg2+93M*_sA*YUH+|I@m5&d|X<=F$B9Pwsf1`fyL+ zevx;?{~240jp`q5)VRO&)AL<@Ua#M57u#hqrLRZb?$M+Ohey-)@SO`>^E>dbRMO%H zw+g@X&HYqf(aHTL>AU9S{jcBch(G0BGqrzW**S5Adv^?<_g(efV<wQzkvczB*Xa1{ z_rFYk&bOTYS=Qb=uFrMXlDbaIPv<uVzTdbma@}>eofgwx*9-Fd**~qbwzBoIng0Iv z{eKH}-;^+X+;wD9rJv(H>EkcccmH$#*T)(2@VDRJM-ivIUrjI8RDT)g{XadX?$L9j z+Sz7rYp-nHzy0BR&7E?0@?!mW|1P>G8z+6{`{u0nx;CZl@2cesp6z_})5x;C!EB1m zRs9QkGV`l+%idc3*8Y3^|KiV^e5>z;PnY}K|Jy5a=lZDcYfrt}x+p<)dk^p1OG|Pr z`&;)2J)in^-nN-CSJ$6c_CFt5rTyYy=zn|bcYlR{7WX~BlQOGLuI%FjzwNWzUFJSF z*V2o8zFJzl%<6Jws`Zy27N={M)xG?Gx2ARbChfx$@3s2<v#ekI;O>Fisnt%$<|&u3 zt$#V=dd0g5kFTyR?vFURKYM*o@EZBBx3mA~Uwyv2)XO&i6_5Mh{U2<)ukQ9y|G#+C zXP-5ntoWa}#BMUXleH#o?#xf=J~LjkRL#|2uYF^0bamg%`?9-=KHPQw;=3;Ldf~FV zhcBXc%T)JQcJEod?$g;yDb8fp6IG7;m*4xc`^&_8)|cOvzi(N+vEjJo^fkg&CyT4X z_fPrlv2M=iH=o1W6Dy4WGc0KOrLgw;;zJA!%u^8!*d2d}ZKUE;2ih+a?H3#<a_nQ0 zi^~Q#5&ac{@6Gol?FrC-&v$^)f<d-{xqt!8Qh&f8(@^`G`6V;w!DYUgE3=PooqUO* zG3eaAb${be>i621zP|nZP3f)6$t$<)<O^MWwXkqY|G((}ab63n_R6`P$U0MGr*`Vm z5{uOJslR_u6uIX3rmiyiX7;wr(|*p`p|kGBYgR*TzZ+H;N{z&_Wskg@ZXWb_+TS%# zYrS<k*uPap$80Svh?3b}t9WXsLfQT~7kSj*?zsNueV6*9nH7oayB{rF%WSJYXLD_$ z*0FgL9M0QV<{bY#NA~-yzuq6c_H4V}wU#xO{rgeg!psDJjT~8(3&#FxDw`z@^KaU1 zzhl2{-MW9TO049=!ou#|xIgVp&4&}`gs&%^VdMOAX0qq)%j=`pRlUi+H(%xdysQ0R zzkV&>8l^jj|4Yn=E8kkIUC)D*3EQTf@0eZoF8-EM{aSlzY3cacXVWaiL)fl4CT@0Q zvi<B*Y?WR8f6>!lW!-<Abx&Je*qc}&D`F-Ma>}<^^%`?|?_GcW^-y{<OVzWJ8-BL` zx|g?|doHigi<#=b&&GSFH|zJhEuL^wp>bZNQP&^mzwgR+SI_1BwnrUgfZNRa74wVs z?wEZuVTG+?<GjiufuGqg=Y3dvH7nO#nrAOq5ueuofYZ0nusO%;t6ebm=d=1BP__4l zy);kl-Wd+(Z8Ww12mJo0W7#;bGN|NVRHE69w_hJED+ak;#qHn160;wBwr$&XIj3Ob z`xt|RQUz1%SIpg)e$6)V-o50RrVot%2SnFSTk}5i;4`M$`IoneA9*)hT=VIA(;v2< zC!J;ezUu!w|JfU78kF7N<DvUM;9+%IEOV9rspQ%0U-tS<-2eNJ^UIwJlHU8S=RS8^ zM`Cw=+>%-L$Lr_)-2DIfZ2Qmk^L`fpouB@%=AXFy{Qu8;-~az~?EC-9$N%Q<Df}OQ zZ^wW0{5${Wo7erHY+m<&x_RCI+2(cs=bO*_Khb>N|H<a_{!cZZ_kX(iy#F(I3Z4Id zHmdV^efrt1=l|2Q7X0{ck1vnlmHS}-o7+ynboIe4d=U%`TH=TddgTKH0|O&o%|u96 z%z0a@z2l9>wQrL=bc8yOC{6TG5tHmZqNF@ALPbcjv$v<Gr&niYec<mo@8->W`SZ&E zD;-hAFYQ9BuXAqDd%s&R<k|CDvv~}+Hc!+&cHJ$Zeeq$Yg4m<1*$nqv>kfZTl6}y~ zCBV3iOZvh*m4oGXC*R!Ia`5BXn&Lkno%0!{&c5rYeYMbd+rAusQIQ7~a~&RPyfpZb zxO2U>{dZ2G1$RPpmc;imuQzYpQ5-Y(_Pz5n;+%2}HUBsZex7=XpI`e*_HB)KZk2vY z7GI~O1UR3Gw-h^Z$<Ck6KrLsr$&P-{T<w4FUgu3He|Otmyuaw^h9A8%A28Yku4*pi z<i9Awsl9&srdE&1wLHHTt~;2zaJy`MVgJr`b#+bAntF>(lbbuubguo{arD5!rd+;x zvMi<k3x2#`VObFK<MLk{eQADu`#pcQ@9;ZfB{Xlc@1fbO1)AGL6-2)snWHOnRnDm3 zfI5GBsdr%l)4nZd<F`M!_3VKBRs9_^f1CX=k+rE~Xyx7_XKo(+O1km*L%+LModT~v zy!Q6<>*Xt^l=?pSUftjK+w_F0p3^eFlU>{r*;W#q*|Yr)?8$AkyuttHIg{4%(#FuE zHAXAiZmL>ed@tBId$sJ2Sht6X*C%P7=Ux@$s_GG*Y~Y*De9Uh54^91&%#6utGrnHs zytpHx&F<7GnH55(T~8nV^jK4L+7%mqotI|cicO9_JWzklbavH)q!0E>7J12kc<?Po z+D6h}##hx}S;PE^*#oQPVz!)fSH1dsxtl%Gaq;&<%^tklR&z}7Sx{^?`y8`xbHu9? zKb?{z=Bgc^;k8$|ge7&i-l=awe^#95G}e>IO4XQh-u{Y>{ajtcmnsEw{TXc;{?=EB zND1|D|G)K@Q$E(ltK`ta?P2M&XC>5l>exKlF}3!A+h@MOtk?_rs?h<77ymMLnEjQA z5Q^M?*5;x3Dtmzyk@*=64Q}(q{}`B=KWtnpZ|3Fpak_i-hgR0|GR;}%&Fyt$o;Z~E zarLt0`93(l?5=R`8P-$TcJ^Oiob<Vs^`3vTsBObt{#&Z$%~2hhRc;{_Y>fh6T2urZ z*JlTOvzYC=eM0W1ADmf^{xd&bx&G^3!|Hi5c6I+IwLQJ_;6~fTU2HF%EPri%#M#Du zZ3&Y_=-SoZGJMX5%eG`Cz2^7fe)06V^B$)64VCLz7ji$B>$P5zE1tz2pm&8;Vfv59 z?_IJ#iXM7Z{%>LEf7e5Y8jQc(S#fa6#Ho`kDqe>kX!SbvXJ@fc|6-xec`+@UIrv_j zoZqKy%~s3KQoL5eP2jO?poW~c=h}DQmqpy2-EwRN*G@z3)4%>{d-wlZ@ggOnM?Tit z>&W81_sJX`6)JO=yIj1!{T{!-yhXwh37OaB6yB_OeNn(6=S=_aqPz{cDvc|S#a*{N z*Ydu~$^HDi1%bAr$MVtyo@BSUy!y5#)tbv@#or%diI@M_>1=(pXx{9sWAC%u4V>mj z7ifHaq_SU@VORU{1ru+7J5%u2geUK`<mtkMDG|pe|K$8tc7E%(7ZNx1D!zK;_5AM5 zFPiVQui?DunvVw`{P%buQ@XPA<Ez*0)BCy89xNB*d3*hO;v0#nZJp6k;*wT&HphJ( zycS!2X8Oyt=8?+f!dOwpg$%W}9<5?L*(?|S86P_(vFq{rpD#D<D%l@6*|xrkQHRs~ z*m1V4_jmt&^Xhpq?-9ERj~5yL*!KS39kb|V7t^P%n9dXA(|e<L)ry~jYwg9iYw+}{ zmEYAfcUG=*s^(~lU4NPD`lIQgSHhV#@tDuNWLTe-UDuR4CE0!V{vxr{$A8LSc<gdR zPg=<K%W3Z|ciz3`IO=dW{O<9MzCz5u4W2ekV1E4j?TaUS49>-{-TG8fKjHJbvh#)a z{h}6e+bOdg<85x~dEn$aopa_=&8bbh)GBW{)|NcAcl!N`JMvAg#-VV}f`^SKH-2jP z$i1UxuhDev7k?kb7;XQi@b;eOgq%AT+pm@6NU+KrbcoV(+S{=By#&kD)Q_#*z0E<v z_rEkAYtFSxnc>;^@?XxsFQ3%?coW-Fjx2IF-l^K#wnurjru~aO=T%r4i{)kRb27)9 z+6r%a8!2<#DM(p2TdB}JK=(qb&_AW;X=@L19D1mFZKdw{$;NW#uP!_}bHd_^ujNe1 z#`9g0T{_ZhUOb7{%Cq)pI{53DtC-WVjcu~ml5_Ug{W$k-<8$8AbEBL4^otYcr|<9- z6?f$@da6^!e97>ZcuAwQ)ue2nW0#+wJIJ>1>|2==GdcL5F79^Md?s_HTFCrV{)f{? z^HNs)Sn^`~hlf+E9g4mN%&-$UmVKzaC;R%|eG9pjckpLNh^JLf6uRbm{QImEjw{bP z9kM)B>MO9}_C1pT+nw<&mvbgfIF=sXzwSo+UB9U!SCyy5=gn+)f4`)Fxqw?Is#Q+t ze`x7!vlElQ9}ZhK`|^ezPYqnXCz@;3Z2v0}yS{qvA9GW;n3q?!?fz92ctdnSmEyyu z<LsQJq8<%)@BV*YR$4G?)2(k`LvAkKoo^hV+3{mb^n<voW{<Dk`usRSL3dV)n$SZn z+ij{x4xCDhoMf{<Zc_7&?FsQ_b64CyQIjFN<IHPT;~NX@8d{7LBm;H{{3`r^-JD(Y zeBWm7zgPMG==c@y%i8TW)7EKg*PjIL6>l3iPjz1Y=^IOCU+5%F#-NuI`W<|Z-e<eC zuBH2br!3R<<I8iCY>b56JSGPfZrCJqc&FQ5xu=hRe2<XXmD&5GZ_`)*+%@iwfA0!x z|8l9;YMYkSzSF{`JV(-4Z&=AXoLU{^F;kEE)6Mr?8_W)U+_UkpSzp$Kr;N*!pSk-N z`0Mft{90=!>mh#W@2@+j>b>Wl^m=wX^uW0{VphAnjyLa{+x7QknN50C-{YPaEFTp< z{^u}s(<;oJscSu%*Yi`a2!lDVJ@Y-eNB(a#B8zx$rlcO{I)BoQ?UXq0)0v!?eqCJp ze_GMe8y?dH<WC<=d~^Kx?S(Iv+DRM}V9;4Ob;o++|J~9qZ=yK5ce;K&b!;8urNY7w zZ*G_uNH^N=Xg<+%&wCBqgzraH`A#fXX|(2lw8viVZ{V6DiC(kK1p&<F340P}w(WQs zXWPQw^7mxW^KJ3sZC__@*34bpa@_8Ki?OoYp~XCV;?;Sdd;U8ldva|l|JiQmgQs+Z zdh-NQAFprOyy^UB`QqZK2j2OdKVx%Zt-kQq2hu^BH9jTrhPz*WI%re+wbqr(<wRA^ zp^qve9+w6AwBP%2$i|Brz1d&Pp3HcAz3!(XkBMP=3nVu$?f4?~|J;>p{pt-9-}lUH z)u`oukk7g4tyS!cHOp_CEqBYvDc{(($D!v^)v;=`T><ek?Rglt@w&d2zI0dOLdNDr z-|p{R+<drf(KGMWJo>+#UMl%s`nM^=`oQ&%AAgBIXSuL(VgCNtn(0AIxeA9>)|l?s zQJCV|T=7T4ewCH*w)6v`ueY{}yX`TVH}lm21<n@_#5g{0y}$FYt4U8Io8q+1h4unD zPiC-B`0BXsD__TavB<J5?~1K*gXC6exU>J?5Ou%umV04~cDaF|reD?XZ_gi=c0_*B zJ*qZ!dH;(8N{b=|IBnHE+y0)DZMOKZ{e?vJ?wPqA(mwiiEj#-qn-3}e>p%Yczuse~ z_v;?qxOm3VcE!9O&-ZMMoOzn3ri$gu2dlJBY2`y}>hm*p8bxF^{y4tJv&Qh+jZ9-< zM~#}F%gY4P439DkFTKX==iSgT%jdw^)l#?g=D)uD+Wu0}&Dg_*PQeS}l=H<t{nN{7 zP-UrNdi1EVn|J+@?~#`t*JXA*nbI7vj-jJaK<;&^nz=>`tIW?(YbU0KlX4WQ++J5) z?_=BCxTxEA_V?4DxOHj*(s;tYUR&@jyJ@2OY`<M!lFm%gU#Q~hH+APKE)QnM>zVg{ z2XfmsmFmjthdc{(bg`Vgc*Ujkt8c>Jet4i78TEc$OvC(JiC2~`d2Bkte{ELL3jWg< zKd$^ys$}{2n$wM{g61=8u9f91U7KUe-7L^ACwg*6<eL}AE9Z;e*=Jh9{I_-4B|+}% zxvtHPRr9p}tdf22E4^`Fx7`Y#{n^KDyNil=OnRArzInC$kBENyU;bIH2a1IL9jFUv zlUSDLbU%8*x|sB6(dvb(+b5+<Eq)w%o4G7#ez>}HTRT^^Tk3{f!}s?Xd#bsa?w0Rk zXZHDj)p~-g`3g0aiO>I4{7Sy{<M0K8`P_|t^YZR~>-_vyP4L&P(xVQh#m+B8oUd-o zo%2!N!b76@acbJf_dAc3@Ju>q6W|r~|4ZKnhvxqG6Mmk!^Z$kH!rfvfbG>WU^(!av ziPwrJ&d(MM@_Y1uf%^11&rrof*`LB08ybCjW=CEB>N11H&wJ{@rL5o2EDU|j#<O_N z`6J)|-nHH`EB%bnd!M>Qjo7E_?<qQEmA%lonD*)TSNX;JcYcZ4{@Lj%YwaY*QjhOJ z3zsYqWIM;ia5eq)_Zjb`eC6M9udp$1=kf2}Zgt}Asp#*yW~Fb-zV+QbZf)H6Y^&{w zKkv$AUoJ22$&-8Wd;R|(zxt=MELmb);QjBM@1iB!mNu_gUHw^)p@e&#(n99Xc_p)? z?1dk^?oG-3xFP9`v)Sg)wi`~la&DGfAh%ZTDqpKk!&2#s>-<k}ZJP7dU}wg^vi8&N z;{B7X<!pDo|LPm2x>Wev_t~dbbrk(s&T!z#A(Oct61=h&MNe*CVe@{|+i<dC*IP%K zFIK0Fcy9@&9?)C4hVlB{`38PA>2qH{Y5p-&y<^#_cW2EOzid}Mc-Z}n;k9eqb8Fu% zjLTY=_x94>%fWvQc$}*kyN|#1iD)zaJLg1b^S2gX>p0d&|KddJB9b@k?Q396WR!YQ z#_aCFTB`K$Ij>>Y=WM_0-hV@y>~%VBJ}+vveRrp?Euz-U*-0SW?DlSk32yhrSH!$C zo|ao}q8MxW|KaYn*Y9|l<h>NRA#Cb(xwxgg=}sKaDwp}+Ggk07^?vE8`qs32+v59w zE&fk^AQSL<O6>Hix#Ax_?=svbU9t30ojAjvtzH(&$@^3r&+ijnw>{adI_2|p>AUxt zWq0k(m;K)1P=3^)Gq5;d{o|cNv*Jb1G@eti=P<5xGCDG$x@O;hR@2SPceK}@wyUTv z)JWXF>Gs8@#D(^(4Sg5>1x{A|wERrY!8PAZzBDa4-&Bzs?s>hf!Ts&}WzH|8E`51p zDD+Bb631<!?CXKo{`MGWdSyu8(K-IV;n(9|ol@SrW(9S8KYHZDBGDs<PJBDz&zSJ* z#Pilun|8PL+bDkSjTV@<!>|12mu-nh?)=!cD5|0FKt*RvP)XS=#!GQgUT^Ov#%M5} zk~<MKGr)CP|Lgzn6b!p&-CNAMFr)9m_qlH>*$lo1GfePNJW<JaHjp`h|I9prx5_~d zmp7`JtWTV8DZr#|bdqu2k?sfEJVn>I9=C`%`NOm5>JcuJ6~fcBD(C%8l0RSHeR|Jj zDShQm-ii%(FW#{}W)xH>&akSR@#`bWYY+X+&%a%i@qY5v8KHfj<2aUQvwY#*J!|RX z<r+`+EznuoG2cj{{m*sH^Umzwtu$^<u%0dxXl%FlpUFebU#cBHuOykh6L+#;{2Q}C zM1C_v!Pc*{PQF>4YV&H>+u)Zw1tv7zcymkpa#rz&BLzJzJ2>vE+NepER2$p(Eaq5K z<Hx31U@n+6^9ob_yT>o>uOu$XeBvU!H9Uu-ev%mD!o43lBBsx0IuLcs&bsu+T+Jof z`OKQi;SW!o4W5;^E;(p##g{47(Fckn$_$sRu{7-zj9(+Q#=!ff#MgroU4q-L&NRPe zH;*BtV4-Py_l}!emgGnoFAe^qbYt!-pLcsZA|||QeLi<}^h49!Zwr6$@$A|k$Y85f zTKjF{v4Zn6v?_X&zFqCy_3rWX$I6+$+M9nm?2b~L!1-_c`E_+!4=zPcxw}SGV&cLr zmsI5JO}nNp$Ym>eRoW4&(5~9&(D(grs}-L~hQ;mX9Wxg0E-8H@ZhXM{7uUIo{!0uU z^^3aqv+SG6$|ZeF@O+S#>4D?F|DS%7c}FcvnI%%r$ZD5L6o*FQ+LUJw_wCfHxaNtl zwOscRShIffn%hj`uiLk++-nv!;o<>{ngr=%W_OjCp7umA8s3j@;ICp;7vO#8rn~a{ z?u-4u?Kk|2h-3Q1?Pz6h$gzms`o@_IeQ$|*VNU8_*?Iny`R57AOP*(O3;xu!=OoWp zwqr|PZFqm?USPFtc82-P1LD3<*B>a42>e;_C#LNE*~#bp_5W|vJNoU`$DLeXdi{*I zpY`w#`fxI*%X^yA>_S=oPgCSN<HGN-Y|d!hV_07DQ||Es?hFTZrsZoc8h=O?k~jP3 zS2Jyr__l*9yFINd-}QgCmuI#piDqk#eyKQ-``6N~DmwD#*7>a6o;ppbpS5b)Q&rD< zZH}+9@0<}A40@8IXk7Zs;=!%PO5yvj?S<p#g&%#nSF_nM$@$XPmtXyVDi&4kZ%JIV z#58#0*}QAh7jNzmR6ZnP^Vh_<vj2{m(kjsfmxBJjy7=XOvvXrpAj{MJYIZxK`}Zhw zIWc&gJ-+vTb=kty2dvk#{SRLcIhj+a(I4u;{Ne1@jDCKe-FK&02<*~vDA};}+lj+h zn|y9p7jSHmocc$;Q~!q6X&<Ftk(BsK9{Kn6^RsnK-f_F1nfCW$l8c?r!Sj0g*+NQx zU98(`%%?@`iOOtsx#s*<+;Pr)!6(X{na7{K%=!Okedqc43q7x`xghq5<I(4P@-F)e z_r_}9lSp;tocd{6{Ayj@1v8tMao^gIyi#WN<`>T!;(qL3>hnctM&U-oI>FZh&J*rC zPyRpU$2{lBmJ9nh(*1e`pM3uN|F_iSuO25@ES$u$GhRJk?RBtEIckY+!mqH#{N*!! zPbVr^7D)(-t1t+^ySht+IZAg=#^>yePx4&y_Rf=4wsZcDoA$BfNdNc!mMIz&EyM!u zw#MGtHf!<q@@Sz&jO95JFV9<V?Maz>C2#umwlDeTyjQ>IP5H^=A+_vYi-yau^{wmY zFZ9g&<9SBG_x<BP@fr+28~5-@evq0oN#flHQ%y4=5B+an&qSUzY~P`<F)-*^Pqw^H z-sx+<BRux5WjodRfp22-snhl%cK;=2rKC+}VSKJ;wz>Y#pS^Le^`c(Wa=V2@R=q5_ zccOZ!^YpE=_nvWH!<3w`_uWl{Q>|rkrm}|*RoFaf{v2Z&$+Z3M|Kx|iuU~jlYk14R zOzHX-#cTba=fAdmm6BtnK8@$Mp@-5z8xOy2Olq;*M@-Lu>o?nGd0bJ<^R1z^(u9+8 zKi)-FIG(@mtvkK)Ykh7_M!ozjo)j70MM|+B&R_q3`}Iza(4BgT*{jo&lFE%t*7Pp> zJEQqPmhMi4K)zLH4l($rOw+x_a_yj%UzZ4Hiu>~Er<eNP{I~Su(;wd#dUA&SaJStY z{-a)zvB>P@?DC5q#-BGz>=yfdsX*zY?DgB-;yjEy7d9<cPB+u4SZXQ%VO`7n>}rn* z>uka&toX+9_KuTS;Qe0z=ll76!&n4=wpM#*e4QU>bH=S+v@@Jn*5=7pp95{j|5}x+ z)NII)Y?z}P7;7VZYW3M$iVqc^&fEF>gWGwzLI;6b<FtiAKU8IR&*;q;J+hzQw{P(U zwxabeUq5~P$FF_bujWnU*~mXL`^^4kNl!0gHoRyknr-sqSEhQzNy$HH%`sMYQrF$v z^IhRi-Od2ZSx+w+zP;buznSZse4CnipGDxp#DdhX$3MPrd-1KqRKYU8c$x35%ITb6 zy;*cG-Y)H0QYvQo><+tAN`<*cd)Ul<*KVjSi|1dley*bPr^Pvp66rpC3jYmEIycsD zuMGaqw6wP7U*XNo_p&d1c*A(}*O{bs#a4`IyVUhB{AoJCC;NEMW(UQ8v8p?p?^G#Y zw>{#ur1*G(@$~v|h14pW-T+VcPyEi4o7Vj{SmE%(<n8g_`?;B~-jn-nx`W9yee2YU z|H*xCL-xCWx$`?z@{98NpexeO&d2OaQYwzid};gPlhAXl(PH`6*Dq7ji$fmS^ZT0B z>hLhd&z&_{L4I0HQ})d@EcbrQ%PBe6lC!>eLAO<|lF{|YrrVPkQ)6N|Vm|Slo_*&@ zbw%QRpZuNOftTxZ0?NJ3d*8gY=l6ZLw38t&QRk|B{J)$ejVlKX+wDK@f8EUX_A}pk z<H@oucYET@7v275^+BNZ^u6Z8hvRmY7Oy!!tI%nuh1S8|7a0xi6+QABBLDF_PtG-E zYWA&rTOBN)e!w#C#l)b9X|m3>(LYyri_gzs_di$SJbSvKa=7secCA^zt*rN|#Y?oi zi`>55v_)->M@{G53l9#yFm3Xg*!kba<Ye>vPcccX%YGmKy}wOxx{G~mns0TOnO0Nq z6PxzgH*crT>^0C?pt$-5uj7`}H}>s${;l=N!f!p^J2>X&E}4@%_u#Sny@!js=kE3Y zp6@()?UGr4_84_?amatKzxGhM`EY@{$`-c?r}sN3UaB^jCmz-!xGXY!<&8u6scUss zcB!xG_E6uo|9isoqQ8dc9^HB&+N?b5?0$aVpx|jzcLjtaclF<|pA_XJdm-aU&9sV5 z+dV!z@S5F@tjY|R&uJ+S6h6o!DD$wksj`q?y!gS|H=7j`R&SQCt5ja3>o0Ma`|8A1 z-?lIGTof_&`-I$Urv*jo_xxl3xZ+IZ`Hzhkzs|3D|3}Lp-(gXsbnNZPopBlo0sMle z3g50i)Lgc0ZED(f#+T>I-l@;>ceHhC_$}Ade7C9K$$RI?Udmj1RtWH1n>Vk2`TxSH z&rCP+23<V-PJCCx>&EghwYROBJXcmW-^_C;$baAad{gY*Gu6gx%C=c?|KgK4{%dR7 zy~B|cUz|<TN(_I0DZX7zoy#lRAa7~sqV+C2Dqi&euIHW-qwg{K&Y6=gJP%8m&lU1V zO^dnJ<F5U5>edME`ZrNaL+q;51<ij3wl@|E&TiS+w{Pdkp0`ZO-j9OxKIuD8-pw9% z?N0jf!0RX0ta$qJ@n`uM?neS|5_W92Pq}kj+^}-<l&7V>x6O`iwTOy{wK)7EuAp^Q zdEjd?*L}}<)i~bww68T3ODhr%n#Fw3JM;I)=ND82+?R-*6TbZ6%H270`)?m-yf9Tl zu4ny+3}f}i1M3d`n6iB`+wtl>G9ru{XUWM~TVJblTky^Mow50a>{%ky&Xn446nxv7 za;op?iw<q)74?#{mT=7E=?!|wKk>V7)y`x6&-a^4YvwUrYT#J;jOE)Eg&bFAK6hE^ z%Ck9p+pUDoO#JWJd++U}eEE$|Z)_Z6`g&%?nDwW8c=6Y5*@Hs)2j>@_Yz^#;ezeul zCVR!ZyMBl5?){%0tXlKB>D+~>?~55jN{{8F9{f5fX_jNH<Br$Q-ipmTyXBwZ<G<1d z2OO*APkR5Hd}@ZY$mLyoO0q7pe>#34Ma;+3wrC!wApfF(p!CnbkAIH$N!k&#dGSl$ zqw`)1<k+u%G-1j-O~nn@qE~mi9eT!*f9*MUd8QgucH9)_FpUz2f<NI#m%ne~`&^xI zsiM(ix_eOGCYH0EJ*k2$&Pl&2Sg&+$Xk7Ku%>CfzmEUD2uIUYIy_RBR9&_f#>XbRb z6Qxhu#_V=uTArr0$Kd5eS?1e|8Se1;2QW|gb=*{=s3q$DOyP>ai2_k#b{tFV+!r{e z%K7Pjef;x(R^*pE=F>0j%d`HKXMcI8Qo#206_;wo+P6=Y5)+Wsf8h7zn*_tXaI3pr zYFnmX-`952szQn9)!L;On+2@fjs!gydD}N-r#MgJy5uLbTQAQ1y7A*3(Z7HGio53I zx*uAeXxq;%p26`+?9d7)_xNX}t(&h$=0&|(z1A(VSm8_P%dJYHRld?{r>#!kb<f+u zc)s+l-dC51PO0XTrV)7}GP4dY{Khof`d;m}E2~u_{O$MF8L9oedqd{k4tBSqtgJ<X z5{qP8Ejng%S2~_L_C#E3W4HjP;KI$qoee8533yJpBsk+c%VbOaoy$v`k~F_IMs3cK zuzJl?{BRH7P6dli9Hs{jczvB^SNA`2OXHlz2^T)k@U)qbJ@+l&p>4b!H<vt)TNHe~ zVpeqb3-(RdiuoGWy1R()cqn$@u|^w%cIR{@*Tp+Gd*oefbBv$;Fve{Icht|lHzids zossUIbmWr#z5gZ&TUpkuDW7{?F24Gv`9c{Pp`8LsU+x;Lj(p4Zah=2DwAvX<x1Id| z{Ahq{*81ENx5}*E2cD3V?by%q{?ff7zkTbY%g=n7TlGNe+r}<a8IJB``$bvu^Z!4U zn6hR{+FbLkTc_K5$6u5Rn0rxON1-@MBR_<<X5y>ElVfyMU%i+z>32rUq&Jn#2Y(#> zd@6=B*;`+n^Yrpa_ba<^P59T=D|E3+Em?_2>$rx_{fqT?{%@~*>pH(sV^$^mjOed> zHpvtwJWX6+9&u#P-3N67{}29KvM*@e(hK^}PF813%4q#~Mrm34kHb=ew&ff%`o7;? z@cZiYj;<E_UzcD0KeKIOsgR#+M)jR^asJQ0>`Mw)&Fjd0tMhbG>7wZGk%vCt$}joP zwov;^gNWkljI>+N^^9WQ+}&y4t~PZ}x#Pp2jxGD#4j<X~dfPt1(A2d}tJzim&P_Rg zI)_PmbLNl6?pyx~|4sKTR(ozXGh%kRn6BD6IkCvM`&x}Pmad)YZaHyHb@KJbGuPG} z-_P&+?5_3VMQdNml->LAt0AvZY5F-1#<xjZWp`?_?6qmWzVGavkL{`P9}KsN%Kn*C z@Z!by=e6Hg8ybGO>!v*Meq=;*V}a<BLJ_Ih>353z>g8wYL?2SsQj=N8w$Y(k)@4uH z=fjtFI=0`OnN~c7XYXm970vhT_Wv`EJTG%)syK)Bb1UTxSD!W4=SDLI`KNTB5{z?y zIm@y4^vbmRb&-mHPhWWA`t+5=M~*!4?R;PU7_6^5`aplRBj4Rmja<{bpXPpVV%#WT z7x({ec;uqOHl?kMLc&WQ*+_6)Y;)_{bndlQGW*WGR#FwW%Uf!eoSj#`cDm}{)Qq6? z4Nq_UVtjVzS;~IP=Ue`qnY!xq;j($g2g-O|(r5N&Jh!v6|NqJOWoO3xNSEvh>CTTe zm{08#IMlrA%GBO3*Mm<oZf{$2WlqftUO}V4gMTbdR%(3QYwzzaGBwcHq?I@Ab#n6N zZ2|cO%pnbtiOti(H5S{+AOG*Lw&ZbyNk_s5ANOT9=M_xl=swx<IPv}CSw}bI$i*y) zwrooNZDjWOQ7B(MkFQyp&aSRcdrmW`&lX=I*vdA~`NFl2CO<N5T)yYAY<j;?`A5Z{ z=@&NhdQ_P{-^U-lifdE+%JT=ezmVP%STg5eZfBX_Y3KMe9}^a|SG>6R=TRN6ZxRP@ zF@xB3kpS0<-EGHjv|B$q@I5*Fpm>i~UJTQWYxXn$_g~*%)@<d^@pYrIL)t$1=0lf) z&Z`|uz5VIyXIatr$8%YyMd#j}<ILXD{>n5>T;mUq@3kk_Zu(_1@9&F@xKMFnh49j6 zS8bP@a8(}hkno>q^JJbu&8+_C^)kZ7UzVN`;5ZZg|C<x1Reg%#M5U;k{wmtu72h+@ zOtO7nJmaa?j(-hT(wB9d;9;%1pBWugrQRm7XBPW0chPyu>&qriuf1ir)IPkfKz@Dk z`33g#{%3E#=lK1)_u-<WTaO$)m+dgk^FxhYT*Zgt9rk}?u6{_+agl!U<m;J9j4OLK z^!+wn&;D|5IJ0>F?LQ~u77M@l@w}Y7!R4~#R$umxhhje>(&8;_RBPlIge~IV%<L=> z3ixc;*82EeOZdM7Il1?nXH4!&vp1Rdch7FCy`RoB@=uOmd}T_R!tZ|B-@Xs5v*%eA zoV`}RNuKYKOmF<PpAU<(ZuAwF$EvusFRqpOzesd<<!avR*MI9INvL0avB9tX+&|kZ z`8&T|`*OuVhwJN#<NtT<epEN@m~XdS^O4_NkyC@VbS^b{WTvgyKc&{8uCzUCLvqPn z=PSP+d=1b$8maNO;{Wx&{snulS8cU77cw{&9^rOp@xFX%<{s(2+t+s+SMhZ>b~PAq z)Nc@5CvY&?Vnxv6SMD1ZrOVGYc<@b_hiO^J^w8H*KR&hW-ObWHw|uRVzRBi$*ZTXv z@89>%d0${cG;6j0=E*F(l27EVkDbcAO?ztf?drA9_uRXBj@wUAvC(*Hqs_W|$HU$> zy{W8tsiWx3^=xL+CcOo(IC9diU4MG;hdN)&rGqgF*XN%*|Mv0g^imyxb9=V$m{qQ; zFZSiW@$IEQcYS>8x8d!h2#wjvyv===ALW1b6?FM9vG|naqQvdWf0PZXlX(xGIPgJr zYpF}PvlFB6(x?W<muI8QcI({efBw7TFSkaNYWv2mH=dU_Ts-iw%Oi;`BP7Y_=RX^j z@5i)~5A1oyk(d2_^OX4S*C$N<u=>LH{mRuY+D-yCGZh~l{}ZggC;dP3;r@glmQ&X1 z#j(fE?>{_$<}v5DXSD5RzA=8^tUZ<Wuj#SZu}jzr=eD;TDOi@J&Q-MDa_b&9mlJC= z>#TSlzYyLvf4Zf6?wvQ2D~u*B{i$nT%r>nk(Os#sEOc{YL85gKKR?sz=Z}AUKhiu$ zT;Yu4{1`RyUppsr{kQK`KEnPckMs6hgIlSoy?eJzPN~bERQPn;+VzSIipMtv#Cd4i z?aSZ#`ou)Nbw~DaOuVwq)}wN_r1_TMExNu;d$}Ik-~0c?qH=NawsV3r?=LSDZmGGW z%yG|D>8H_!iQMfuTXU7C{|)WDc#3cLo4=`l&Mi3?)^_ehlDO{#k>(|5XRv<Hay*l4 z&bBW~p6f}h9k<Ee^rUZGM@0XA{94Ru6dqJ8>YdK~*6bd~v**0(#TJF~(p4WrLZYVx z&5kZV!f;m8vwOPb57UaJeRsmM{@&tMo}!rNr(G2=>By}q!jCu)dJCjK+H~+<h-;4y z`ys}IKaan*-@LT?Wn57G3YWV}ZMU!lEiH|!I=n7<{iNla&#*65bK%>=(y5+lZt^2o z^t9Jrnfp`v->P{meHOY>+Wo<9nP|b^O%IccI1Zm(*4Sn9Yf|?@x$FDu<o<P<)ZS{9 znD;hg(S~!@>;HVpDR7MXutjxJ#FZ#9>ymYW_ASC2zkiqIoA<eL=KE|z?PHru%?`;% zuU>iP+KV=xhb~`dCY$U(Hs{vo3wO0rTBbTFE7soopK5o!I59V4;m-fB+>Mjtp36O( zZc%FadC%6V(vNm@+;2J``m(aU-N`zQTPbovrtLMC<=nQX9?3KvG@1CeOKoA_q<hzE z_BsEZe93tCk?*t8V{g>``8PW}J&P?P*fS!OZ}LPXLq}6Lx%wg#w(COGe;(d>?f7K+ z%bcwF<vT(?oO?L!Zi$(V?0bE`g9{XTV}39B`gwKG(vsu9`DP^6@EprraptUDXNcac z@O(SF{}nw`&#&JTx#!u5>gU_HGvw;9du^&tPp>^$R;T$YmS6nhvtmX2@*gk0N6hYQ zeD-37ocnaQ4NG$r&HLIy=Ul6C&U+}9_I`7#m7YUxq3XJWFWRSUtiSXBauAz%sXe>i zw0^7gFA|+z@42??%o%=HWp|n8boI)J)h<u}m$nCo?|L%xc$bT2&kQ5O>le35c7|>3 zNK6l3^B|ya^QOYyz0X&lKQZY%H}hGs;wkd>^@p}ib$FVtq`B(ts^=?<W3GjKdi16G z9^<RkX~yZ_JM)<?{yQ%lCs1w`_j->K!_>RgJ0(`7C~p>(P(0sO@}PF5PTsM~a5wKV zj{ZX}5mSUrrZv~t{O)zqW?ArJ-64yPOxu24>n$9cBREZEa%}Z0a$bGzE1x>;>37+@ z&9QG3xFjEF2j9NDN2mJgJcjl97p6Q4V_5imx3-N9?~OAYOV%C8SCE_k=-%@eSK3qk z3Vz1<|Nkep=jP8o|1$2vplu3^h08q{-Hd<VZM<)r|F_@zPeNVxq@eT6<<9rdzuh#Y z^w6@$lGzKhTxST^{O&9~zq0R&2uqW9n9h0b2j{iy@BRN*k^S&aZQz88gP}WL3bW18 z_r3k+9`lhy4;yXgaxb~Mq2TYnQ_pOlcTM1sI~P~+%Sr5X|9A0wx4bJ>FTd>YA$r26 zbDlHzU5Rvx6$@Fl?9sdl>@)kH|NnK-yO8yy9@E3U4FT6~mrMWObNI5Od(4+v;fKz5 zH{N(;`SUT~d81&t&C{Pc#=Mvu88hd8rS0(*AKbIP?>qDI_}8n84*9-wkb2Zpa;0fo zOBu6E{k}iVd{yVPH{Cqr#CK#@%=Y<f{_Ht?bxrH{o3G7I-_D+C=JRjIsb#l<?#CDX z&6}H36Y6+=y?~7%*P@-LYnE+NY}#SHOX#4*%y`2)=`V}#_5M8OJiq<_{wE6DcCW&m zI_sY4Y}>g`a>3~t@&DD*W<I%^Rq#<i{N|P3Q{{;aKm8T<%-Z0=BV>H?_V0iD7(Eka zocL6F<EQBEuR9E1on3PB_jZmG=fD52f2tk-^Hli0PgB>|41T6)!+-X>vm|GhYcBiF zz#zOIu|)LIb0SuN5>!$#=WQ%!!Q4<$y}RbOoH9M9i|oqZ@^ad=Wm7hV2u=}{ba5|q zjf^P>IWqO=#6b3og0j~OLoP^)i=?t77O-@ex=IMLw?5qFd)p-Qa$4r)J!-yE=hM&6 zEWda1|9;i?d+$u&|NUIeWRu#{_3z8S?dFw!wx75BT(44(YLB{)2Gir8#UCn_IrjZF zTeE)s`b7^{az1~|A<Q|MGnn%-$7RlReum3G|NfYx*>btphUdE?|GuAV4gMWGDDf;+ zs5sPhhVKmT2!{xl2pa~SN8cY8ui`Y0P+PXC#y6!>IwbPL*?iUy`K7g7uV3ms<JzOE zyhde>(i+7zvJBTg{QhWpn$vrV&6zaI*{6!we@fd*6g`+7-~WgIx#6~5e0S%Z|Fb6L zUKZzbVKbpu9JARPtm^FT(rr&4$@<rqs*_$E`EJ=pUya=|Kb~D@{=a<VzJ8FleRIBw z{K-kUr>Bsk7IWf;5yOdU^Uu$7gFXeEF4{KfX<l55%!8T!+FNCQJS(5@^Z1X0`<1_0 zbsw*Y>sgm?G$(#f^6@_NclY=If7jR7*S>rA?)h(DzAW6kcW<w{-<%9(nZy!<C=TA1 z=`T&|mtMDXdH?gz#l`OHm!9vK)NVD+{6s8o;>t<Qn}5taKJAv+k7wlqKjqIoX0LU! zsnh!$H`(>N{_V}_=Vgz4-}d-;zq#;q&8lU2Zu|?U7b>xR`fvMZo}Lr?>7&A5W|m({ z-@k6*LdVmG)TZq({gdN;!|b5>+`z2p2ea=xK8U|v-E-fk{L=pU$M?9u{B?Hi+O-d4 ze%09U&*N@A!SZC`%+!a>xw*O1-`(1J`V`~5Le|8E){^R7x)Q-$k{{0I&-}Ul+rC?K zzkJlbdG5OAy?Ezc{~|BB-*~NexH7)Q&snce(5iF);+)S%|DC=c)S`Fo@4bEhik7@( z&N<!v<?eQQ%OaLC_a_YJJ1PoAf4A(+*{`<QR@;lM=5w^$zqNbkpMJc3R_@*xe^$SG z{d&JgU8Q>O-e)I^TK+RH-_2RCQv3Jb#^mD)`sNeY?#Q~ouh#0C^BM;GdhVBB#9wTd zfAQ+oEx-3SUGFnWUi_#0s``UY`Q_hw_jVR9Kf<2GeJ=TT>#u`Tl9HM3|C!eKzvj)} z9~C!#{@1v-c!z_`ck4&*wjFNgkN2yZsk?0dfz<P&3gY4BW@dG>O8#*6X|7p&@%~?? zqrLgo6(1ICW8IpwU##GMR~Ki^=jfz=+#A1tpX_(Y&iz)>ug~!rZ|tw!ySHy@?WVJL z7Zp`GhOAZa(p#rc*`)KQc^~(E$<*pwFW=wyS{gL{LUGQs^M}f>6x?4GD`?o5U*~;d ze}VnUrH_AWRR3Sb%+9yR#VY@=Vcnr}d%vomX;r=<b!s;2i~nX<ZO}jcbNO1)b;d=4 zs{HTmN?u%;{N?UkFTRpBA7xH*eDa^z$a`n|q9l+{C)D5A-)Y15IcCe=_WgOrRchPB ze(CLrKDX2^_^?d!nOxs`zSoaruGg<i(A=M|TD&dnWb;|e`;J8ox0-q-8GkJ5pCmu& zd3P5l*CfXKf2MWRAF+RYlW*SX#~aV3-unGMXwS8)(=%T;s!3h$zc}O89`E9HuQxxC zs1yIWWA0_)7dsDW)zxmD)UB$+Z~8~}^-aAFnHZNsrld>Ef}6PPKTbV&?%a+U3`Pvn zGp6f*IGfM;!@l?FUmm%~OV<b=vMtKGaxZ5uo0+JgM3U87{|U20&-53pd!C;1PHdao z`In3R>?hT~+R7yS^Q)5h<(bM8+g)|mua4x~awg7oqf!y??>8HG?HB)GEmAVtJuj7^ z>_N`Idx4zK<9EzIWVNm1_{W-~e<$12MZJIcd}6%o(;KHNcvg!(FRLqavD>wDUSZ4W z80SS#8Sfjm&#!ImUgvq&{bT&9_4RXpNl(hwW!|deJz@3cAG<d_Yuoozx2azC{n>=u z?A5y(OC=wFlX$(iN4oA%`#p!s`PV9AlUJw7&V6*sTwVW@L0{@apLfg^lV^Rgnl8D! zrl}^R`y=}c>73hQ(;BVboep|;TvE?n=fUjzN<XfDyjQcW_Vv_ze;WSmeJWS_eY=^t zdH22>5>Z)igd?`GCCeV;c;<25^K80xO0oDArf<dPR{fPolAhT3`Dg70b>o|5M~^Y> z`zfpN-|F7%(`M_#dWDmg=N-1q$`3a;HRb$XXjyXd`HfE*fyI}u{>d?QTQ`yUov~5F z4zbe5+&ANL3M#?68U81IPn@5=``^cV)zMK=R%d=F^tt6N-+BCpPKoM@g;O`2oHd10 zFLrl~MB?oW)6Fg)7rX4<$vS~w@tlOX>h*m;Wf}f2j__YykrTGFWY6}k`}X}y4ZVGE zhlAKU<=vS(r^l>(Ayp+g>rAXq;maGxPBA=_wVKMqFvEV+Mutb6Kc;x<L`%j$nSGz> zr~J7how9n?{>~%SAAVYGZ;#zG^|fl?o#`ojYkho+W}p1ChCBBEk8j>{=g!^c_a)a$ zv_z-j`<dkVm-OX7oXv0i)1PKJ?`YB5xBq&V@M|vSKheL%f6c?fH6`zsK0TE`@%O^E zg>Pk#J(z2g&N9<oZsU~WIh(dJ?)$0RP~Z7;*+!e|D+&+X`Kx{GU2?40wQC)6FJ?sK z)TtKh>xS39?%G@ZUCyNFe~rIC|Ff;dw;1mK5j*hT<J#YuUf<0(%I;}@vtZ5TiN9uC zImvylQ+vbHQ{@jHm+Wi4|NhmB7Xs1>g$I1(4o`HRP+wp+_4ocsZ+E`<r+2OP<^SLm z;iK;kKVM(KdgX}L7T2rRB|01Cmc;cR<dd4THiub7e$MG+i?WW7{QJ}j?k66;z9DY$ z{TY`p8wy;z9&_AO?uOkH_76W#h)*zovZgaUWAdJIqt_pk<l1}Ju)p{mxQ@Sz_m9YR zmRCQvc31GIckumqX72ybee?OYzj5cb`9Ha*dDngKd%?b+D&HcPy{YrO=2MkZQTD`s zh4}o#bq>$%_dkya$YHo<)+xK@>BiO1Hp<w#{J36tzh?T(_sM^!UHdy_Rb$7y$F`TZ zp5gy!Hs`NHXp8QijZ2rRE<N5{Abh^`#m5sJ%(caHn*Zk%-Y-*rA8~kM=sn>}kCGJE z2v*-a!q{J|BO=ZI>zM`n|KuC@7WVCQ`ug?j?{9Cj!#^jk_?oacF06j~glWF&8|DR^ zuTJbqku6M-c`^I3%%ASJ?q~Td|G2$-ZkyJ}{<>n@Cn?X9mA{Yf=FGfV^GNl`*Tk*s zM3cWvjH!A!`?*BN`q_et&u{m<trz+HKyU8n&bRJ+Y(kR%<>*HH=+p`FmQHjJkri3* z>|-<g__9g02Q=#3UM@be>%q>GCw{0~UcXqE$9CF(QqKM@IhG&8E8`qWm@O|I&GK`o zIWSZ79rLkI#$I!j&G?ERY?9-8@g(Yf>l^v7&HE=<TsIGYnq|dz<!iwchpIdQQ^7ZZ zlRicsecW7iV+Yr>_-DVwJ{Whu-`|~Wcgg<BFa1aR+)tG|MeF_6_$T;VB>$=DIV-jq zdcOi0W84#M>=$p%->+29w*T7kKlZ-=-i3Vnd+7mlz-1S?hM&EqZ~hyIonK)iu&c?o zBYH}G%$rMw3-aeZR`{2@(ffGai^H2&<xgmSpZs_B={fJ`oJ^kVa(}(_u@zcLJ#s0s z6AgbczxELNaerafz7xOgj~B-V{_M@KJ9YQbu@`n-jQwAi)~b}KY5sYAL%#6A@2KeL z<mA~c+jki5np@(uzWw05PfI@BU-xr){QV0zZtS=@H)`YjEjtVkNh!=_PT<W6`td&C zPkF(9m2ZdVNPN5O<5}@WT{o|1!h6}k$5-Yk{CoI$>BH|kZqz@~Jo7(wclrBkf3~Z4 z{LedDzx|>8i~3({1asB-)jR%Qn|$|IeRIs~t$hdo&zD)OEiENw@_#MoqyG)B#B=VL z`uh4R{yQ(TxLnq%#N+sX&rkoWLvn?)@2ULnUX!b~=V-6swSSraVw*ng7Z3f*UVCKc zs*SbY72T`<*BVdtdim>oG3ToPe`fwt%8n8E|2N=j{nGr<<qZFCzWUE!R$3|>p8O@G z>DB)IZ<bw~9`|{-@7K2>tNy3Y{{MUTEajI;vYw~@$Y1;O`g1_p#(e9m&;CEU=AOVC zv3TXg`We?7R1^Qnf82NPasU1GA=Q5;?fK@veaF^``49IhRPnBmo4;`1KlV>+iy3Zg zx88h)k?*Oke4*~`TOM!PucY7IJL$At7{m2IiIe9$wsu8qUUA*R&do0Vk@OLU{#mAd zp0U66b!Wf7zwDgNVF}wM-&|bR^{!!9w|GKs?_=3C-WgZSj~sJ-SLzwi9sQf#di{CM z=J)?C*8lB_k&a}vIi3{pCr<oL_4@!jhEM+vZriqPPW3$D3!C0D?!Nt|+hOgOttMg4 zXTNj*zxi#KP3|{_Ka-2(Ecp$~&VLrjFOp;VaoA@1UFKi;o8`YfRNVC~{>S;UckTE7 zYrc+o`bJomJ#6QbH_Q`0uTR_YrP5#%`yaO5|0kFHxBaqx;g0X_Kis9ye(EyLDVfXt zx9aGezaLsGe>46n<a^Ei>EyyW+)u3jzsgU0ub#E9DF48O+rO9pIKS;a@9SHt{2Qtd zm~T3xUsgG%)siJ@+voKQp6|NX|HuE)KE<8i!$0cR_TPTL?edL=<x_c2{MI?cl|PBQ zlP|-*qj+7sQSyiQU(c7O+2`yxUQqKnn&JP=BF8hOuc~he2=AF+)Oa?p;dxSc#OCw{ zU1Pg|bNes-R($(2eByJ5U(dEP{JZ$5$nnI_{WrdM@+I`{c*5lTlV?LrIzy6v%I2NM zZu6TH&+k8F!G6trKkFy{`Kq7i7X6#}!+y@ktn(+_bu^3?oM)KxRO|Dd@Y|m(nM-zC z{SSQCu`&I@k$Lq`LDk*#AL3>X?<y}oe~{QeTaNpN<4*0P^BAp8ho0McK2UeQal?L} z+Si7E|5j;DJ@xyK_WeI%C+wrv6@PeRxnPB0od3p;Y2lA{Up{qZ(L4PfD`uI>{=V<2 z{nKr~2WLH)nEv3$vvP(%w~Ie4`jgmgDJ}ba@w4jkS^o6`<@F2qGBc$A-8#!Isqeeg zyX3g^`o%v%icedlS__N+Y?$}|$oaiqY>VFceXiwac*iLDyy$*-x3vS`tm=dW_Pose zeDR;>Ucad~x&Mc6Lj9JQ^hb6JuI<mX{_t(a?~ujs7$pPKBqiScy3cHK`RM)d?#+K@ zosB&I;pg`t8HGFICHyn;>$)Gv>t2_2*l+gT{$!NI4R%Xq`&05~67>AaXO`DZo%G#M zXaD4wUvdUlR*LU_@jI)~{b6A8=Zo9tPnr|`?(;tO3+DS>KgpM}N6g{LsOG%?LAKPt zX)im^wuHXd_0Q+u`5Jykw%~C@+Q*q4r_*+xsb;vo!>77`_k(&Dndtg!bDMwfd1wCN zZ2rVQr*FKHvGiiA^Ld=|zPZWgPv@i5H?rHmGptL~`!aX_k2f#%e({}%*--8f_A&iX zn(o8ry}Q^&&bQ6D_sj6hQ)!j`u7&dj{(YXxc*Wywtz}W3%DG8XqJFZTIaoEl^7(tA z>HA)b-#IC}A^kaHHTxT-e?C{zu5H?PUGrXQ?PbB>>yx+cnZNkC?yTP|ALp;<xpV2- zwQEI-{{OvoVYzr!b@lq^JBubV7bun2txw&(;Zo{7#<}`W_%e2W-hS=t{^!C6ezl5U z`6p((yxDYpRovnizk6yvM>~PsvT^0FI|Vb%9pzfLPTtXd_ul_~oo}1=GTX(!uzs+1 zU2>mXdU^7Bx9Jb>{8}}saJ~ab%aITZ<2A8s<*(E+nu%qfEI6ldEjTam*UG0012WDr z-idA6+dX6V+gGQjxc`(j{J+=o-EX-Mv0?ju>N5YonR4J+$cn|bi*p*MGXME2&};uL z%<)e{t!Rg^0zWhBv$TNi$7N)ntXF@wd-n~o)YXxqwf!^m>rNl3pTcuvR@b-P+XM4@ zO;rNz825iSkiX!1XD`>gI>$=YZ#NcAW0=ot-Dqqc7aJd6uUpu*wPMHQui0N_%@6+9 z`2E4Vd&xTCzpU4sIru+$|FkuCPlaxlD_DEUe1Gbb`==O=aeuwA<M&p>{7;gPxT{YG zpV>K;_3Y)sX`E}!n`0i-h`uOhXRh~_-1jy;a(?sID)Y~gY(KAPbkE!T3Dolym%LD{ zwK?WjUG9_k*S-D?=N6v(6@BTw+B5(4x|{xpa%tOt(7&-;#c=tJUsl(Cny%|97TNbx zmgV2YNAIp5+w-bRVm?ER<44JB0gv`1u36q(w|s`Vu5h8*qWNoISX;{XT4udTJYFYy zMEKBewYt8jXR=oNXS@xIe5O(R+1lfe_vY`};T!cu=L>{)GYaf}*i(7sVZGBonT?Wf zOwWZj&ONZlNBTFz8Dmp}^Cy%)-1@C~|A4K`^vOOqYn&?LkDF!g^u8{aKJC)I+s|g- zcYGE<Yt7n=c8T*&uQ}>fo3^<7++D8T-;ZB$N=Lj?sQ12kE`0ZwJBOD9-KxG_^Z9jW z{T7Y+3!W!U+o-c9t!_!#=812e7w)W|dwPw$r)?qY>AN=n>TKAbaT=s66!)h_Pksa% zhVd4jpYS{>eY1{ELfy2@Hfxf82Y9^A*WI5!)%$vXs@=nwqrX$?`V5~wi7~(bCye3$ zr7uxEoo8567>nzSW2)YzG2U)>%KG2^)3)lL$1~ycA!c=75<cpkHQz6KWPhF#ck)be z+j8sP%G2rh{FANro9Ed!PA_fW_j7H)zg+3WCyMhe|7+a%s=V*_)4BH>s0X?Z{%81K zF0VZ8+6pTM1|zA=kcg59UmvUF{9L`nl>DSry^7od@PM6-eMLcHa&~HoLQ-maW}dCm z``!DM6f#q6mBLMZ4SWlnQ!_F>s)|yBtNcQetFn_VQ<UuOxNIt{Dsl^QQ%e#RDspr3 zimfVamB8j&<rQ0jg!Ppaz)DK8ZIv8B7Ai#e1}He^7o{qg>KW@M8yFfYn3?GrnwXlI z8R{q)85kPr8yM*unCTjtSecqx8JR0Ufs!4Uf`WogQA(Oskc%7Cx}uacTcwPWk^(Dz z{qpj1y>er{{GxPyLrY6bkTFI^x<x5zy2X`wC5aWfdBw^QLty5(q!uR^WfqiV=I1GZ z%uP(nFD<cEQUX~7wN(LXQAKV6+@ic<XxJs^=jvA^7U&!58R)}J1{q$FTVUl}l$uzQ zUlfv`pJNB{xm#vYYI%N9cCmtUu$h8}Z(?$0UP*p&hNg`^x(0*`Y~WI<E{P?ncAyZ_ zH8j*UG!8Meure{QGBu7u(hpIDrrkF`B{QuORl8}3k)f5bg_WrVR6CL)sCFBDP@o_M z5;z7x{zDTd6nH7g@USZ=Ey@8$QA)CYYEEiyYF<gPzM-BWYWSrjTcza}<tCQcW#%TP zr|K8vrQ7Hu1o65L;_4t5H#;sHeQ??Xr9+t0;n7MH2Gn6RF&l2^s3q{AAcip-T*QPD zT+L{3!GnSr#%OR66H0J3qrn9a3St<e!9`3c!PSfg7d$A4VT=YBF`)!kGa6j*pdf}Z z8eGJL5?sw_aKVFu7{+LD5fe&qHKV}=4+>%!qrpW?D8bc?1{XXih+&Kd7crp(S2G%1 z@Sq@uF&bRNgc4lMXmG)Uf*8hVa1j$qa5baB1rG{h7^A^OOen$Cj0P7xD2QQ<1{X1* z1XnW}T=1YEhA|pk#Do%D&1i7JgMt{wXmAk|N^mu!!37TrVi=>rMNBBc)r<xgJSd1^ zj0P7mp#)bm8eH(8Acip-T*QPDT+L{3!GnSr#%OR66H0J3qrn9a3St<e!9`3c!PSfg z7fAqbaB(3ve5B^3*eaDP+1sh{?t0C@puphi;ur$D$FFjR$km<S--moPvo*fE+4S(4 z4Hk>kbeg=BG#Z~|?RjQ+Y{n7o9SaH%KH(A+YL@?)^}$f@M6!|+TmGHBi`sUm+;i_$ zGtc`d9I&XvgQuq@mn|)R*YfSFtnSO#`hAaHzB;|CO6=J0k9PjHm+uD0*82T@6?<;C z>@myZfl{_hWM4AMs9MXirc9aGy)Usxc4c9}C59J|E->(<1;{k89#E<8mw38ZF6Qq% zLn9T(0!8LFZb=6&#@54p9X2{ozphxM%-g|spqGasuW-kS=dDGYtcL~KJ@2hv@6KxB z&Ll8Z`pMbv9nMTjmMI$=0{SMH+iS+DpUke52~2Pk65yRF?Yq;lN%4Qs#-j!m6Q3?| ze{$BJ$zwuuQ?W~fB&UPK8-|L6=WLY$>jF#N7dD*OFCxKbecZ#~(FSJagOV3pr54Ys zmsq3IcINE&NzQd{I}a|?-xIgK?%&Vn;kpqU5{_M28SKx)*8I4utLs#Z-t_qEUzLu{ z&^va9;eg56mPCob!v;zlBi8I)ym)cp^>wlJ|KH}<|9;rUE6t}YtuQrOMdQl^855N| zllrHc&S}Uv!SIkdK;>W6M8RmYyct%dSr<=D)lQ#V_v>YPSXh`};qJSt3?+tozL&TB zvuKN+#@Zo$E_jNM+T_@?XU|%1%endKobC5Jo4?*IzyEgH^TT{TLXrlHHZU7!<XHwa z1PDHL<>IKUc$i?jHfn3uE7j>Sn-=Wa^-Co7dacLZn##3~lT#yQ7@p6W-IiElZfaWl z;m_yu`zx-;mcPx(%kw+L*Yl)HB51*p1o3p%<{}k_K-VcOPDO1j&A#*P?(Q#odg}5y zo6l#uy}Z2CjE=>yu&^m59SP1aJm-6E=hRu!&lz?IM9#8^PwvTlWE>mgA1C~2*0j{Z zbCsKR@2)<-di}m%UvjtK-IjX1Pc|^+3%6*ZA;aDi48rb>3wlfxR&{*p-fx%kr8O)* z{(bcJyt^}tpP!o>9}^SPex}#^z6oPPW@MO=T>tjcva)x%IXQny-rw8HUjFvh)i1}S z^JS{uZoO{xgkM}-Jp2ByYulZc&#(J+<JYfWvkD&{yV~lsFuD2Q1B><7qgQ6mnr^7( zI`3_{#q+fM{Pzd1$Jf^$PMse6%|13ZHpnDUP|TG}<fI|%%c&EYROAJpG93t8A7`6; zagpnFR;ETz55|eCO^Ff@o!j|x|9+nT|Ic#M>}xsq_tjSG&lUdZo&G#yV&&erxAFhK z#-A3~i7==<H^(x5?Yeb#H{X`Ai{w3FNSL+k=FOWwUxGrS>g+7j>WL4<IKA|Z7Kkhf zcVn8c$Mp)kd`-dCEt!|~N_NJ?S=uS6+UcD3+O}m&&5t|9=WUCh&n<tKk(1*yq4>qw zaNh{eD?ZB(+_*Qt<dWyn)6@0sf4+|Y|EpX}OKVxytY?8cjc59_-LHPXclkN%_j~Sd z-MUrv==%V_iN_nho+@BgIvB9?klLbs|Np+fey{kv?RGY%#>Xpsw(E4yUM6W<@!>&y z{?4b<j?2~m`RHbucO(4fr-EN|x(hQltbaB0lO6X4>HIw(cgX+y&_4azl`Ch|_&FI4 zY|>f1cW>?QOG~}q*SuP}oUil#q$<@mCa`U;Asa3J1h`z`*5C8tYw<bD^p(dSYfiOi zY?!?))6CpFKXzx))4lw5KN6HT<(rkVNo`<u_^;0xc->Hl=hsd?_6K=89=82@dU|?% zcwk`RqGg#@a}$&%zNmWCsh$_VCF7#llWW?0PY6$W$l~JcRye)Gxu}h=A@|mnmzVTw zUwTh}z3bgF=H8=8y60^^pV42x<5Abyf^WxG?NfX8C)jb~6mFhy`}$IbH9K}h+}~07 z*!-Nu;~s5WIe*ow`fZ6S_v(JX{hB_f@Ywr@Yr>TtO;FN#9xJcsAYqi`)ug!7dHve8 zU;jMSuaB(x^YQrn<(X2Ob+{j`-<f}Z-}U{U=f1!5`C+?!+r-L8E8;ulJ{h0l^-DVK z856i};k%kwCzi}hm1VI0ey3PluHr%C>+Gy7zs21FmrZ*2|Nr}5|I94Y>{=C}iTv(D zniEAC1>D%Cq^y%Rmuc`Y&?pz_K7VKH)~)k=XPf<XkBz-+vvJd7h6D+>FHfh($9)Es zLZ&IVe_iQ!Ie0>K(<e#gr$So0N>UgmwzadUpH0o*_w(8JXJ=*>_pW;#_jC5N)Q{)w ze!rPI+0W|bbe1VBL5sAR7O+e1eUu@@Z>kW|DL(nIy4n&`6O%u0W+eAnb~hY+^s(ak z-SYc;A1#}mcZ+kk%rdSZCZ$G+R}!szZcg!j(yaP7`^ww%pwwf@EvB>M;Ny=hPygti z-c<JX*4IZ{GB3X~<#F!v)!cRH(FC!GYj@9UFKj8EXZK6dJV+*xH$kZ3C4(QU0sDbF zYooW@WzAZ4(9(bXio*{-9L!$7_nQzy@zKi740CuAj2fyKk{PEcv#yER{^P{MV;7G9 zEiHT-#1P8x>PXG9j*Vw06-RB$xp^qVq-w^wlO|`MEc2aR_qb^1KCNe_(KYW`7`8Gr zCCNqloA158v#*Bn;sl|<P>;JOG8y*iu>U)yy?%|6udyThy~~$BpZ|Q`{{QY14TV|_ zl1UF9AKmITk?|0}LW79I)JORaHSZ2yU^+a3>307WUY<_FxeCW-)Lqcq_v2Ch>$h)n zmlPZGDF6F%+5bLIf?UIT1=dF;OB&X?y*gOB+TJRp!DDYATY^lG|92mT<;*jxPwQ^i z@lp{=w0e+Xa;xU))Ns89*`AjSeeSO`wcMY%RUc*1I{IHtiS?Jul6m(g?8vM$Jh`yM z)4SY%qeSppiN(FY#dV{$D9H7fU$Q)wwDFs3x7bC?I?0vnUnLBuD{1ft+BG~`?0m;# zV})Ume@Rrn&kTcuzc0GW|Fx3f@tZW=Lv8Y2`@b*!>vxpBy|s5kwDKjFCI1v;CA)op z?OQTqQTN8g?m&)72Tm9?#)L0DUVL1(+$VNl&Cm5Qdeiw2UA=tw?%zxekzeJm^F3Ja zJ3r%8u$R3wUt&U6z&(>)T<Pa+zu!?^x^$@!&x~a=Yd)P+&wt6xvuhXY&TaDFSeMPO z3G?DxncZcuCFxAl-Obwab1Yi+zd9zJ|L2K*{m;{Xr=?0VEXb5%YCIr*ujcdF?iju4 zTb?Z0sK7r{e1iGca-*#tOFCaL9mw1N_uEPJxh0pFGS^2>YqhQZwx{gr)bLB8Yhx~Y z8NBG4)}%Yt!qoYy`ZgBLfG4}!?G&6DdDI_IPVQ4m{`>KL-S^%4Z}0E_&-;_r_wtRE z%jZ@7+?0Cy)x^l(Cw{vMn|)fgPt7S`!j$*x%gf8f^&>Z>>^%MSlS1-6v-sMtSO0hN zNL+DSe$o8o_7dL-a({M}zV^$^%-s2Y+3Y+k$C(RQmWgPl>R)#dnz8VLzL1FIoJo&N zIS=%>C_Vf0^Yis1k3aH#jK1@<s4{F##K*_KepTu3Ob;?&R$KLxPeI<{N{+y`s;{q% zK{asK=NYMy$J%(M-_?CSYrcCzq3(*wLAk}ff8449k6EUNhK3r~ee906`ExUU{@<Ky zYa*9E`adc8Ns|eK^>GhAX`Sr_DPP27tA!f2R(^gqPknw((Nuw09)?q=Pphww+grtF z6r<!gQN~E6A)s)oTh*^GFaKE<Ka0`WcUtH4BX)kdn)Hi{T;Cr&Co41|#!gOMe{C=5 zRJD)aZs+IMyk5Kg$$QJf(*-ZYL;v6Wa`I|;{NAS@9v+T%$(X@-0aVPKR`Z#mP(Qus zWW$lLb&kQ$=bXL28PvY`Q&+#X;6UMJlj`vGaeobpniZ3|v^L7L_uk1X|9EF-@$@g> zzU9Si&%1lFKrH$2!uTcbj&r*?8~#5M-(PWH(;5keb(vDydU|r@zu#`3&t*ORLiP0P z7DaQHSUtQXZu5H0W<AmOGgBjL-rw7szb<-vp8Td{wkxtm8CqIetK#-leB7(6tDCLA z`^_dPp8a(b7j^Hd5E5uu6TiPMJ~{cZn&3+ohQD`;&&O)S1+UI_ICYm(AhdkR;=0vg zYiGUs{`<K1yA3+pmA7-Z+j8zc9H5o|Qb*>J%jQ+9R!R2T|ND_||MSUY`QC=QiC*)p z94<%p`rCXw;&!f*NmI`;GxMck`JKY!A~$r`nJDyZtgGK|@1P=K#ZdNg>GU`yp(`^| zBQr8He+Ibx%9zuT_MbP}>e-W%ll3cpzuj)W@5?3c=Lr>GyPwot6+U}?P2}d)n>T-! ze`K@l^{(fOy7jE&%f8!}eimoxSUk1h+s*Xp{gTGdTu#c)DSo{3`Ml~jo>@#v>~?FO zl<n?5Z~1(VXl!h3zsQ1kHl<@3OAOAc=H})eTfKhYu0V})28Y<#yO{?QCR9ylUvj6I z(TUkgieX#H%S)EK)`_3=RGECT&-(qIV)jjw&$!v_wHM&<i2?;GJD<!BW&giM0fx(p zJgqXy-fq3VFMHOqGd+pB)`{OOy&kKs++OtFKWF9tCE3hTd<`!zFF!A2&v1GZ=zO28 z8#hi&`+M=leZiF>t5&a`{rQ43zwM^d*VnXvUC?jsFy!i(!l1@*@9Nc56La(W7N45= zb1R?COz(Ja8M&I7simlWt;&K$iym=b@;zi}e!ueh-2F<zL8V$PmP#NG`&&Mp@_zrn zU$6VWER5$eoIICdBSXUVb+PZGr==<_y|eYzt5+xE)`#D-=IW@KJNXy03-f_z=jYqE zxtu#-X?|^e{QlTIQy+##g%=)KJ+Z5+YZW*EL5b-11$}12$yb-;aB|eY*?8Q{bGb6Z zkD7gk@qb^1H*Z+3@-&op8PlULsbvRQ#eJr}{O_SUxit6YCRa7B06t06rHPYPty-0) z6SwEbJ;kEK7e2B6{P6L(eEpu220eKk8<%Fz`hAF7-^Q<Id3-<1(wK%D`)q1|eUW@* zx><+&?c2AzeJ+=*+HA4t(JK8(c{A2VZ;$Kzb2epabcX0O-H(fQ@2=h-qhfSy%S_{R zKlgd}IK2ECQe;I%MTIAvG}u0C)~vGb&sU#pQ;w^;BkuY4((T*33lF#Pe!j4MrcZN- z+>&>#!Dgxq3)ZfEJO6|Sdst|w>B0$y&$c>zs@nV1h<8eHo~%W|1BEx1K_M}{S`(kT zxVpMt6_2m^m<tM){9P}XJ)Ri7|H2$&POb+JYAtGh6evHBvFn+2{<(JO`IGIRn2tOx z`gt;8P5qz8^1dkvTJ1G?9=m@2E<Eh<@#^zK>vrzk8G2=n!)23-z4yADj!h9)NOI&* z5EZX`y>|Po31=05s%`4Env^HOZf>u8baLjVzAyKx-@j#_x&QWCJ-rm2N=7Fg9R`E= zs+UX4YR-LeufNhhd%l}VG1I4u?((HV6OTqT9yR;<^M$EzlvI!5vS-qTPk+QrF8M5+ z7ij!kcICo_ieC4PkJ+^TsoN)WXinVe{t3%HzgI5EFsb_S@Avz7tNeR=dQVJauq=Jj z$jmOJ@L7L~^CzxZ5^aJXD{N935@w~9{Q2>5-rwKfk3X1mWsdRhYLj52nLRnTw!FMp z`T5yjzMY3T)rvaSMs7}<8o<->LrUQ3QN?Mgp6W{M3(n57-L0_wK*rL!*5!8A<?rrr zbB23_TkG~tyXfRT%eJ~q)F`3wm6s&PQ`U~mSucA8kIneDRKGT}=g0MiJ4}mvqoSj? z->vz4Hr#in(bIirXPbXlC_S8dA}npoX_IAk$u`DmXI3nHKlx-z`MToYi}tvL8O?kn z*lNzOz;~WarA&jY#DeIAEdeG{wto(B>)$CqsXBd6@0$ugJ74Ba&ny!UwG;;BM@(z2 zu(=m{;>IT?6{+4bHYUctDeEr1e)TF#)=&Ctg39ERC%(PCU2k6e?2P-wx9z8wuWf6S z5n8xtk&??a_B0bIU5*KRT*AV`!zWAFNF+y<mX_N7+^)5)ZP&bHkBsy4Z0qM(m%nQ@ zPCr+}a&zf96USZb-<A~2TJbQ%;S|GyO`D1qRq&s)%+Jic+5JY<albe7*JqY-4<7g1 z|BHy?owaOZg29Y)Q7xO7nr5xoy0!H7-|zSLf4Py|zjrgg?ZsXZfy5iaheD078^($7 zuzht<Fqn5mH7a^r&P}yA>#0T0Rn#3e?b}oM_}JSkJ)f)ghJJo_mRo_DBiF}Fi=oqP zaeI8-&!?da177S>^`2J4Q2kZsX;<EjsoPJ9PI<zd-o5PHeEa$}x8L%06z@ol>|8#- zuF9ONK>sOIOWn-<-)?2URXS)P+Yq@a<)r3@*?YI~9ItzKeM6wp%$`4Q^XseM#Q%F5 zzwXa7^Zh@K<{S-{DC;}1yxsF$O*5#eqHcKX(k~0C-fernUW+zLFkMhFk*nj@<Oyt_ z?6<kFv>7ftKgaTOND;58rq1d)*(xs{9Bh6cQ~UL5__;ZjpD)@SnY>Cp<)mZ%yjOF6 zvIQ^qo2x3iD>X7KIC!#8l|;e5#;nwfZ@6ZiTfF!Gzu)iuW*9v5QCRB!>eZ_hxz)+j z<lHvoCzh9&AFls<y?$-%rj(QICvuNnD!Jek_2c4|6(v<y_EdgmS{U%cWud*r^E)@T zWL{4DICo7A^TjwV^_4P<W;JH&{d}rl|8rkz<R!86yzRUHgzx_~l_ywi%2M+PFSW@N zr^nY-h8jrh*~D)<(c6Ys<?L0>*}=>Q*6siID{|52xo5&(|NOeX{;wg|8S{c&nSGH} zv(5AQ%+1aJ>;851O`aZGb~7|?{q$4Unu0!XE53a9!r9+q=Ek30>Ry}d=F7cg&wF=g z=X2%B>yLeZfB*lxX}Zx>3FpiGCS9+cB&?7X6fw(tUe&9W%TxaeGK7VNeLE`u_l5g$ z1?&GAH+C!mC84L&<L&m#m%Hyv%duNxCgq_%|9;i$wedVGOp`M{{S@}M`FQ_Pwcn*> z3Vea9<1fb)9p*KE)8V4@`$^}nb-SnQL>3wDoECNNX@o;Ohv)VR4Ut{%I@RZ89J(-L z<KKyMgx~&}!1iQT_PU*3M{H-LM!tCS=FZN#zrW5;I4jG>u-X2vV*Q2AD{6-`^=|Gc ze9SDS*|lQz>e<ylpH9E7bXe6$P51CT6U&C6xYajOj3g_6zukWQ=ih(a+!utKb?2Xp z{IaX)=_z4QEfbLX?~=Fv-)(Ex`W7+OuK4U{cb?VbT+FrA>-SZ8=jXp?j6C<WXs6Bg z`*pv!ZitTF(qlE<?qxZv_FY-NypId73HvQMcJ1<=!071Lk=t@^7G133Vz_Ym^5*Bq zr1NX!%ib-R%23(6Twij&@$|1p#p7!Po~ZT7T9<uWU-xyjaAV2;qcLY0Gy*3Z>=j7u zDSRm=uT<`?=ptG<ZAI0SiSFn4SeTA?eNLFQ?B|=!=j}A2goF5|x!-H}a{Z)ZS;2&r z(_9&Bl8^O#1ob4ohlGXsO^xq$TYPq5Kt^Lm>=gg$GShd+ofZ3{wE4lJwB-2LoeSSx zy_e3ts+C*3ulB=1_IlsTHGHyGTb3?c_U!+Gdz(DF0&lvXmg@53%gXLnVc5KLr)A;m zwcFR3`34`GSQ!`?m~p&M)?7?n{IY4M&*H*U)2H51R4z98w&0j*Td;q?q=XACmXYfo zFdcZe=kvLxdE2dd-ION2`1SLAeVu-h_+Gvji7)vDsxH4cyXo4x*xlv7zr8j3$HO3D zU-#$wzYp#9bJ}}ed{SWUn5FN%+x9|O<=!U}dA5$8&2x=2PHTuWe0y&H|L1K}Q`60< zV#`w_pY49XZ@1%@UYSXYt~W9`-Ciuk@Z+TV{67Ky{^#d?Icjp&H2>b7?7DxS=gaf& zwwoxt<mOYkloICD!sW>pUs_aduIel@mR&C0@a=*#|Jh%+uJ79x@y&s~;o7xpZ^L5> zk9Ke94m<ggRdnyO%>}`)w?6HcWccyuXm`EZp{YC!<-70x0}cPI1BImPv7m{&Jk*R< zFYq|9bkj8V_=AfUDy-adwQZi6!8Dynqr!)WTK_M6UA1efhtW(P{n%Y!&e>LfJ2HXS zE&l7z+TeM-XJ$wwSO)d(%dy>TmUE+EaiT=w(%E+!Te-#mNeBI1vac!R`PP{pU#HAs zslKn1dC=oS+vde{RAe>#IFzoItcg3Ly?S+wj##$n=SjS0l3rh1yPJ>s#Z*>>^>vZV znID%g>|a+TU-RLh@Ul!bS81D@PgZ|DZvXFNsz+(u>~4{Uc(+xKGj2tmYk$a}=h-*) zS}bc2|1lNA`7=FiE#esszOUQ;?pLCTRIXyNk?&=nKQI03cS+wod-K;DHTEa$CmeQ9 zy7cViB^e+4lk@9-z5IGyw*1b{Ey|fn6FKtl?D)7&d)<ylvKL=?ht^#=6m<5+!c(Ht z99H}@TkbZ)is9Rf#r@}YeYxbFU$`^Iby{lS#aGvE?JR!2`SLQ~-SRj82K;(^-#R8Y z>FT*9W|iI!6UCF4WvXq@x%uhFp32Yjgcf*kd(YawN+~4vTBN9VWzXcQg_;5;l~H#) zd}dpfuBt!W#yj0_w%J>!*z0$NcrNb#{?qQji|vQM7MKSuyEd73O787#e-mzP$rR6; z^-QQad0J{@JHPzBKZoW2eRwAxU$c?-CZEODmkhldmcBkz?0YS-$FEST^s`~~m-l-< zpIcq^<6(RLsue3{tjnC`cMw#vH^=`x6+X|gF@fPQd&iuD`3wGh?63cGZD#tsoi5)r zSb{iHI$ah${dzsV{?V(|>+3>yNX<DkXXih@Db68+u1BY>-S8FEQ@vIBeD3x;Z_9qa zEcLnEv;WH_@A7W73#`qIJo*X_atqeP?*8^f{?7yU?H49xDQsQv>eZ`XC1+=uX6Nnw zdM$QCdb-8cIU+%N%e!={mV91W_v`X}x!p-eyI!9@eOmo8+l6VVA2UpD{g{3KPuf-g zx=)k)4Ll4Q9<sBXU=~qgd-0C>lIHY`tgKsm>i+&Z{(i?}z9<hb#zhXiDZG!S95~Lf z;nXRw>zh(f_w9c+D|_9lHEZT5npI5vXB@g`TN1|s1~)bV1^$3#esf=en*7iF=iB|Q zmg`rSt!KM*n@`os%F3?xaj$t@{r%eSxvH8b2Oe}a=2#vNUgq<0ebm;hdwVKB?+XtK zD(boHXWf=~<X*+&-mmF%OQ&7t+LK_=Fp-(%1aH^bDKVQ;PPWX>-&eVk<IROXYroV5 zv?YGovVHseKQ9*d|9cM_qk33;-nKk~rIu^aY5o0s(jFdajh|<fdg^6pXlQUrtbW+{ zMNABrO?p9N*t;IKNnh*qjai`@aiLC8t5-$A!AxUQyT`S#%6_|FFWzwL?RaqiZ(Y6Y zgB_X@;;WOCXZn<tmX^MK`{ISgjceDg?a9Btk6FIvgX80Ay3x0`<=vIyYjt{OS^R8D z?L+Q(4eNhD9<R>M%5qv5kdfo+di2MpO`DSM=9LHJa4b{%;Hhxt+_`i9^DCdtbPrn> zv$Hp+*yM$5X^2#&1B123tF%em?y|pn{kj%Z^Q_6Qc`Pl?&eT|SY=-smV-rhm+swSK z5^FNYP|bW^3WLcsCElA3x7Vp3d2+5@zV63CQSGod6aG7Ii(mD?c6o@EPy@ra3~AQm znWsa;A|qe!`uFR#{|x*3f0bLeZe70P?mMH2tQH}&y}c&i7OGqE;b1enx$U11htG35 zJDuG>^|fLt^M*#XYpMKCIP&&t#lA0bber22IeP`e0Z;Y0A)9h;ZW8vle!Jyn^0A(o zF)=YQi!*1juT;06>;0M`q)KSY?4W#IW2s)btel)X-%e?--?K66>MDPkvhPb?D?}+f zJ(g-N`zi0~pmMRte%E5@x4rX<+h1JvvtIjU)#`P#K*Q+sf&v2rUw^Ig-W!*H;c1a* z_N-;yLb=B*{iCLdn)4`2^&daHF=EZ?ojZTdf4}$py=}kW@2_8egL`6Bu1UJr-8|3S zD$5mb!!&!@98@w-6u8#!c02vGIZDm^!a>WKXS3F=-8J3n>`&P(9jBxM<QjU8)V*?e zrFLYZAa9W0>T|ZIbhWOFFm(jiw!ONt<e%|XU*kt6K{8IBx*ry<T)t|(=IW9h1{cew zR~)9C0aer6x31MS*yS=!IPm%W;J2-l>m)fWUvh0#z7w!q;H&L|Kt2xDD6M7FdRLyZ ziw`<FRVrSxaO0OsCKpw8+aQjWzaDp#X-gR>xW7DcdBqyd|Nm$9F&UkDp`oz22M;6X z-S>+RtTHn)0{%udOHMgkYLt0t$@%H8pLj4jIRxz8+iE4&XfvmKvYM~etC%G!4Fy`l z3pP%4+Nm=AcWmy|l!TT8l2aQj3YvpwHr!IlF=$x9sCA3Kr!9w<;aCBa@hS#E2MbrO zxu;licn=v^OnmyJsk}?(mX~51^Nc{o6YuWso|#eao^SWG&F(bIlM7rwUdDLxW&Lbs zX-=D|!l+{T{8-^}S@T7ne22L@7@U1)ot~PTbXmN|aPN*CJ67%3QPFn%v1Q=pErmTB zjgHOm3EY}`$ysH4;W_0wpUX~flA3(-$^F9*KeRtA_+hY#F=%J2na6@&AtC3Zy6z$Z zii=bPvZ7Wd+f6(ESW`=1fBw_2Rp+mi)^a7UVVNoIU+TH8an;W7ImPo>E~L(S)>mQk z&o4au`n3q1Yis9R&o_R$@WC`?rVgb=DM@o|HVLg~T(D?SQkJLZNv7EA{)s(5Cq!=G zyDF@-^U#wy<+GRlbW{<l+_-sj@$$@BSz^iO${x@8d?dj^vd}@sWeSVZ>cxG>AAg)a zefs>ckdTsz%QA&0MlSKX>o~v6;f}#XC9khdK5HJISTg6-FQ*CFm$C~PJWp@>_T}3* zySq1U?o^%V;gYz%ddblhFVB>ptK1V1;3gu#E~wgFmZG<wyWv^U&YIBB(DYw5`+m+^ zc2zN2`~>4nr#o9_F57wC<g7pMVT&0)YO@zze6cXY<d);HwW8wU?R(<hM{K_x`?zT5 zD-&PquorW^j?Kuanj9+5bYP3l>jWLK+ZXQK`D33nyEA61;!8iV))!L+8CCp2Gk&1i zGghX?*CxKRS*j1Gayi{FIlJ~^#uxwC*x1{`oi6%6Ekg~LxAU?8JtT1%G%4)u<)!w! zX5ac(yXuURbr`J8m(|}kIqPq2Z5>`-TKcxN`0Eswr3!nE-Zb#Ixb#Y!zth@&yLMqk z6k}1b>!vU56Fr{H?Ca~3UG#RcP5Zr?t1VNfXp7(YcJJ{=k?B*X&W#BP`6BCkdD*1e zMVI*5p4-UuAD?ek^W($&mbyUen>Sy%vMma4*lMEBz#t|FS_{x7D!|lsO4Lj+G%6}8 zIx@0y^|H+46W4FP@}uI4$=Us7B_%f3E?>T^ah&(J)@-qwRr7;oleFK2+)HN+3kxfY zQ4rV>a{cSgCyEnOW-i;gckSA@=L#%pIR1u&JY5~$COV<5jqO&N^IFXk#)PX^uf~7> z{nuMEx#+sLrjpNPlkMBKZ@;hI5RktuYO^Ebg8$PSR=k$jmE3$;OgOXQ)TvXinh!oG z-L-B$$I|Ou&-ZA{@ZG<6>Cz_FzgJ|QF`wGNs3fxE)}@ZTeJ5VMdZqWZYVUOA%WHi2 zR;kMH{ok~7X{zy@y&G4p?@U{~dV$9&*0$C2_g7`z@>#!b-9NX$z>8CRHhNWB2OWOe z8KJXn-^!IQzZYE7ekrH^w{v|Wqf3XD=CX`>O?`&g>!tp=xo?xU-`2H0ee&eYw!}Sk zFD@*s7V2!d^J})6jrzlw#S6Dx4LCY&@{UC@i`DX1&t_Y4`t_f>de_j<t6%k|zcxvI z<EAvR;^BjX&95u7Zu3QL*SpQ{#&AU4ch;2R>AMu!TN)nTPzbtS>K_|>w|+;=y2=x4 zcn?_iyDh$G+Ri6i#d~wxzNqDnJC$@dSv(K3D~jrwSkyUdkFWQeCDO;YMXX)B_V2v& z&v(21vCj=qnS3&wPsZYdH&fRd*C}f`su_<I%{=1F)v@SE_sNNQ0tR(|e$3x__ub|R zjLn7TtatC)6$WYyw8ZiSvwHp(=Bw;kv~Z#0y_{33erso53O%$iAj8ko^CWMN;Z3m? z#toBBKIsMx&xY#+$nIYM?2<az<jqy7SFc`;efhOY{1Bg8aCG!--n)12{(g|N@<LIv zX44CWHk(cA2NwR_6q0aBEXhE^X4#@ekMfR1a7Z#A>N)<n-^|P`Phf#Zt&?l`8PEAo zm_6b=`BXNkyNbqs$xJ@p_jlR#*Lzu5cusHnW@>K!zoTK{shFGohHWANn~u%hmafb6 zAUh-DLx&;HEH&R*DMja2dbgORPJ8Uhv|-n-UH@)gy0odKxQ;`TJMeqe-s$a53o9QP z->jW#6>zuY_}s>T{W4B2Q$rqY>Rc+`5EmEs@93sYo2px)V~X6ev$J29+S=N(C$c-A zioSJs%E5nIPT6%&S$yf&(M>v!e?0D&pCrM`Im>gelYE=W_vzE7T?-8jwN(iFnHhNJ z)~zbtnTv15ZWY&5o&W5e;zNN(lUk-r+6B{3Kjmd>J}sH-nzCT;+qZA+3mKg4datM- znfS6%<6xQ9rMXU~zMuINw?|A?^Ihc2^g`nDoJ*H47jIa-I-B*m4ckG@o{b5qsZY;$ zGCF<@ino3Ldx@R8+dPF^G4^+#?%cKOm(auMlcw;rAKuOpAFytko1vnS!#Z8*YbQX{ zWp0h0-J2A}lBX#h3(<S__U+sGN0K)Fc9c@ip7pJD)~s3GDcbxg(`$FLSsnZ5cW!5_ zv#aaTl>XzJ8C*EkC!f4NB~<tBNr%{rK^vY1yPgd=HFeAL^-rcLUe!M?TP`EM;DX_4 zzFTYzpzJZ7=Ws=HO>gDid#9Nj9c+!V<tz7R9CEuirC5op{Kl@bDw}za927Rhyb#k| zH7hzQ>YuQr!HQlv*KO5}>o_kpuV1ywD)rHk&hJyFPoKZQCx9uq>&i2ROP3}e*iruW zmg$NHKE_tFxf2(ielllvJHLF~VaxXpZY7ncPMxZIQ?zqQcl_NeX$~=$u6M3Fw3s*f zoPeWhN2BD!f*<c9bgs4bWFIusWWODgdvJPO=IdQ{i}&pL^N>?m?a!IlU#A_~7uXXs z;gqa&Tgd(n!&67KdL`5tBR*E_QJ3Lc?{rL|aoy|5+S=OB6%MNkO<~Ocd*ym(NX*jQ z;{M~0zgO)QS1M-SnJDpo%a$#B*saTNT$AMER#n$uTg#w#-8?Hh+x*(KYp3oPKbod^ zUH_2LqF?8i`A0=XZJV)7)76-Hfw-t>?6absHYc7<V(ipC?x=k-$E@DJvhru<tYs(f zF0y>SXZz;OpA(<3DbGw!JYFR8ZL);+x1TlMuU@}44+{;Q%ad+s_T*P<@w#t&{PV9f zHk6l?*eI;g<7>#AWwvh7BByt6XOzDGB<sFza)|mI5lsy(tz9B1mqia7+&i;TXgcGZ zrrVzblX^ngnHsCr{pRf0wq?r}w!>@UTkIxgE9~m*;cO@`FMn_BTP*yu>)rR?;$7FT zypozwbe`!*;>Ia`zd}Poe6E`0?y;C!d~WjGxpVywy))SI*3@W9XBxwT*S~rKG``&a z`1tt$j2&OQC3fFhr+K$)@$%*A${xSfd@uK{T(M#X)9#~F*`91ZZ}<B9_ql!x8axb2 z7}hLV@<b?Q2lKSlS`Q{4lUB9HJBzYBPP{FP4~UN5UHIn4#^(tVU%O{C&tlivnKC_d z)_;NJMhx>NO`7yMvHX9qdA(zUMHHv2tLsyxRcsu!f}Jk&1m9nsvuw}yPH7&)V_kpi z{&yw!Sw5S{^yRd}5s6-rWjl|U_$o{F=CN=dc)6=?R>qFV2}S2wIe1@WFhm$g%u$X} z;bE|NE-Nc5Ydv9ZidoXjzmrUSXNz#Kyqjx~cu2PL)%3<L!>Qhv95-LPcCFm<xsh?3 z;ju0)EiFGczNh!*-`Mmwn5XX;@002Zn|YB6hUte5wrNGyoBS$w(V7~gcYV&PRjWV) zrt4lf@8^l=(M&qMZT;fZ$hOQ`MZ5FZ8bn1!=PK@dm9q93KgXQkVJDB?5}#n`eYV2p zU-$$O-xTpfGJ;7xqSbrvy}y3#n%$-LI?W?K=XS17Hkw%@Kht3Ive&;-E=Gnv75ZtV z{*}F>ZHke+vr_tlInsCU-o1S^dTake(@RT}{EkSh{`UK?wi+lE@c*5(eWuPcm&uzh z?>22Y{LuHxp7fsHk3VZ1Zv;>Jw2Cd5vGA9Xww~U+uAUu_7<MIXoZ%C)K&I$OmFP32 z*z4&We~m=)B(^HgWo`KW<%@};=#xhtF9pjzJv+}hzrL>Qs41?nO~2Y^o}_|y=4F$s zx@vB%J6?4!kzTfL-8-)*`D&~0Oe#Jue|pom$@4GoiF;r2<Yn)ICoCS<7G~aJNjbE6 zTIQ^hY|iC>?c7v7{|3d!?=L(v!w@w2H0Rz^$IB+?LG5jU=&WZd3<ox?saH~#ePSzZ z@O0~(^q#4cw@*uyV4rwaag$h0NT-f^QcvjgDO2u*g@kNbyL)$auDkp3yp(k7ON*3_ zNgRH6cX#HwjlDdFGfH;fU1kxld~+7_qCH`2l;ZRv&w8m%_C=d}N`KUp8o723%UQ`} z(Vgesc7G~W6geqAr}#+HMzxgUj^0*#f0erie0g=VJe4k|$ZCppzh$3kpS)(rgpE(Q zIb=I--oAai@BGYvFZzEKe7@X~=I0>P>7s7*`F(ih^F=kT)1v=%RQPskAAde;$?W+B z-Lov;d$c9GOzpSnQ~&1t(`{2k-}O(macXy;H(ESzudb?kmyw(Mm*J+6!ty>79_M$u z`YRVyPZU>}^O+-gjnAIGT`_w7i4uk>_KsFTt8bi_Ej*{J<Qno$aK5OYz<kRt-SyX_ z7uAGJ_;GH!^NVdaXI+2IE7c}=oZ&9h;;EBPKG}Ts?AiWfk3Y&;h(EiKu~1pTZvJ|% zvV1qkhwU|t6K5wFE@6-q?sS>e*tnC`O?u`s&+Cd=Gh3p9XFQoBy+rS#n_U0$wtdg% zlv~feF8@?}Q<cZP_0K+59AmuE$heEujl1w1zq``J-?L`VzVB9Mv;6!rMqXathT^s} z7H)Y$&-bjJu<<Fkhq_UpaqRW4QSF!AY$fJ=_E4Jm<L<#`c6rxr@_OmfyfYv8K5~r| za=g4nz)0z|Oqhet>8wkowy}20URT-v-0quWYGRVH_+o96#4&k(dApkVi`1{&E&G*i z^EkvoYw}YyrDU<<%O>BIsy#2fzvRGr<Req3%cJD&w`=<>=4(cF`%SyHg7JvS+1!a9 zPbOZwc8!1H?m2pFPeQ*vkkG$m;wygBBJ+EYjof`T#N?0+U;Fmof9ry~JdQ<7J^!5h zNYX~X8_xTR7P#N}@^p@TpWEVoIjfQvqED^~o7~r$|19;&&l!EorcIgB<Ephxscx3~ zp@$nT%XP9cJMBNS_+o~21K*NARy~H#_}H44A4%GH{iMR>#y@v=mv3Hp?)a(cOXh(R zKrG+KC9gV7Bx*Zv?fb;r)!psCsL%aeWp@Un=>y0-&;^zULXCg=WA&~_bSyvo_~RTd z2i7CaQ^K$4s#z^ckvL{8D=V8_T~+nu*`b|Bf)#mB6+M&QaW`)kL(;@0?TpW*S2SFB z!xgn*{n5uC%VYJf&wOO_tY{~A@+Z#O`S1p_DO-4NZIU|l@I%xh^-qHS%)0%H4JVaU zO*#LZyQ9W5vN_{O(#Eqz83CVo`)t46uzTOhJHd0ZS|l$o?-iaY3tr5fJNNzXzyDg! zEKBH_8Xgwrm!F+|yX{V7)nP7<=QcvUZtsgP2saD)YiYjRx^33CO`A4>rhVT0xd2*c z1fKOVs(zVrNwWN7g-y<^XZK_DuFDk4X=`fkT(x&^?M#j{7j*XSsIbqu*=>18mf1A< z_tLw&%Z+bHmoM`+W;pQt^IZN%Mut3(V~x~Iy_eqq{qTuj*yKZ(cCL9?@FVl5)XJE( z`fN;%$rI+*s~o*H;R-{Lk#BLdxA*Bke}8{JZQ9z|6A^TJ&Slm)(^8Le3oi81H;6o= z>218vBTL8fxs4=W`~T=Y;X6&&{}tMtCvo!9=~F-Q^7HQ}MqaZk+GQ=l6X&yT>9pd? zqrzqxkLJj~d-pDGSNZ#UuU&5O<}x|ojxJFSJ|OS9>Z<Fe2|-y)*XXZik5CZU!L_pT z)RWJ1@7}#TUvaiI4?|l0FXj`n1%b19mhV&%>a<~K+OqC-vA4H(_QZ!myF$0O8$LV9 z=oPm*;#{SQSod1cEsw2AZVy>n*6?nh8tXsHBy)pqT(Q{RX`q(b>s>zmj~IIH-Me>x z)-p}YM!PGO>hrCcE`{r5dwZW2JH3fd;qmQHQ>IUk=ia^5_4JBjRrW8tn@o8g_xJYp zii6tyE@kQFCj~!EkP(z+Qpot;rStAW>0MzSw&~s985mA)`nF~J_Wk`i#n$<StY2gg zot=65*6rKB6;Ak;?2Os0t*yQErTgn!smeavo9z~=EzDKSn)Pg3UtizqZ*OmxKlgaS zIaS1Up6aS&J(9)SmSrAqdSd0SG?Cpk+v(K7PbY4#daeKX_DPm!xw*NseJ|hf^ebm& zYMkBb`DV)2hpY>_^p<zbxp?c=ukCxQzyDjYc=2O-2}aw6lP)!NnSCx{yx`^KwW`+c zzUT=RzM{(}+pR?Q2EEqH&)#gWed6V#Wtp=&&z(DW^-=w%IBS!-KR={dHG)b`dj4em zA(3nnA6C>JV|&@mH!CK|;;YLn4v8#bnOg>lnrC-Dnp3`Y`}X_X))HF+N*uE1{bN{Y z-g{4H_3G8x`AQQfd`xF(IQ{h3ts5JYQ`Idq3q2ijer`&7tF+!X`svq6$q`>!mbSIA z`DUI|JFdO6`RbJ`HMgG@omGoBe*EzVTi`Ww71#B(Oioj*dDEA@-pVgy@nJ%0Wc7*g z7`yrJXMOtg>2cz9^`fSiZ;Fo1a4$&<-u=Qt)_I+}%G-N;XLrUWOqqT8amx!15w6xW zQBhG{ww>wAGV}8D^6CV?E#Y`|PQKt`_I_^j_Nv^U$!rYwZr%E2EGRp9(dqcGu(Ig| zp5C>Onr$aWvbr+qP2Fmv5zaGn-UOE@|CPM9xd|*xjh(8hs{b2Bj-L)wdbn-dHfz^! zy<Ff4pP>B>6RL7gslNOt|FGakfQr!0=snXHgtRy<tQH9f@zZ1raH)EB>9zZdeBP}U zOhI#>x;(DuY+J*>vGf!-Tl4Xdu&{Lt_ikcPsj8~V6T6)dP#p8>P*Zmt`=v+z!EFAb z^UU(@>~NLqf3CDdWLHhst=qS6*I&AN^{c<dW>e8-&n5F#C3?GuT7{f&ouB1<@!E^v z=7SIPU0z32E<TfCvTNJQl`r`v63Q<rzW2HnfB)#m$H(K}m+e09dQ64oxs6Px%e$=1 z%u4q!8X;5Vw{Cb*7vQ|@Y^?n3eoNCsR~R=0Xqc>CvgC=_tvS36Q$1AX*%mxF@VDR{ z`?d7{_a0^muP#&DdNP`+YmWr;gr1{G{idd-wnvR``>vQ5DYZHv_L>@3zNq(X_0=aY zzj8~Nb^P&1&`PbK{^P}pM!pLqgZ5U>f6v@gXC1>|uAI6`IA=kRwD~*sBqu#1#nUEd z&+6*xmVf{DZJXk4#^q+R3k1!!&Meyh+3DC+=f@_mo+WR4G5`Mi^<1q^<}Y{I$+~<| z5-q9PuyNx@Nf8b<1D^(lpN&Dm!Jl>KpWp7Haqdfh!MW%~7heeL>gulN3U3acVSN35 zO?E&=m$qnNNX|{J=+&!N?|=6F_w?>ZDphkU^7G%{UBp>(Frj1Tcl!^H@A@vNYfPOw zRh^xwF*?I@tHR|?Yy5Zb+I6j@q+|u_5<gS*ziIQWCunVYG4b4TF1F_5)22?1UH|%5 zN=nK6o`0rg<>l+Mva^44G_x>Eq&YPFaZpTZcxR_juaPKm?Ag0_?~YqrTW2b2vUV_; zPB875RX*n#TkQ4NMu!JK925$s7A)L7p>Xl)M_Wam8Q2V%Kwf+FvEt9dfQ)^|AODo= zv}c|vJ;%WJ^W_MgZ`GT+rPQB4S#2G%>8VV$ja<E}>rtEe=fB(fUhZ>LYtcQ(@Z3hN z%()<{QJkl3N7;X7IUNOu`3qJEZsUCV^r`pJ;F)=!S&|+XpR3k6eQTzN%D;RSp`Qjq zoibvM^P5&|*|KHXk|j@0%k@7m@x8pP<Cgs_3BCH;20Y2Z)z!bPHg<AvW#PW1@3K^o znWccmHP>_Aw7UxfGRg`IKkom&QB%U5ONQBDdTL~~?rE!xS!tUSCD<Q*tVp(z%kMt^ zI5GD6UAy_~&%7<0zVq(8tm&skFPY@7S@-&}DQLV?f8~RhESLEkGiS|rQ<~^*Wo5N( zVs77+t(O**XGsS-H0T6eIjfSpn}0`)Uc9U8QJwww>o+dT{QBsB$=gZu+J9s_u5q0Z z_)VtF!8A~4fueNA*DB7-CgtD0e6hK4@7})VKkN1L4=wm+Bva_nFz5E#OKK;#P20R{ z-R`D?4>*q=J^FlS%(`HgmodAJE3?HvTfih`#*-ZE?|;7d(1d```A@4n?lR<D*j+0p z=+H1nTIlzQiCa6l7%FV$O-eARSakmRY~3iCs~iO@mrjw>t6Y1|B-gI^obS1xikD5c zfBp7t-^H6Ze|8>zH?Kt2W%BDwg}n<4^5hI1R4h%dOqsZ&B)`N$=hBmc8oT(+%*>Z5 z>#tXLEz8{6voYvcM1V%xPNsALrM6<Zr*qmZpT{oC{AVoJpa1&ZyL+17oR)-1^ZEz- zGv+=vSGm15$m&sphtlqbRcBw#E$f|T<)AxR`o)7eXVOfshu!s_Yqsmp{q42pOKrY| zhVOKJI?IV6@N4s|dnu>Cvld?dv;OXbI8~)%89s-6<5p|_Zw>nq)VILO$(L!$y{Cz} z+1x!r4l0@lm6qS)R{v`xP;^N&%YDZ`tz~Uf+)Ndwa9D)Itn54B<T@?ObLsv5lEPQd z*#xGZFe`6<E0B0u{;;InxoiVw)+ZXWl~SL6^)5ECu;MzQv3PMqj}a>4Kf6}j^gQ1r S!7HF!gFIdRT-G@yGywoci3MW- literal 0 HcmV?d00001 diff --git a/lib/mejs/bigplay.png b/lib/mejs/bigplay.png new file mode 100755 index 0000000000000000000000000000000000000000..694553e31c387188b6bde397a5200c212aff2dc5 GIT binary patch literal 3001 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 V{5N~47Xt$WgQu&X%Q~loCIC=jhBg2I literal 0 HcmV?d00001 diff --git a/lib/mejs/bigplay.svg b/lib/mejs/bigplay.svg new file mode 100755 index 00000000..2b781700 --- /dev/null +++ b/lib/mejs/bigplay.svg @@ -0,0 +1,14 @@ +<?xml version="1.0" standalone="no"?> +<svg id="bigplay" viewBox="0 0 100 200" style="background-color:#ffffff00" version="1.1" + xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" + x="0px" y="0px" width="100px" height="200px" +> + <g id="dark"> + <path id="Polygon" d="M 72.5 49.5 L 38.75 68.9856 L 38.75 30.0144 L 72.5 49.5 Z" fill="#ffffff" opacity="0.75" /> + <path id="Ellipse" d="M 13 50.5 C 13 29.7891 29.7891 13 50.5 13 C 71.2109 13 88 29.7891 88 50.5 C 88 71.2109 71.2109 88 50.5 88 C 29.7891 88 13 71.2109 13 50.5 Z" stroke="#ffffff" stroke-width="5" fill="none" opacity="0.75"/> + </g> + <g id="light"> + <path id="Polygon2" d="M 72.5 149.5 L 38.75 168.9856 L 38.75 130.0144 L 72.5 149.5 Z" fill="#ffffff" opacity="1.0" /> + <path id="Ellipse2" d="M 13 150.5 C 13 129.7891 29.7891 113 50.5 113 C 71.2109 113 88 129.7891 88 150.5 C 88 171.211 71.2109 188 50.5 188 C 29.7891 188 13 171.211 13 150.5 Z" stroke="#ffffff" stroke-width="5" fill="none" opacity="1.0"/> + </g> +</svg> \ No newline at end of file diff --git a/lib/mejs/controls-ted.png b/lib/mejs/controls-ted.png new file mode 100755 index 0000000000000000000000000000000000000000..3aac05aa83cb7fed54831a19d85a8c267e939720 GIT binary patch literal 1559 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 literal 0 HcmV?d00001 diff --git a/lib/mejs/controls-wmp-bg.png b/lib/mejs/controls-wmp-bg.png new file mode 100755 index 0000000000000000000000000000000000000000..89bb9b95602ecfca6290f6006f817da365da7b90 GIT binary patch literal 1960 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 literal 0 HcmV?d00001 diff --git a/lib/mejs/controls-wmp.png b/lib/mejs/controls-wmp.png new file mode 100755 index 0000000000000000000000000000000000000000..4775ef5b02faf2b826d35dfc72511b6b27fea87b GIT binary patch literal 5511 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 M>FVdQ&MBb@0FGDV1^@s6 literal 0 HcmV?d00001 diff --git a/lib/mejs/controls.fw.png b/lib/mejs/controls.fw.png new file mode 100755 index 0000000000000000000000000000000000000000..e27682ae107408748ac91805eee0e1554d618cd5 GIT binary patch literal 80753 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 literal 0 HcmV?d00001 diff --git a/lib/mejs/controls.png b/lib/mejs/controls.png new file mode 100755 index 0000000000000000000000000000000000000000..f6a857d800b64264443af4609e0ebf7175593d8f GIT binary patch literal 1892 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 literal 0 HcmV?d00001 diff --git a/lib/mejs/controls.svg b/lib/mejs/controls.svg new file mode 100755 index 00000000..af3bd416 --- /dev/null +++ b/lib/mejs/controls.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?> <!-- Generator: Adobe Fireworks CS6, Export SVG Extension by Aaron Beall (http://fireworks.abeall.com) . Version: 0.6.1 --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg id="controls.fw-Page%201" viewBox="0 0 144 32" style="background-color:#ffffff00" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" x="0px" y="0px" width="144px" height="32px" > <defs> <radialGradient id="gradient1" cx="50%" cy="50%" r="50%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#f2f2f2" stop-opacity="0.2" offset="100%"/> </radialGradient> <linearGradient id="gradient2" x1="50%" y1="-7.8652%" x2="50%" y2="249.6629%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient3" x1="50%" y1="0%" x2="50%" y2="238.75%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient4" x1="50%" y1="0%" x2="50%" y2="100%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient5" x1="50%" y1="-33.3333%" x2="50%" y2="152.0833%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient6" x1="50%" y1="0%" x2="50%" y2="100%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient7" x1="50%" y1="-33.3333%" x2="50%" y2="152.0833%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient8" x1="50%" y1="0%" x2="50%" y2="100%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient9" x1="50%" y1="0%" x2="50%" y2="100%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient10" x1="50%" y1="0%" x2="50%" y2="100%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient11" x1="50%" y1="0%" x2="50%" y2="100%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient12" x1="50%" y1="0%" x2="50%" y2="238.75%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient13" x1="40%" y1="-140%" x2="40%" y2="98.75%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient14" x1="50%" y1="0%" x2="50%" y2="238.75%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient15" x1="60%" y1="-140%" x2="60%" y2="98.75%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient16" x1="50%" y1="0%" x2="50%" y2="298.4375%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient17" x1="50%" y1="0%" x2="50%" y2="238.75%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient18" x1="50%" y1="-200%" x2="50%" y2="100%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient19" x1="50%" y1="-200%" x2="50%" y2="110.9375%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient20" x1="55%" y1="0%" x2="55%" y2="100%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/> </linearGradient> <linearGradient id="gradient21" x1="50%" y1="0%" x2="50%" y2="100%"> <stop stop-color="#ffffff" stop-opacity="1" offset="0%"/> <stop stop-color="#c8c8c8" stop-opacity="1" offset="99.4444%"/> </linearGradient> </defs> <g id="BG"> </g> <g id="controls"> <path id="Line" d="M 98.5 7.5 L 109.5 7.5 " stroke="#ffffff" stroke-width="1" fill="none"/> <path id="Line2" d="M 98.5 3.5 L 109.5 3.5 " stroke="#ffffff" stroke-width="1" fill="none"/> <path id="Line3" d="M 98.5 11.5 L 109.5 11.5 " stroke="#ffffff" stroke-width="1" fill="none"/> <path id="Ellipse" d="M 108 11.5 C 108 10.6716 108.4477 10 109 10 C 109.5523 10 110 10.6716 110 11.5 C 110 12.3284 109.5523 13 109 13 C 108.4477 13 108 12.3284 108 11.5 Z" fill="#ffffff"/> <path id="Ellipse2" d="M 104 7.5 C 104 6.6716 104.4477 6 105 6 C 105.5523 6 106 6.6716 106 7.5 C 106 8.3284 105.5523 9 105 9 C 104.4477 9 104 8.3284 104 7.5 Z" fill="#ffffff"/> <path id="Ellipse3" d="M 108 3.5 C 108 2.6716 108.4477 2 109 2 C 109.5523 2 110 2.6716 110 3.5 C 110 4.3284 109.5523 5 109 5 C 108.4477 5 108 4.3284 108 3.5 Z" fill="#ffffff"/> </g> <g id="backlight"> <g id="off"> <rect x="83" y="21" width="10" height="6" stroke="#ffffff" stroke-width="1" fill="#333333"/> </g> <g id="on"> <path id="Ellipse4" d="M 81 8 C 81 5.2385 84.134 3 88 3 C 91.866 3 95 5.2385 95 8 C 95 10.7615 91.866 13 88 13 C 84.134 13 81 10.7615 81 8 Z" fill="url(#gradient1)"/> <rect x="83" y="5" width="10" height="6" stroke="#ffffff" stroke-width="1" fill="#333333"/> </g> </g> <g id="loop"> <g id="on2"> <path d="M 73.795 4.205 C 75.2155 4.8785 76.2 6.3234 76.2 8 C 76.2 10.3196 74.3196 12.2 72 12.2 C 69.6804 12.2 67.8 10.3196 67.8 8 C 67.8 6.3234 68.7845 4.8785 70.205 4.205 L 68.875 2.875 C 67.1501 3.9289 66 5.8306 66 8 C 66 11.3138 68.6862 14 72 14 C 75.3138 14 78 11.3138 78 8 C 78 5.8306 76.8499 3.9289 75.125 2.875 L 73.795 4.205 Z" fill="url(#gradient2)"/> <path d="M 71 2 L 66 2 L 71 7 L 71 2 Z" fill="url(#gradient3)"/> </g> <g id="off2"> <path d="M 73.795 20.205 C 75.2155 20.8785 76.2 22.3234 76.2 24 C 76.2 26.3196 74.3196 28.2 72 28.2 C 69.6804 28.2 67.8 26.3196 67.8 24 C 67.8 22.3234 68.7845 20.8785 70.205 20.205 L 68.875 18.875 C 67.1501 19.9289 66 21.8306 66 24 C 66 27.3138 68.6862 30 72 30 C 75.3138 30 78 27.3138 78 24 C 78 21.8306 76.8499 19.9289 75.125 18.875 L 73.795 20.205 Z" fill="#a8a8b7"/> <path d="M 71 18 L 66 18 L 71 23 L 71 18 Z" fill="#a8a8b7"/> </g> </g> <g id="cc"> <rect visibility="hidden" x="49" y="2" width="14" height="12" stroke="#b0b0b0" stroke-width="1" fill="none"/> <text visibility="hidden" x="49" y="17" width="14" fill="#ffffff" style="font-size: 10px; color: #ffffff; font-family: Arial; text-align: center; "><tspan><![CDATA[cc]]></tspan></text> <path d="M 55 7 C 50.2813 3.7813 50.063 12.9405 55 10 " stroke="#ffffff" stroke-width="1" fill="none"/> <path d="M 60 7 C 55.2813 3.7813 55.063 12.9405 60 10 " stroke="#ffffff" stroke-width="1" fill="none"/> <path d="M 50 3 L 62 3 L 62 13 L 50 13 L 50 3 ZM 49 2 L 49 14 L 63 14 L 63 2 L 49 2 Z" fill="url(#gradient4)"/> <rect x="49" y="2" width="14" height="12" fill="none"/> </g> <g id="volume"> <g id="no%20sound"> <rect x="17" y="5" width="5" height="6" fill="url(#gradient5)"/> <path d="M 21 5 L 25 2 L 25 14 L 21 11.0625 L 21 5 Z" fill="url(#gradient6)"/> </g> <g id="sound%20bars"> <rect x="17" y="21" width="5" height="6" fill="url(#gradient7)"/> <path d="M 21 21 L 25 18 L 25 30 L 21 27.0625 L 21 21 Z" fill="url(#gradient8)"/> <path d="M 27 18 C 27 18 30.0625 17.375 30 24 C 29.9375 30.625 27 30 27 30 " stroke="#ffffff" stroke-width="1" fill="none"/> <path d="M 26 21.0079 C 26 21.0079 28.041 20.6962 27.9994 24 C 27.9577 27.3038 26 26.9921 26 26.9921 " stroke="#ffffff" stroke-width="1" fill="none"/> </g> </g> <g id="play/pause"> <g id="play"> <path id="Polygon" d="M 14 8.5 L 3 14 L 3 3 L 14 8.5 Z" fill="url(#gradient9)"/> </g> <g id="pause"> <rect x="3" y="18" width="3" height="12" fill="url(#gradient10)"/> <rect x="10" y="18" width="3" height="12" fill="url(#gradient11)"/> </g> </g> <g id="fullscreen"> <g id="enter%201"> <path d="M 34 2 L 39 2 L 34 7 L 34 2 Z" fill="url(#gradient12)"/> <path d="M 34 14 L 39 14 L 34 9 L 34 14 Z" fill="url(#gradient13)"/> <path d="M 46 2 L 41 2 L 46 7 L 46 2 Z" fill="url(#gradient14)"/> <path d="M 46 14 L 41 14 L 46 9 L 46 14 Z" fill="url(#gradient15)"/> </g> <g id="exit"> <path d="M 42 22 L 46 22 L 42 18 L 42 22 Z" fill="url(#gradient16)"/> <path d="M 38 22 L 38 18 L 34 22 L 38 22 Z" fill="url(#gradient17)"/> <path d="M 38 26 L 34 26 L 38 30 L 38 26 Z" fill="url(#gradient18)"/> <path d="M 42 26 L 42 30 L 46 26 L 42 26 Z" fill="url(#gradient19)"/> </g> </g> <g id="stop"> <rect x="115" y="3" width="10" height="10" fill="url(#gradient20)"/> </g> <g id="chooser"> <path d="M 135.2346 6.1522 C 136.2551 5.7295 137.4251 6.2141 137.8478 7.2346 C 138.2704 8.2551 137.7859 9.425 136.7654 9.8478 C 135.7449 10.2705 134.5749 9.7859 134.1522 8.7654 C 133.7295 7.7449 134.2141 6.5749 135.2346 6.1522 ZM 133.2735 1.4176 L 136 4.0054 L 138.7265 1.4176 L 138.8246 5.1754 L 142.5824 5.2735 L 139.9946 8 L 142.5824 10.7265 L 138.8246 10.8246 L 138.7265 14.5824 L 136 11.9946 L 133.2735 14.5824 L 133.1754 10.8246 L 129.4176 10.7265 L 132.0054 8 L 129.4176 5.2735 L 133.1754 5.1754 L 133.2735 1.4176 Z" fill="url(#gradient21)"/> </g> </svg> \ No newline at end of file diff --git a/lib/mejs/flashmediaelement-cdn.swf b/lib/mejs/flashmediaelement-cdn.swf new file mode 100755 index 0000000000000000000000000000000000000000..9b222e9cf6799975243bf9621ebe76bdcecbf6b3 GIT binary patch literal 57058 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 literal 0 HcmV?d00001 diff --git a/lib/mejs/flashmediaelement.swf b/lib/mejs/flashmediaelement.swf new file mode 100755 index 0000000000000000000000000000000000000000..5998d67699f32fb155a763f7e92373f4c1879aff GIT binary patch literal 57052 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 Q_eW$`=Ys$8jY>Dw03Qt&z5oCK literal 0 HcmV?d00001 diff --git a/lib/mejs/loading.gif b/lib/mejs/loading.gif new file mode 100755 index 0000000000000000000000000000000000000000..612222be5e474c36c345042dd6f697fa1d16a6a0 GIT binary patch literal 6224 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 literal 0 HcmV?d00001 diff --git a/lib/mejs/mediaelement-and-player.js b/lib/mejs/mediaelement-and-player.js new file mode 100755 index 00000000..bbdd6766 --- /dev/null +++ b/lib/mejs/mediaelement-and-player.js @@ -0,0 +1,5291 @@ +/*! +* MediaElement.js +* HTML5 <video> and <audio> shim and player +* http://mediaelementjs.com/ +* +* Creates a JavaScript object that mimics HTML5 MediaElement API +* for browsers that don't understand HTML5 or can't play the provided codec +* Can play MP4 (H.264), Ogg, WebM, FLV, WMV, WMA, ACC, and MP3 +* +* Copyright 2010-2014, John Dyer (http://j.hn) +* License: MIT +* +*/ +// Namespace +var mejs = mejs || {}; + +// version number +mejs.version = '2.15.1'; + + +// player number (for missing, same id attr) +mejs.meIndex = 0; + +// media types accepted by plugins +mejs.plugins = { + silverlight: [ + {version: [3,0], types: ['video/mp4','video/m4v','video/mov','video/wmv','audio/wma','audio/m4a','audio/mp3','audio/wav','audio/mpeg']} + ], + flash: [ + {version: [9,0,124], types: ['video/mp4','video/m4v','video/mov','video/flv','video/rtmp','video/x-flv','audio/flv','audio/x-flv','audio/mp3','audio/m4a','audio/mpeg', 'video/youtube', 'video/x-youtube', 'application/x-mpegURL']} + //,{version: [12,0], types: ['video/webm']} // for future reference (hopefully!) + ], + youtube: [ + {version: null, types: ['video/youtube', 'video/x-youtube', 'audio/youtube', 'audio/x-youtube']} + ], + vimeo: [ + {version: null, types: ['video/vimeo', 'video/x-vimeo']} + ] +}; + +/* +Utility methods +*/ +mejs.Utility = { + encodeUrl: function(url) { + return encodeURIComponent(url); //.replace(/\?/gi,'%3F').replace(/=/gi,'%3D').replace(/&/gi,'%26'); + }, + escapeHTML: function(s) { + return s.toString().split('&').join('&').split('<').join('<').split('"').join('"'); + }, + absolutizeUrl: function(url) { + var el = document.createElement('div'); + el.innerHTML = '<a href="' + this.escapeHTML(url) + '">x</a>'; + return el.firstChild.href; + }, + getScriptPath: function(scriptNames) { + var + i = 0, + j, + codePath = '', + testname = '', + slashPos, + filenamePos, + scriptUrl, + scriptPath, + scriptFilename, + scripts = document.getElementsByTagName('script'), + il = scripts.length, + jl = scriptNames.length; + + // go through all <script> tags + for (; i < il; i++) { + scriptUrl = scripts[i].src; + slashPos = scriptUrl.lastIndexOf('/'); + if (slashPos > -1) { + scriptFilename = scriptUrl.substring(slashPos + 1); + scriptPath = scriptUrl.substring(0, slashPos + 1); + } else { + scriptFilename = scriptUrl; + scriptPath = ''; + } + + // see if any <script> tags have a file name that matches the + for (j = 0; j < jl; j++) { + testname = scriptNames[j]; + filenamePos = scriptFilename.indexOf(testname); + if (filenamePos > -1) { + codePath = scriptPath; + break; + } + } + + // if we found a path, then break and return it + if (codePath !== '') { + break; + } + } + + // send the best path back + return codePath; + }, + secondsToTimeCode: function(time, forceHours, showFrameCount, fps) { + //add framecount + if (typeof showFrameCount == 'undefined') { + showFrameCount=false; + } else if(typeof fps == 'undefined') { + fps = 25; + } + + var hours = Math.floor(time / 3600) % 24, + minutes = Math.floor(time / 60) % 60, + seconds = Math.floor(time % 60), + frames = Math.floor(((time % 1)*fps).toFixed(3)), + result = + ( (forceHours || hours > 0) ? (hours < 10 ? '0' + hours : hours) + ':' : '') + + (minutes < 10 ? '0' + minutes : minutes) + ':' + + (seconds < 10 ? '0' + seconds : seconds) + + ((showFrameCount) ? ':' + (frames < 10 ? '0' + frames : frames) : ''); + + return result; + }, + + timeCodeToSeconds: function(hh_mm_ss_ff, forceHours, showFrameCount, fps){ + if (typeof showFrameCount == 'undefined') { + showFrameCount=false; + } else if(typeof fps == 'undefined') { + fps = 25; + } + + var tc_array = hh_mm_ss_ff.split(":"), + tc_hh = parseInt(tc_array[0], 10), + tc_mm = parseInt(tc_array[1], 10), + tc_ss = parseInt(tc_array[2], 10), + tc_ff = 0, + tc_in_seconds = 0; + + if (showFrameCount) { + tc_ff = parseInt(tc_array[3])/fps; + } + + tc_in_seconds = ( tc_hh * 3600 ) + ( tc_mm * 60 ) + tc_ss + tc_ff; + + return tc_in_seconds; + }, + + + convertSMPTEtoSeconds: function (SMPTE) { + if (typeof SMPTE != 'string') + return false; + + SMPTE = SMPTE.replace(',', '.'); + + var secs = 0, + decimalLen = (SMPTE.indexOf('.') != -1) ? SMPTE.split('.')[1].length : 0, + multiplier = 1; + + SMPTE = SMPTE.split(':').reverse(); + + for (var i = 0; i < SMPTE.length; i++) { + multiplier = 1; + if (i > 0) { + multiplier = Math.pow(60, i); + } + secs += Number(SMPTE[i]) * multiplier; + } + return Number(secs.toFixed(decimalLen)); + }, + + /* borrowed from SWFObject: http://code.google.com/p/swfobject/source/browse/trunk/swfobject/src/swfobject.js#474 */ + removeSwf: function(id) { + var obj = document.getElementById(id); + if (obj && /object|embed/i.test(obj.nodeName)) { + if (mejs.MediaFeatures.isIE) { + obj.style.display = "none"; + (function(){ + if (obj.readyState == 4) { + mejs.Utility.removeObjectInIE(id); + } else { + setTimeout(arguments.callee, 10); + } + })(); + } else { + obj.parentNode.removeChild(obj); + } + } + }, + removeObjectInIE: function(id) { + var obj = document.getElementById(id); + if (obj) { + for (var i in obj) { + if (typeof obj[i] == "function") { + obj[i] = null; + } + } + obj.parentNode.removeChild(obj); + } + } +}; + + +// Core detector, plugins are added below +mejs.PluginDetector = { + + // main public function to test a plug version number PluginDetector.hasPluginVersion('flash',[9,0,125]); + hasPluginVersion: function(plugin, v) { + var pv = this.plugins[plugin]; + v[1] = v[1] || 0; + v[2] = v[2] || 0; + return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false; + }, + + // cached values + nav: window.navigator, + ua: window.navigator.userAgent.toLowerCase(), + + // stored version numbers + plugins: [], + + // runs detectPlugin() and stores the version number + addPlugin: function(p, pluginName, mimeType, activeX, axDetect) { + this.plugins[p] = this.detectPlugin(pluginName, mimeType, activeX, axDetect); + }, + + // get the version number from the mimetype (all but IE) or ActiveX (IE) + detectPlugin: function(pluginName, mimeType, activeX, axDetect) { + + var version = [0,0,0], + description, + i, + ax; + + // Firefox, Webkit, Opera + if (typeof(this.nav.plugins) != 'undefined' && typeof this.nav.plugins[pluginName] == 'object') { + description = this.nav.plugins[pluginName].description; + if (description && !(typeof this.nav.mimeTypes != 'undefined' && this.nav.mimeTypes[mimeType] && !this.nav.mimeTypes[mimeType].enabledPlugin)) { + version = description.replace(pluginName, '').replace(/^\s+/,'').replace(/\sr/gi,'.').split('.'); + for (i=0; i<version.length; i++) { + version[i] = parseInt(version[i].match(/\d+/), 10); + } + } + // Internet Explorer / ActiveX + } else if (typeof(window.ActiveXObject) != 'undefined') { + try { + ax = new ActiveXObject(activeX); + if (ax) { + version = axDetect(ax); + } + } + catch (e) { } + } + return version; + } +}; + +// Add Flash detection +mejs.PluginDetector.addPlugin('flash','Shockwave Flash','application/x-shockwave-flash','ShockwaveFlash.ShockwaveFlash', function(ax) { + // adapted from SWFObject + var version = [], + d = ax.GetVariable("$version"); + if (d) { + d = d.split(" ")[1].split(","); + version = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; + } + return version; +}); + +// Add Silverlight detection +mejs.PluginDetector.addPlugin('silverlight','Silverlight Plug-In','application/x-silverlight-2','AgControl.AgControl', function (ax) { + // Silverlight cannot report its version number to IE + // but it does have a isVersionSupported function, so we have to loop through it to get a version number. + // adapted from http://www.silverlightversion.com/ + var v = [0,0,0,0], + loopMatch = function(ax, v, i, n) { + while(ax.isVersionSupported(v[0]+ "."+ v[1] + "." + v[2] + "." + v[3])){ + v[i]+=n; + } + v[i] -= n; + }; + loopMatch(ax, v, 0, 1); + loopMatch(ax, v, 1, 1); + loopMatch(ax, v, 2, 10000); // the third place in the version number is usually 5 digits (4.0.xxxxx) + loopMatch(ax, v, 2, 1000); + loopMatch(ax, v, 2, 100); + loopMatch(ax, v, 2, 10); + loopMatch(ax, v, 2, 1); + loopMatch(ax, v, 3, 1); + + return v; +}); +// add adobe acrobat +/* +PluginDetector.addPlugin('acrobat','Adobe Acrobat','application/pdf','AcroPDF.PDF', function (ax) { + var version = [], + d = ax.GetVersions().split(',')[0].split('=')[1].split('.'); + + if (d) { + version = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; + } + return version; +}); +*/ +// necessary detection (fixes for <IE9) +mejs.MediaFeatures = { + init: function() { + var + t = this, + d = document, + nav = mejs.PluginDetector.nav, + ua = mejs.PluginDetector.ua.toLowerCase(), + i, + v, + html5Elements = ['source','track','audio','video']; + + // detect browsers (only the ones that have some kind of quirk we need to work around) + t.isiPad = (ua.match(/ipad/i) !== null); + t.isiPhone = (ua.match(/iphone/i) !== null); + t.isiOS = t.isiPhone || t.isiPad; + t.isAndroid = (ua.match(/android/i) !== null); + t.isBustedAndroid = (ua.match(/android 2\.[12]/) !== null); + t.isBustedNativeHTTPS = (location.protocol === 'https:' && (ua.match(/android [12]\./) !== null || ua.match(/macintosh.* version.* safari/) !== null)); + t.isIE = (nav.appName.toLowerCase().indexOf("microsoft") != -1 || nav.appName.toLowerCase().match(/trident/gi) !== null); + t.isChrome = (ua.match(/chrome/gi) !== null); + t.isChromium = (ua.match(/chromium/gi) !== null); + t.isFirefox = (ua.match(/firefox/gi) !== null); + t.isWebkit = (ua.match(/webkit/gi) !== null); + t.isGecko = (ua.match(/gecko/gi) !== null) && !t.isWebkit && !t.isIE; + t.isOpera = (ua.match(/opera/gi) !== null); + t.hasTouch = ('ontouchstart' in window); // && window.ontouchstart != null); // this breaks iOS 7 + + // borrowed from Modernizr + t.svg = !! document.createElementNS && + !! document.createElementNS('http://www.w3.org/2000/svg','svg').createSVGRect; + + // create HTML5 media elements for IE before 9, get a <video> element for fullscreen detection + for (i=0; i<html5Elements.length; i++) { + v = document.createElement(html5Elements[i]); + } + + t.supportsMediaTag = (typeof v.canPlayType !== 'undefined' || t.isBustedAndroid); + + // Fix for IE9 on Windows 7N / Windows 7KN (Media Player not installer) + try{ + v.canPlayType("video/mp4"); + }catch(e){ + t.supportsMediaTag = false; + } + + // detect native JavaScript fullscreen (Safari/Firefox only, Chrome still fails) + + // iOS + t.hasSemiNativeFullScreen = (typeof v.webkitEnterFullscreen !== 'undefined'); + + // W3C + t.hasNativeFullscreen = (typeof v.requestFullscreen !== 'undefined'); + + // webkit/firefox/IE11+ + t.hasWebkitNativeFullScreen = (typeof v.webkitRequestFullScreen !== 'undefined'); + t.hasMozNativeFullScreen = (typeof v.mozRequestFullScreen !== 'undefined'); + t.hasMsNativeFullScreen = (typeof v.msRequestFullscreen !== 'undefined'); + + t.hasTrueNativeFullScreen = (t.hasWebkitNativeFullScreen || t.hasMozNativeFullScreen || t.hasMsNativeFullScreen); + t.nativeFullScreenEnabled = t.hasTrueNativeFullScreen; + + // Enabled? + if (t.hasMozNativeFullScreen) { + t.nativeFullScreenEnabled = document.mozFullScreenEnabled; + } else if (t.hasMsNativeFullScreen) { + t.nativeFullScreenEnabled = document.msFullscreenEnabled; + } + + if (t.isChrome) { + t.hasSemiNativeFullScreen = false; + } + + if (t.hasTrueNativeFullScreen) { + + t.fullScreenEventName = ''; + if (t.hasWebkitNativeFullScreen) { + t.fullScreenEventName = 'webkitfullscreenchange'; + + } else if (t.hasMozNativeFullScreen) { + t.fullScreenEventName = 'mozfullscreenchange'; + + } else if (t.hasMsNativeFullScreen) { + t.fullScreenEventName = 'MSFullscreenChange'; + } + + t.isFullScreen = function() { + if (t.hasMozNativeFullScreen) { + return d.mozFullScreen; + + } else if (t.hasWebkitNativeFullScreen) { + return d.webkitIsFullScreen; + + } else if (t.hasMsNativeFullScreen) { + return d.msFullscreenElement !== null; + } + } + + t.requestFullScreen = function(el) { + + if (t.hasWebkitNativeFullScreen) { + el.webkitRequestFullScreen(); + + } else if (t.hasMozNativeFullScreen) { + el.mozRequestFullScreen(); + + } else if (t.hasMsNativeFullScreen) { + el.msRequestFullscreen(); + + } + } + + t.cancelFullScreen = function() { + if (t.hasWebkitNativeFullScreen) { + document.webkitCancelFullScreen(); + + } else if (t.hasMozNativeFullScreen) { + document.mozCancelFullScreen(); + + } else if (t.hasMsNativeFullScreen) { + document.msExitFullscreen(); + + } + } + + } + + + // OS X 10.5 can't do this even if it says it can :( + if (t.hasSemiNativeFullScreen && ua.match(/mac os x 10_5/i)) { + t.hasNativeFullScreen = false; + t.hasSemiNativeFullScreen = false; + } + + } +}; +mejs.MediaFeatures.init(); + +/* +extension methods to <video> or <audio> object to bring it into parity with PluginMediaElement (see below) +*/ +mejs.HtmlMediaElement = { + pluginType: 'native', + isFullScreen: false, + + setCurrentTime: function (time) { + this.currentTime = time; + }, + + setMuted: function (muted) { + this.muted = muted; + }, + + setVolume: function (volume) { + this.volume = volume; + }, + + // for parity with the plugin versions + stop: function () { + this.pause(); + }, + + // This can be a url string + // or an array [{src:'file.mp4',type:'video/mp4'},{src:'file.webm',type:'video/webm'}] + setSrc: function (url) { + + // Fix for IE9 which can't set .src when there are <source> elements. Awesome, right? + var + existingSources = this.getElementsByTagName('source'); + while (existingSources.length > 0){ + this.removeChild(existingSources[0]); + } + + if (typeof url == 'string') { + this.src = url; + } else { + var i, media; + + for (i=0; i<url.length; i++) { + media = url[i]; + if (this.canPlayType(media.type)) { + this.src = media.src; + break; + } + } + } + }, + + setVideoSize: function (width, height) { + this.width = width; + this.height = height; + } +}; + +/* +Mimics the <video/audio> element by calling Flash's External Interface or Silverlights [ScriptableMember] +*/ +mejs.PluginMediaElement = function (pluginid, pluginType, mediaUrl) { + this.id = pluginid; + this.pluginType = pluginType; + this.src = mediaUrl; + this.events = {}; + this.attributes = {}; +}; + +// JavaScript values and ExternalInterface methods that match HTML5 video properties methods +// http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/fl/video/FLVPlayback.html +// http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html +mejs.PluginMediaElement.prototype = { + + // special + pluginElement: null, + pluginType: '', + isFullScreen: false, + + // not implemented :( + playbackRate: -1, + defaultPlaybackRate: -1, + seekable: [], + played: [], + + // HTML5 read-only properties + paused: true, + ended: false, + seeking: false, + duration: 0, + error: null, + tagName: '', + + // HTML5 get/set properties, but only set (updated by event handlers) + muted: false, + volume: 1, + currentTime: 0, + + // HTML5 methods + play: function () { + if (this.pluginApi != null) { + if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') { + this.pluginApi.playVideo(); + } else { + this.pluginApi.playMedia(); + } + this.paused = false; + } + }, + load: function () { + if (this.pluginApi != null) { + if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') { + } else { + this.pluginApi.loadMedia(); + } + + this.paused = false; + } + }, + pause: function () { + if (this.pluginApi != null) { + if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') { + this.pluginApi.pauseVideo(); + } else { + this.pluginApi.pauseMedia(); + } + + + this.paused = true; + } + }, + stop: function () { + if (this.pluginApi != null) { + if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') { + this.pluginApi.stopVideo(); + } else { + this.pluginApi.stopMedia(); + } + this.paused = true; + } + }, + canPlayType: function(type) { + var i, + j, + pluginInfo, + pluginVersions = mejs.plugins[this.pluginType]; + + for (i=0; i<pluginVersions.length; i++) { + pluginInfo = pluginVersions[i]; + + // test if user has the correct plugin version + if (mejs.PluginDetector.hasPluginVersion(this.pluginType, pluginInfo.version)) { + + // test for plugin playback types + for (j=0; j<pluginInfo.types.length; j++) { + // find plugin that can play the type + if (type == pluginInfo.types[j]) { + return 'probably'; + } + } + } + } + + return ''; + }, + + positionFullscreenButton: function(x,y,visibleAndAbove) { + if (this.pluginApi != null && this.pluginApi.positionFullscreenButton) { + this.pluginApi.positionFullscreenButton(Math.floor(x),Math.floor(y),visibleAndAbove); + } + }, + + hideFullscreenButton: function() { + if (this.pluginApi != null && this.pluginApi.hideFullscreenButton) { + this.pluginApi.hideFullscreenButton(); + } + }, + + + // custom methods since not all JavaScript implementations support get/set + + // This can be a url string + // or an array [{src:'file.mp4',type:'video/mp4'},{src:'file.webm',type:'video/webm'}] + setSrc: function (url) { + if (typeof url == 'string') { + this.pluginApi.setSrc(mejs.Utility.absolutizeUrl(url)); + this.src = mejs.Utility.absolutizeUrl(url); + } else { + var i, media; + + for (i=0; i<url.length; i++) { + media = url[i]; + if (this.canPlayType(media.type)) { + this.pluginApi.setSrc(mejs.Utility.absolutizeUrl(media.src)); + this.src = mejs.Utility.absolutizeUrl(url); + break; + } + } + } + + }, + setCurrentTime: function (time) { + if (this.pluginApi != null) { + if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') { + this.pluginApi.seekTo(time); + } else { + this.pluginApi.setCurrentTime(time); + } + + + + this.currentTime = time; + } + }, + setVolume: function (volume) { + if (this.pluginApi != null) { + // same on YouTube and MEjs + if (this.pluginType == 'youtube') { + this.pluginApi.setVolume(volume * 100); + } else { + this.pluginApi.setVolume(volume); + } + this.volume = volume; + } + }, + setMuted: function (muted) { + if (this.pluginApi != null) { + if (this.pluginType == 'youtube') { + if (muted) { + this.pluginApi.mute(); + } else { + this.pluginApi.unMute(); + } + this.muted = muted; + this.dispatchEvent('volumechange'); + } else { + this.pluginApi.setMuted(muted); + } + this.muted = muted; + } + }, + + // additional non-HTML5 methods + setVideoSize: function (width, height) { + + //if (this.pluginType == 'flash' || this.pluginType == 'silverlight') { + if (this.pluginElement && this.pluginElement.style) { + this.pluginElement.style.width = width + 'px'; + this.pluginElement.style.height = height + 'px'; + } + if (this.pluginApi != null && this.pluginApi.setVideoSize) { + this.pluginApi.setVideoSize(width, height); + } + //} + }, + + setFullscreen: function (fullscreen) { + if (this.pluginApi != null && this.pluginApi.setFullscreen) { + this.pluginApi.setFullscreen(fullscreen); + } + }, + + enterFullScreen: function() { + if (this.pluginApi != null && this.pluginApi.setFullscreen) { + this.setFullscreen(true); + } + + }, + + exitFullScreen: function() { + if (this.pluginApi != null && this.pluginApi.setFullscreen) { + this.setFullscreen(false); + } + }, + + // start: fake events + addEventListener: function (eventName, callback, bubble) { + this.events[eventName] = this.events[eventName] || []; + this.events[eventName].push(callback); + }, + removeEventListener: function (eventName, callback) { + if (!eventName) { this.events = {}; return true; } + var callbacks = this.events[eventName]; + if (!callbacks) return true; + if (!callback) { this.events[eventName] = []; return true; } + for (var i = 0; i < callbacks.length; i++) { + if (callbacks[i] === callback) { + this.events[eventName].splice(i, 1); + return true; + } + } + return false; + }, + dispatchEvent: function (eventName) { + var i, + args, + callbacks = this.events[eventName]; + + if (callbacks) { + args = Array.prototype.slice.call(arguments, 1); + for (i = 0; i < callbacks.length; i++) { + callbacks[i].apply(null, args); + } + } + }, + // end: fake events + + // fake DOM attribute methods + hasAttribute: function(name){ + return (name in this.attributes); + }, + removeAttribute: function(name){ + delete this.attributes[name]; + }, + getAttribute: function(name){ + if (this.hasAttribute(name)) { + return this.attributes[name]; + } + return ''; + }, + setAttribute: function(name, value){ + this.attributes[name] = value; + }, + + remove: function() { + mejs.Utility.removeSwf(this.pluginElement.id); + mejs.MediaPluginBridge.unregisterPluginElement(this.pluginElement.id); + } +}; + +// Handles calls from Flash/Silverlight and reports them as native <video/audio> events and properties +mejs.MediaPluginBridge = { + + pluginMediaElements:{}, + htmlMediaElements:{}, + + registerPluginElement: function (id, pluginMediaElement, htmlMediaElement) { + this.pluginMediaElements[id] = pluginMediaElement; + this.htmlMediaElements[id] = htmlMediaElement; + }, + + unregisterPluginElement: function (id) { + delete this.pluginMediaElements[id]; + delete this.htmlMediaElements[id]; + }, + + // when Flash/Silverlight is ready, it calls out to this method + initPlugin: function (id) { + + var pluginMediaElement = this.pluginMediaElements[id], + htmlMediaElement = this.htmlMediaElements[id]; + + if (pluginMediaElement) { + // find the javascript bridge + switch (pluginMediaElement.pluginType) { + case "flash": + pluginMediaElement.pluginElement = pluginMediaElement.pluginApi = document.getElementById(id); + break; + case "silverlight": + pluginMediaElement.pluginElement = document.getElementById(pluginMediaElement.id); + pluginMediaElement.pluginApi = pluginMediaElement.pluginElement.Content.MediaElementJS; + break; + } + + if (pluginMediaElement.pluginApi != null && pluginMediaElement.success) { + pluginMediaElement.success(pluginMediaElement, htmlMediaElement); + } + } + }, + + // receives events from Flash/Silverlight and sends them out as HTML5 media events + // http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html + fireEvent: function (id, eventName, values) { + + var + e, + i, + bufferedTime, + pluginMediaElement = this.pluginMediaElements[id]; + + if(!pluginMediaElement){ + return; + } + + // fake event object to mimic real HTML media event. + e = { + type: eventName, + target: pluginMediaElement + }; + + // attach all values to element and event object + for (i in values) { + pluginMediaElement[i] = values[i]; + e[i] = values[i]; + } + + // fake the newer W3C buffered TimeRange (loaded and total have been removed) + bufferedTime = values.bufferedTime || 0; + + e.target.buffered = e.buffered = { + start: function(index) { + return 0; + }, + end: function (index) { + return bufferedTime; + }, + length: 1 + }; + + pluginMediaElement.dispatchEvent(e.type, e); + } +}; + +/* +Default options +*/ +mejs.MediaElementDefaults = { + // allows testing on HTML5, flash, silverlight + // auto: attempts to detect what the browser can do + // auto_plugin: prefer plugins and then attempt native HTML5 + // native: forces HTML5 playback + // shim: disallows HTML5, will attempt either Flash or Silverlight + // none: forces fallback view + mode: 'auto', + // remove or reorder to change plugin priority and availability + plugins: ['flash','silverlight','youtube','vimeo'], + // shows debug errors on screen + enablePluginDebug: false, + // use plugin for browsers that have trouble with Basic Authentication on HTTPS sites + httpsBasicAuthSite: false, + // overrides the type specified, useful for dynamic instantiation + type: '', + // path to Flash and Silverlight plugins + pluginPath: mejs.Utility.getScriptPath(['mediaelement.js','mediaelement.min.js','mediaelement-and-player.js','mediaelement-and-player.min.js']), + // name of flash file + flashName: 'flashmediaelement.swf', + // streamer for RTMP streaming + flashStreamer: '', + // turns on the smoothing filter in Flash + enablePluginSmoothing: false, + // enabled pseudo-streaming (seek) on .mp4 files + enablePseudoStreaming: false, + // start query parameter sent to server for pseudo-streaming + pseudoStreamingStartQueryParam: 'start', + // name of silverlight file + silverlightName: 'silverlightmediaelement.xap', + // default if the <video width> is not specified + defaultVideoWidth: 480, + // default if the <video height> is not specified + defaultVideoHeight: 270, + // overrides <video width> + pluginWidth: -1, + // overrides <video height> + pluginHeight: -1, + // additional plugin variables in 'key=value' form + pluginVars: [], + // rate in milliseconds for Flash and Silverlight to fire the timeupdate event + // larger number is less accurate, but less strain on plugin->JavaScript bridge + timerRate: 250, + // initial volume for player + startVolume: 0.8, + success: function () { }, + error: function () { } +}; + +/* +Determines if a browser supports the <video> or <audio> element +and returns either the native element or a Flash/Silverlight version that +mimics HTML5 MediaElement +*/ +mejs.MediaElement = function (el, o) { + return mejs.HtmlMediaElementShim.create(el,o); +}; + +mejs.HtmlMediaElementShim = { + + create: function(el, o) { + var + options = mejs.MediaElementDefaults, + htmlMediaElement = (typeof(el) == 'string') ? document.getElementById(el) : el, + tagName = htmlMediaElement.tagName.toLowerCase(), + isMediaTag = (tagName === 'audio' || tagName === 'video'), + src = (isMediaTag) ? htmlMediaElement.getAttribute('src') : htmlMediaElement.getAttribute('href'), + poster = htmlMediaElement.getAttribute('poster'), + autoplay = htmlMediaElement.getAttribute('autoplay'), + preload = htmlMediaElement.getAttribute('preload'), + controls = htmlMediaElement.getAttribute('controls'), + playback, + prop; + + // extend options + for (prop in o) { + options[prop] = o[prop]; + } + + // clean up attributes + src = (typeof src == 'undefined' || src === null || src == '') ? null : src; + poster = (typeof poster == 'undefined' || poster === null) ? '' : poster; + preload = (typeof preload == 'undefined' || preload === null || preload === 'false') ? 'none' : preload; + autoplay = !(typeof autoplay == 'undefined' || autoplay === null || autoplay === 'false'); + controls = !(typeof controls == 'undefined' || controls === null || controls === 'false'); + + // test for HTML5 and plugin capabilities + playback = this.determinePlayback(htmlMediaElement, options, mejs.MediaFeatures.supportsMediaTag, isMediaTag, src); + playback.url = (playback.url !== null) ? mejs.Utility.absolutizeUrl(playback.url) : ''; + + if (playback.method == 'native') { + // second fix for android + if (mejs.MediaFeatures.isBustedAndroid) { + htmlMediaElement.src = playback.url; + htmlMediaElement.addEventListener('click', function() { + htmlMediaElement.play(); + }, false); + } + + // add methods to native HTMLMediaElement + return this.updateNative(playback, options, autoplay, preload); + } else if (playback.method !== '') { + // create plugin to mimic HTMLMediaElement + + return this.createPlugin( playback, options, poster, autoplay, preload, controls); + } else { + // boo, no HTML5, no Flash, no Silverlight. + this.createErrorMessage( playback, options, poster ); + + return this; + } + }, + + determinePlayback: function(htmlMediaElement, options, supportsMediaTag, isMediaTag, src) { + var + mediaFiles = [], + i, + j, + k, + l, + n, + type, + result = { method: '', url: '', htmlMediaElement: htmlMediaElement, isVideo: (htmlMediaElement.tagName.toLowerCase() != 'audio')}, + pluginName, + pluginVersions, + pluginInfo, + dummy, + media; + + // STEP 1: Get URL and type from <video src> or <source src> + + // supplied type overrides <video type> and <source type> + if (typeof options.type != 'undefined' && options.type !== '') { + + // accept either string or array of types + if (typeof options.type == 'string') { + mediaFiles.push({type:options.type, url:src}); + } else { + + for (i=0; i<options.type.length; i++) { + mediaFiles.push({type:options.type[i], url:src}); + } + } + + // test for src attribute first + } else if (src !== null) { + type = this.formatType(src, htmlMediaElement.getAttribute('type')); + mediaFiles.push({type:type, url:src}); + + // then test for <source> elements + } else { + // test <source> types to see if they are usable + for (i = 0; i < htmlMediaElement.childNodes.length; i++) { + n = htmlMediaElement.childNodes[i]; + if (n.nodeType == 1 && n.tagName.toLowerCase() == 'source') { + src = n.getAttribute('src'); + type = this.formatType(src, n.getAttribute('type')); + media = n.getAttribute('media'); + + if (!media || !window.matchMedia || (window.matchMedia && window.matchMedia(media).matches)) { + mediaFiles.push({type:type, url:src}); + } + } + } + } + + // in the case of dynamicly created players + // check for audio types + if (!isMediaTag && mediaFiles.length > 0 && mediaFiles[0].url !== null && this.getTypeFromFile(mediaFiles[0].url).indexOf('audio') > -1) { + result.isVideo = false; + } + + + // STEP 2: Test for playback method + + // special case for Android which sadly doesn't implement the canPlayType function (always returns '') + if (mejs.MediaFeatures.isBustedAndroid) { + htmlMediaElement.canPlayType = function(type) { + return (type.match(/video\/(mp4|m4v)/gi) !== null) ? 'maybe' : ''; + }; + } + + // special case for Chromium to specify natively supported video codecs (i.e. WebM and Theora) + if (mejs.MediaFeatures.isChromium) { + htmlMediaElement.canPlayType = function(type) { + return (type.match(/video\/(webm|ogv|ogg)/gi) !== null) ? 'maybe' : ''; + }; + } + + // test for native playback first + if (supportsMediaTag && (options.mode === 'auto' || options.mode === 'auto_plugin' || options.mode === 'native') && !(mejs.MediaFeatures.isBustedNativeHTTPS && options.httpsBasicAuthSite === true)) { + + if (!isMediaTag) { + + // create a real HTML5 Media Element + dummy = document.createElement( result.isVideo ? 'video' : 'audio'); + htmlMediaElement.parentNode.insertBefore(dummy, htmlMediaElement); + htmlMediaElement.style.display = 'none'; + + // use this one from now on + result.htmlMediaElement = htmlMediaElement = dummy; + } + + for (i=0; i<mediaFiles.length; i++) { + // normal check + if (mediaFiles[i].type == "video/m3u8" || htmlMediaElement.canPlayType(mediaFiles[i].type).replace(/no/, '') !== '' + // special case for Mac/Safari 5.0.3 which answers '' to canPlayType('audio/mp3') but 'maybe' to canPlayType('audio/mpeg') + || htmlMediaElement.canPlayType(mediaFiles[i].type.replace(/mp3/,'mpeg')).replace(/no/, '') !== '' + // special case for m4a supported by detecting mp4 support + || htmlMediaElement.canPlayType(mediaFiles[i].type.replace(/m4a/,'mp4')).replace(/no/, '') !== '') { + result.method = 'native'; + result.url = mediaFiles[i].url; + break; + } + } + + if (result.method === 'native') { + if (result.url !== null) { + htmlMediaElement.src = result.url; + } + + // if `auto_plugin` mode, then cache the native result but try plugins. + if (options.mode !== 'auto_plugin') { + return result; + } + } + } + + // if native playback didn't work, then test plugins + if (options.mode === 'auto' || options.mode === 'auto_plugin' || options.mode === 'shim') { + for (i=0; i<mediaFiles.length; i++) { + type = mediaFiles[i].type; + + // test all plugins in order of preference [silverlight, flash] + for (j=0; j<options.plugins.length; j++) { + + pluginName = options.plugins[j]; + + // test version of plugin (for future features) + pluginVersions = mejs.plugins[pluginName]; + + for (k=0; k<pluginVersions.length; k++) { + pluginInfo = pluginVersions[k]; + + // test if user has the correct plugin version + + // for youtube/vimeo + if (pluginInfo.version == null || + + mejs.PluginDetector.hasPluginVersion(pluginName, pluginInfo.version)) { + + // test for plugin playback types + for (l=0; l<pluginInfo.types.length; l++) { + // find plugin that can play the type + if (type == pluginInfo.types[l]) { + result.method = pluginName; + result.url = mediaFiles[i].url; + return result; + } + } + } + } + } + } + } + + // at this point, being in 'auto_plugin' mode implies that we tried plugins but failed. + // if we have native support then return that. + if (options.mode === 'auto_plugin' && result.method === 'native') { + return result; + } + + // what if there's nothing to play? just grab the first available + if (result.method === '' && mediaFiles.length > 0) { + result.url = mediaFiles[0].url; + } + + return result; + }, + + formatType: function(url, type) { + var ext; + + // if no type is supplied, fake it with the extension + if (url && !type) { + return this.getTypeFromFile(url); + } else { + // only return the mime part of the type in case the attribute contains the codec + // see http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#the-source-element + // `video/mp4; codecs="avc1.42E01E, mp4a.40.2"` becomes `video/mp4` + + if (type && ~type.indexOf(';')) { + return type.substr(0, type.indexOf(';')); + } else { + return type; + } + } + }, + + getTypeFromFile: function(url) { + url = url.split('?')[0]; + var ext = url.substring(url.lastIndexOf('.') + 1).toLowerCase(); + return (/(mp4|m4v|ogg|ogv|m3u8|webm|webmv|flv|wmv|mpeg|mov)/gi.test(ext) ? 'video' : 'audio') + '/' + this.getTypeFromExtension(ext); + }, + + getTypeFromExtension: function(ext) { + + switch (ext) { + case 'mp4': + case 'm4v': + case 'm4a': + return 'mp4'; + case 'webm': + case 'webma': + case 'webmv': + return 'webm'; + case 'ogg': + case 'oga': + case 'ogv': + return 'ogg'; + default: + return ext; + } + }, + + createErrorMessage: function(playback, options, poster) { + var + htmlMediaElement = playback.htmlMediaElement, + errorContainer = document.createElement('div'); + + errorContainer.className = 'me-cannotplay'; + + try { + errorContainer.style.width = htmlMediaElement.width + 'px'; + errorContainer.style.height = htmlMediaElement.height + 'px'; + } catch (e) {} + + if (options.customError) { + errorContainer.innerHTML = options.customError; + } else { + errorContainer.innerHTML = (poster !== '') ? + '<a href="' + playback.url + '"><img src="' + poster + '" width="100%" height="100%" /></a>' : + '<a href="' + playback.url + '"><span>' + mejs.i18n.t('Download File') + '</span></a>'; + } + + htmlMediaElement.parentNode.insertBefore(errorContainer, htmlMediaElement); + htmlMediaElement.style.display = 'none'; + + options.error(htmlMediaElement); + }, + + createPlugin:function(playback, options, poster, autoplay, preload, controls) { + var + htmlMediaElement = playback.htmlMediaElement, + width = 1, + height = 1, + pluginid = 'me_' + playback.method + '_' + (mejs.meIndex++), + pluginMediaElement = new mejs.PluginMediaElement(pluginid, playback.method, playback.url), + container = document.createElement('div'), + specialIEContainer, + node, + initVars; + + // copy tagName from html media element + pluginMediaElement.tagName = htmlMediaElement.tagName + + // copy attributes from html media element to plugin media element + for (var i = 0; i < htmlMediaElement.attributes.length; i++) { + var attribute = htmlMediaElement.attributes[i]; + if (attribute.specified == true) { + pluginMediaElement.setAttribute(attribute.name, attribute.value); + } + } + + // check for placement inside a <p> tag (sometimes WYSIWYG editors do this) + node = htmlMediaElement.parentNode; + while (node !== null && node.tagName.toLowerCase() !== 'body' && node.parentNode != null) { + if (node.parentNode.tagName.toLowerCase() === 'p') { + node.parentNode.parentNode.insertBefore(node, node.parentNode); + break; + } + node = node.parentNode; + } + + if (playback.isVideo) { + width = (options.pluginWidth > 0) ? options.pluginWidth : (options.videoWidth > 0) ? options.videoWidth : (htmlMediaElement.getAttribute('width') !== null) ? htmlMediaElement.getAttribute('width') : options.defaultVideoWidth; + height = (options.pluginHeight > 0) ? options.pluginHeight : (options.videoHeight > 0) ? options.videoHeight : (htmlMediaElement.getAttribute('height') !== null) ? htmlMediaElement.getAttribute('height') : options.defaultVideoHeight; + + // in case of '%' make sure it's encoded + width = mejs.Utility.encodeUrl(width); + height = mejs.Utility.encodeUrl(height); + + } else { + if (options.enablePluginDebug) { + width = 320; + height = 240; + } + } + + // register plugin + pluginMediaElement.success = options.success; + mejs.MediaPluginBridge.registerPluginElement(pluginid, pluginMediaElement, htmlMediaElement); + + // add container (must be added to DOM before inserting HTML for IE) + container.className = 'me-plugin'; + container.id = pluginid + '_container'; + + if (playback.isVideo) { + htmlMediaElement.parentNode.insertBefore(container, htmlMediaElement); + } else { + document.body.insertBefore(container, document.body.childNodes[0]); + } + + // flash/silverlight vars + initVars = [ + 'id=' + pluginid, + 'isvideo=' + ((playback.isVideo) ? "true" : "false"), + 'autoplay=' + ((autoplay) ? "true" : "false"), + 'preload=' + preload, + 'width=' + width, + 'startvolume=' + options.startVolume, + 'timerrate=' + options.timerRate, + 'flashstreamer=' + options.flashStreamer, + 'height=' + height, + 'pseudostreamstart=' + options.pseudoStreamingStartQueryParam]; + + if (playback.url !== null) { + if (playback.method == 'flash') { + initVars.push('file=' + mejs.Utility.encodeUrl(playback.url)); + } else { + initVars.push('file=' + playback.url); + } + } + if (options.enablePluginDebug) { + initVars.push('debug=true'); + } + if (options.enablePluginSmoothing) { + initVars.push('smoothing=true'); + } + if (options.enablePseudoStreaming) { + initVars.push('pseudostreaming=true'); + } + if (controls) { + initVars.push('controls=true'); // shows controls in the plugin if desired + } + if (options.pluginVars) { + initVars = initVars.concat(options.pluginVars); + } + + switch (playback.method) { + case 'silverlight': + container.innerHTML = +'<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" id="' + pluginid + '" name="' + pluginid + '" width="' + width + '" height="' + height + '" class="mejs-shim">' + +'<param name="initParams" value="' + initVars.join(',') + '" />' + +'<param name="windowless" value="true" />' + +'<param name="background" value="black" />' + +'<param name="minRuntimeVersion" value="3.0.0.0" />' + +'<param name="autoUpgrade" value="true" />' + +'<param name="source" value="' + options.pluginPath + options.silverlightName + '" />' + +'</object>'; + break; + + case 'flash': + + if (mejs.MediaFeatures.isIE) { + specialIEContainer = document.createElement('div'); + container.appendChild(specialIEContainer); + specialIEContainer.outerHTML = +'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" ' + +'id="' + pluginid + '" width="' + width + '" height="' + height + '" class="mejs-shim">' + +'<param name="movie" value="' + options.pluginPath + options.flashName + '?x=' + (new Date()) + '" />' + +'<param name="flashvars" value="' + initVars.join('&') + '" />' + +'<param name="quality" value="high" />' + +'<param name="bgcolor" value="#000000" />' + +'<param name="wmode" value="transparent" />' + +'<param name="allowScriptAccess" value="always" />' + +'<param name="allowFullScreen" value="true" />' + +'<param name="scale" value="default" />' + +'</object>'; + + } else { + + container.innerHTML = +'<embed id="' + pluginid + '" name="' + pluginid + '" ' + +'play="true" ' + +'loop="false" ' + +'quality="high" ' + +'bgcolor="#000000" ' + +'wmode="transparent" ' + +'allowScriptAccess="always" ' + +'allowFullScreen="true" ' + +'type="application/x-shockwave-flash" pluginspage="//www.macromedia.com/go/getflashplayer" ' + +'src="' + options.pluginPath + options.flashName + '" ' + +'flashvars="' + initVars.join('&') + '" ' + +'width="' + width + '" ' + +'height="' + height + '" ' + +'scale="default"' + +'class="mejs-shim"></embed>'; + } + break; + + case 'youtube': + + + var videoId; + // youtu.be url from share button + if (playback.url.lastIndexOf("youtu.be") != -1) { + videoId = playback.url.substr(playback.url.lastIndexOf('/')+1); + if (videoId.indexOf('?') != -1) { + videoId = videoId.substr(0, videoId.indexOf('?')); + } + } + else { + videoId = playback.url.substr(playback.url.lastIndexOf('=')+1); + } + youtubeSettings = { + container: container, + containerId: container.id, + pluginMediaElement: pluginMediaElement, + pluginId: pluginid, + videoId: videoId, + height: height, + width: width + }; + + if (mejs.PluginDetector.hasPluginVersion('flash', [10,0,0]) ) { + mejs.YouTubeApi.createFlash(youtubeSettings); + } else { + mejs.YouTubeApi.enqueueIframe(youtubeSettings); + } + + break; + + // DEMO Code. Does NOT work. + case 'vimeo': + var player_id = pluginid + "_player"; + pluginMediaElement.vimeoid = playback.url.substr(playback.url.lastIndexOf('/')+1); + + container.innerHTML ='<iframe src="//player.vimeo.com/video/' + pluginMediaElement.vimeoid + '?api=1&portrait=0&byline=0&title=0&player_id=' + player_id + '" width="' + width +'" height="' + height +'" frameborder="0" class="mejs-shim" id="' + player_id + '"></iframe>'; + if (typeof($f) == 'function') { // froogaloop available + var player = $f(container.childNodes[0]); + player.addEvent('ready', function() { + $.extend( player, { + playVideo: function() { + player.api( 'play' ); + }, + stopVideo: function() { + player.api( 'unload' ); + }, + pauseVideo: function() { + player.api( 'pause' ); + }, + seekTo: function( seconds ) { + player.api( 'seekTo', seconds ); + }, + setVolume: function( volume ) { + player.api( 'setVolume', volume ); + }, + setMuted: function( muted ) { + if( muted ) { + player.lastVolume = player.api( 'getVolume' ); + player.api( 'setVolume', 0 ); + } else { + player.api( 'setVolume', player.lastVolume ); + delete player.lastVolume; + } + } + }); + + function createEvent(player, pluginMediaElement, eventName, e) { + var obj = { + type: eventName, + target: pluginMediaElement + }; + if (eventName == 'timeupdate') { + pluginMediaElement.currentTime = obj.currentTime = e.seconds; + pluginMediaElement.duration = obj.duration = e.duration; + } + pluginMediaElement.dispatchEvent(obj.type, obj); + } + + player.addEvent('play', function() { + createEvent(player, pluginMediaElement, 'play'); + createEvent(player, pluginMediaElement, 'playing'); + }); + + player.addEvent('pause', function() { + createEvent(player, pluginMediaElement, 'pause'); + }); + + player.addEvent('finish', function() { + createEvent(player, pluginMediaElement, 'ended'); + }); + + player.addEvent('playProgress', function(e) { + createEvent(player, pluginMediaElement, 'timeupdate', e); + }); + + pluginMediaElement.pluginElement = container; + pluginMediaElement.pluginApi = player; + + // init mejs + mejs.MediaPluginBridge.initPlugin(pluginid); + }); + } + else { + console.warn("You need to include froogaloop for vimeo to work"); + } + break; + } + // hide original element + htmlMediaElement.style.display = 'none'; + // prevent browser from autoplaying when using a plugin + htmlMediaElement.removeAttribute('autoplay'); + + // FYI: options.success will be fired by the MediaPluginBridge + + return pluginMediaElement; + }, + + updateNative: function(playback, options, autoplay, preload) { + + var htmlMediaElement = playback.htmlMediaElement, + m; + + + // add methods to video object to bring it into parity with Flash Object + for (m in mejs.HtmlMediaElement) { + htmlMediaElement[m] = mejs.HtmlMediaElement[m]; + } + + /* + Chrome now supports preload="none" + if (mejs.MediaFeatures.isChrome) { + + // special case to enforce preload attribute (Chrome doesn't respect this) + if (preload === 'none' && !autoplay) { + + // forces the browser to stop loading (note: fails in IE9) + htmlMediaElement.src = ''; + htmlMediaElement.load(); + htmlMediaElement.canceledPreload = true; + + htmlMediaElement.addEventListener('play',function() { + if (htmlMediaElement.canceledPreload) { + htmlMediaElement.src = playback.url; + htmlMediaElement.load(); + htmlMediaElement.play(); + htmlMediaElement.canceledPreload = false; + } + }, false); + // for some reason Chrome forgets how to autoplay sometimes. + } else if (autoplay) { + htmlMediaElement.load(); + htmlMediaElement.play(); + } + } + */ + + // fire success code + options.success(htmlMediaElement, htmlMediaElement); + + return htmlMediaElement; + } +}; + +/* + - test on IE (object vs. embed) + - determine when to use iframe (Firefox, Safari, Mobile) vs. Flash (Chrome, IE) + - fullscreen? +*/ + +// YouTube Flash and Iframe API +mejs.YouTubeApi = { + isIframeStarted: false, + isIframeLoaded: false, + loadIframeApi: function() { + if (!this.isIframeStarted) { + var tag = document.createElement('script'); + tag.src = "//www.youtube.com/player_api"; + var firstScriptTag = document.getElementsByTagName('script')[0]; + firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); + this.isIframeStarted = true; + } + }, + iframeQueue: [], + enqueueIframe: function(yt) { + + if (this.isLoaded) { + this.createIframe(yt); + } else { + this.loadIframeApi(); + this.iframeQueue.push(yt); + } + }, + createIframe: function(settings) { + + var + pluginMediaElement = settings.pluginMediaElement, + player = new YT.Player(settings.containerId, { + height: settings.height, + width: settings.width, + videoId: settings.videoId, + playerVars: {controls:0}, + events: { + 'onReady': function() { + + // hook up iframe object to MEjs + settings.pluginMediaElement.pluginApi = player; + + // init mejs + mejs.MediaPluginBridge.initPlugin(settings.pluginId); + + // create timer + setInterval(function() { + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'timeupdate'); + }, 250); + }, + 'onStateChange': function(e) { + + mejs.YouTubeApi.handleStateChange(e.data, player, pluginMediaElement); + + } + } + }); + }, + + createEvent: function (player, pluginMediaElement, eventName) { + var obj = { + type: eventName, + target: pluginMediaElement + }; + + if (player && player.getDuration) { + + // time + pluginMediaElement.currentTime = obj.currentTime = player.getCurrentTime(); + pluginMediaElement.duration = obj.duration = player.getDuration(); + + // state + obj.paused = pluginMediaElement.paused; + obj.ended = pluginMediaElement.ended; + + // sound + obj.muted = player.isMuted(); + obj.volume = player.getVolume() / 100; + + // progress + obj.bytesTotal = player.getVideoBytesTotal(); + obj.bufferedBytes = player.getVideoBytesLoaded(); + + // fake the W3C buffered TimeRange + var bufferedTime = obj.bufferedBytes / obj.bytesTotal * obj.duration; + + obj.target.buffered = obj.buffered = { + start: function(index) { + return 0; + }, + end: function (index) { + return bufferedTime; + }, + length: 1 + }; + + } + + // send event up the chain + pluginMediaElement.dispatchEvent(obj.type, obj); + }, + + iFrameReady: function() { + + this.isLoaded = true; + this.isIframeLoaded = true; + + while (this.iframeQueue.length > 0) { + var settings = this.iframeQueue.pop(); + this.createIframe(settings); + } + }, + + // FLASH! + flashPlayers: {}, + createFlash: function(settings) { + + this.flashPlayers[settings.pluginId] = settings; + + /* + settings.container.innerHTML = + '<object type="application/x-shockwave-flash" id="' + settings.pluginId + '" data="//www.youtube.com/apiplayer?enablejsapi=1&playerapiid=' + settings.pluginId + '&version=3&autoplay=0&controls=0&modestbranding=1&loop=0" ' + + 'width="' + settings.width + '" height="' + settings.height + '" style="visibility: visible; " class="mejs-shim">' + + '<param name="allowScriptAccess" value="always">' + + '<param name="wmode" value="transparent">' + + '</object>'; + */ + + var specialIEContainer, + youtubeUrl = '//www.youtube.com/apiplayer?enablejsapi=1&playerapiid=' + settings.pluginId + '&version=3&autoplay=0&controls=0&modestbranding=1&loop=0'; + + if (mejs.MediaFeatures.isIE) { + + specialIEContainer = document.createElement('div'); + settings.container.appendChild(specialIEContainer); + specialIEContainer.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" ' + +'id="' + settings.pluginId + '" width="' + settings.width + '" height="' + settings.height + '" class="mejs-shim">' + + '<param name="movie" value="' + youtubeUrl + '" />' + + '<param name="wmode" value="transparent" />' + + '<param name="allowScriptAccess" value="always" />' + + '<param name="allowFullScreen" value="true" />' + +'</object>'; + } else { + settings.container.innerHTML = + '<object type="application/x-shockwave-flash" id="' + settings.pluginId + '" data="' + youtubeUrl + '" ' + + 'width="' + settings.width + '" height="' + settings.height + '" style="visibility: visible; " class="mejs-shim">' + + '<param name="allowScriptAccess" value="always">' + + '<param name="wmode" value="transparent">' + + '</object>'; + } + + }, + + flashReady: function(id) { + var + settings = this.flashPlayers[id], + player = document.getElementById(id), + pluginMediaElement = settings.pluginMediaElement; + + // hook up and return to MediaELementPlayer.success + pluginMediaElement.pluginApi = + pluginMediaElement.pluginElement = player; + mejs.MediaPluginBridge.initPlugin(id); + + // load the youtube video + player.cueVideoById(settings.videoId); + + var callbackName = settings.containerId + '_callback'; + + window[callbackName] = function(e) { + mejs.YouTubeApi.handleStateChange(e, player, pluginMediaElement); + } + + player.addEventListener('onStateChange', callbackName); + + setInterval(function() { + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'timeupdate'); + }, 250); + + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'canplay'); + }, + + handleStateChange: function(youTubeState, player, pluginMediaElement) { + switch (youTubeState) { + case -1: // not started + pluginMediaElement.paused = true; + pluginMediaElement.ended = true; + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'loadedmetadata'); + //createYouTubeEvent(player, pluginMediaElement, 'loadeddata'); + break; + case 0: + pluginMediaElement.paused = false; + pluginMediaElement.ended = true; + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'ended'); + break; + case 1: + pluginMediaElement.paused = false; + pluginMediaElement.ended = false; + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'play'); + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'playing'); + break; + case 2: + pluginMediaElement.paused = true; + pluginMediaElement.ended = false; + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'pause'); + break; + case 3: // buffering + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'progress'); + break; + case 5: + // cued? + break; + + } + + } +} +// IFRAME +function onYouTubePlayerAPIReady() { + mejs.YouTubeApi.iFrameReady(); +} +// FLASH +function onYouTubePlayerReady(id) { + mejs.YouTubeApi.flashReady(id); +} + +window.mejs = mejs; +window.MediaElement = mejs.MediaElement; + +/*! + * Adds Internationalization and localization to mediaelement. + * + * This file does not contain translations, you have to add the manually. + * The schema is always the same: me-i18n-locale-[ISO_639-1 Code].js + * + * Examples are provided both for german and chinese translation. + * + * + * What is the concept beyond i18n? + * http://en.wikipedia.org/wiki/Internationalization_and_localization + * + * What langcode should i use? + * http://en.wikipedia.org/wiki/ISO_639-1 + * + * + * License? + * + * The i18n file uses methods from the Drupal project (drupal.js): + * - i18n.methods.t() (modified) + * - i18n.methods.checkPlain() (full copy) + * + * The Drupal project is (like mediaelementjs) licensed under GPLv2. + * - http://drupal.org/licensing/faq/#q1 + * - https://github.com/johndyer/mediaelement + * - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * + * + * @author + * Tim Latz (latz.tim@gmail.com) + * + * + * @params + * - context - document, iframe .. + * - exports - CommonJS, window .. + * + */ +;(function(context, exports, undefined) { + "use strict"; + var i18n = { + "locale": { + "language" : '', + "strings" : {} + }, + "methods" : {} + }; +// start i18n + + + /** + * Get language, fallback to browser's language if empty + */ + i18n.getLanguage = function () { + var language = i18n.locale.language || window.navigator.userLanguage || window.navigator.language; + // convert to iso 639-1 (2-letters, lower case) + return language.substr(0, 2).toLowerCase(); + }; + + // i18n fixes for compatibility with WordPress + if ( typeof mejsL10n != 'undefined' ) { + i18n.locale.language = mejsL10n.language; + } + + + + /** + * Encode special characters in a plain-text string for display as HTML. + */ + i18n.methods.checkPlain = function (str) { + var character, regex, + replace = { + '&': '&', + '"': '"', + '<': '<', + '>': '>' + }; + str = String(str); + for (character in replace) { + if (replace.hasOwnProperty(character)) { + regex = new RegExp(character, 'g'); + str = str.replace(regex, replace[character]); + } + } + return str; + }; + + /** + * Translate strings to the page language or a given language. + * + * + * @param str + * A string containing the English string to translate. + * + * @param options + * - 'context' (defaults to the default context): The context the source string + * belongs to. + * + * @return + * The translated string, escaped via i18n.methods.checkPlain() + */ + i18n.methods.t = function (str, options) { + + // Fetch the localized version of the string. + if (i18n.locale.strings && i18n.locale.strings[options.context] && i18n.locale.strings[options.context][str]) { + str = i18n.locale.strings[options.context][str]; + } + + return i18n.methods.checkPlain(str); + }; + + + /** + * Wrapper for i18n.methods.t() + * + * @see i18n.methods.t() + * @throws InvalidArgumentException + */ + i18n.t = function(str, options) { + + if (typeof str === 'string' && str.length > 0) { + + // check every time due language can change for + // different reasons (translation, lang switcher ..) + var language = i18n.getLanguage(); + + options = options || { + "context" : language + }; + + return i18n.methods.t(str, options); + } + else { + throw { + "name" : 'InvalidArgumentException', + "message" : 'First argument is either not a string or empty.' + }; + } + }; + +// end i18n + exports.i18n = i18n; +}(document, mejs)); + +// i18n fixes for compatibility with WordPress +;(function(exports, undefined) { + + "use strict"; + + if ( typeof mejsL10n != 'undefined' ) { + exports[mejsL10n.language] = mejsL10n.strings; + } + +}(mejs.i18n.locale.strings)); + +/*! + * This is a i18n.locale language object. + * + * German translation by Tim Latz, latz.tim@gmail.com + * + * @author + * Tim Latz (latz.tim@gmail.com) + * + * @see + * me-i18n.js + * + * @params + * - exports - CommonJS, window .. + */ +;(function(exports, undefined) { + + "use strict"; + + if (typeof exports.de === 'undefined') { + exports.de = { + "Fullscreen" : "Vollbild", + "Go Fullscreen" : "Vollbild an", + "Turn off Fullscreen" : "Vollbild aus", + "Close" : "Schließen" + }; + } + +}(mejs.i18n.locale.strings)); +/*! + * This is a i18n.locale language object. + * + * Traditional chinese translation by Tim Latz, latz.tim@gmail.com + * + * @author + * Tim Latz (latz.tim@gmail.com) + * + * @see + * me-i18n.js + * + * @params + * - exports - CommonJS, window .. + */ +;(function(exports, undefined) { + + "use strict"; + + if (typeof exports.zh === 'undefined') { + exports.zh = { + "Fullscreen" : "全螢幕", + "Go Fullscreen" : "全屏模式", + "Turn off Fullscreen" : "退出全屏模式", + "Close" : "關閉" + }; + } + +}(mejs.i18n.locale.strings)); + + +/*! + * MediaElementPlayer + * http://mediaelementjs.com/ + * + * Creates a controller bar for HTML5 <video> add <audio> tags + * using jQuery and MediaElement.js (HTML5 Flash/Silverlight wrapper) + * + * Copyright 2010-2013, John Dyer (http://j.hn/) + * License: MIT + * + */ +if (typeof jQuery != 'undefined') { + mejs.$ = jQuery; +} else if (typeof ender != 'undefined') { + mejs.$ = ender; +} +(function ($) { + + // default player values + mejs.MepDefaults = { + // url to poster (to fix iOS 3.x) + poster: '', + // When the video is ended, we can show the poster. + showPosterWhenEnded: false, + // default if the <video width> is not specified + defaultVideoWidth: 480, + // default if the <video height> is not specified + defaultVideoHeight: 270, + // if set, overrides <video width> + videoWidth: -1, + // if set, overrides <video height> + videoHeight: -1, + // default if the user doesn't specify + defaultAudioWidth: 400, + // default if the user doesn't specify + defaultAudioHeight: 30, + + // default amount to move back when back key is pressed + defaultSeekBackwardInterval: function(media) { + return (media.duration * 0.05); + }, + // default amount to move forward when forward key is pressed + defaultSeekForwardInterval: function(media) { + return (media.duration * 0.05); + }, + + // set dimensions via JS instead of CSS + setDimensions: true, + + // width of audio player + audioWidth: -1, + // height of audio player + audioHeight: -1, + // initial volume when the player starts (overrided by user cookie) + startVolume: 0.8, + // useful for <audio> player loops + loop: false, + // rewind to beginning when media ends + autoRewind: true, + // resize to media dimensions + enableAutosize: true, + // forces the hour marker (##:00:00) + alwaysShowHours: false, + + // show framecount in timecode (##:00:00:00) + showTimecodeFrameCount: false, + // used when showTimecodeFrameCount is set to true + framesPerSecond: 25, + + // automatically calculate the width of the progress bar based on the sizes of other elements + autosizeProgress : true, + // Hide controls when playing and mouse is not over the video + alwaysShowControls: false, + // Display the video control + hideVideoControlsOnLoad: false, + // Enable click video element to toggle play/pause + clickToPlayPause: true, + // force iPad's native controls + iPadUseNativeControls: false, + // force iPhone's native controls + iPhoneUseNativeControls: false, + // force Android's native controls + AndroidUseNativeControls: false, + // features to show + features: ['playpause','current','progress','duration','tracks','volume','fullscreen'], + // only for dynamic + isVideo: true, + + // turns keyboard support on and off for this instance + enableKeyboard: true, + + // whenthis player starts, it will pause other players + pauseOtherPlayers: true, + + // array of keyboard actions such as play pause + keyActions: [ + { + keys: [ + 32, // SPACE + 179 // GOOGLE play/pause button + ], + action: function(player, media) { + if (media.paused || media.ended) { + player.play(); + } else { + player.pause(); + } + } + }, + { + keys: [38], // UP + action: function(player, media) { + player.container.find('.mejs-volume-slider').css('display','block'); + if (player.isVideo) { + player.showControls(); + player.startControlsTimer(); + } + + var newVolume = Math.min(media.volume + 0.1, 1); + media.setVolume(newVolume); + } + }, + { + keys: [40], // DOWN + action: function(player, media) { + player.container.find('.mejs-volume-slider').css('display','block'); + if (player.isVideo) { + player.showControls(); + player.startControlsTimer(); + } + + var newVolume = Math.max(media.volume - 0.1, 0); + media.setVolume(newVolume); + } + }, + { + keys: [ + 37, // LEFT + 227 // Google TV rewind + ], + action: function(player, media) { + if (!isNaN(media.duration) && media.duration > 0) { + if (player.isVideo) { + player.showControls(); + player.startControlsTimer(); + } + + // 5% + var newTime = Math.max(media.currentTime - player.options.defaultSeekBackwardInterval(media), 0); + media.setCurrentTime(newTime); + } + } + }, + { + keys: [ + 39, // RIGHT + 228 // Google TV forward + ], + action: function(player, media) { + if (!isNaN(media.duration) && media.duration > 0) { + if (player.isVideo) { + player.showControls(); + player.startControlsTimer(); + } + + // 5% + var newTime = Math.min(media.currentTime + player.options.defaultSeekForwardInterval(media), media.duration); + media.setCurrentTime(newTime); + } + } + }, + { + keys: [70], // F + action: function(player, media) { + if (typeof player.enterFullScreen != 'undefined') { + if (player.isFullScreen) { + player.exitFullScreen(); + } else { + player.enterFullScreen(); + } + } + } + }, + { + keys: [77], // M + action: function(player, media) { + player.container.find('.mejs-volume-slider').css('display','block'); + if (player.isVideo) { + player.showControls(); + player.startControlsTimer(); + } + if (player.media.muted) { + player.setMuted(false); + } else { + player.setMuted(true); + } + } + } + ] + }; + + mejs.mepIndex = 0; + + mejs.players = {}; + + // wraps a MediaElement object in player controls + mejs.MediaElementPlayer = function(node, o) { + // enforce object, even without "new" (via John Resig) + if ( !(this instanceof mejs.MediaElementPlayer) ) { + return new mejs.MediaElementPlayer(node, o); + } + + var t = this; + + // these will be reset after the MediaElement.success fires + t.$media = t.$node = $(node); + t.node = t.media = t.$media[0]; + + // check for existing player + if (typeof t.node.player != 'undefined') { + return t.node.player; + } else { + // attach player to DOM node for reference + t.node.player = t; + } + + + // try to get options from data-mejsoptions + if (typeof o == 'undefined') { + o = t.$node.data('mejsoptions'); + } + + // extend default options + t.options = $.extend({},mejs.MepDefaults,o); + + // unique ID + t.id = 'mep_' + mejs.mepIndex++; + + // add to player array (for focus events) + mejs.players[t.id] = t; + + // start up + t.init(); + + return t; + }; + + // actual player + mejs.MediaElementPlayer.prototype = { + + hasFocus: false, + + controlsAreVisible: true, + + init: function() { + + var + t = this, + mf = mejs.MediaFeatures, + // options for MediaElement (shim) + meOptions = $.extend(true, {}, t.options, { + success: function(media, domNode) { t.meReady(media, domNode); }, + error: function(e) { t.handleError(e);} + }), + tagName = t.media.tagName.toLowerCase(); + + t.isDynamic = (tagName !== 'audio' && tagName !== 'video'); + + if (t.isDynamic) { + // get video from src or href? + t.isVideo = t.options.isVideo; + } else { + t.isVideo = (tagName !== 'audio' && t.options.isVideo); + } + + // use native controls in iPad, iPhone, and Android + if ((mf.isiPad && t.options.iPadUseNativeControls) || (mf.isiPhone && t.options.iPhoneUseNativeControls)) { + + // add controls and stop + t.$media.attr('controls', 'controls'); + + // attempt to fix iOS 3 bug + //t.$media.removeAttr('poster'); + // no Issue found on iOS3 -ttroxell + + // override Apple's autoplay override for iPads + if (mf.isiPad && t.media.getAttribute('autoplay') !== null) { + t.play(); + } + + } else if (mf.isAndroid && t.options.AndroidUseNativeControls) { + + // leave default player + + } else { + + // DESKTOP: use MediaElementPlayer controls + + // remove native controls + t.$media.removeAttr('controls'); + + // build container + t.container = + $('<div id="' + t.id + '" class="mejs-container ' + (mejs.MediaFeatures.svg ? 'svg' : 'no-svg') + '">'+ + '<div class="mejs-inner">'+ + '<div class="mejs-mediaelement"></div>'+ + '<div class="mejs-layers"></div>'+ + '<div class="mejs-controls"></div>'+ + '<div class="mejs-clear"></div>'+ + '</div>' + + '</div>') + .addClass(t.$media[0].className) + .insertBefore(t.$media); + + // add classes for user and content + t.container.addClass( + (mf.isAndroid ? 'mejs-android ' : '') + + (mf.isiOS ? 'mejs-ios ' : '') + + (mf.isiPad ? 'mejs-ipad ' : '') + + (mf.isiPhone ? 'mejs-iphone ' : '') + + (t.isVideo ? 'mejs-video ' : 'mejs-audio ') + ); + + + // move the <video/video> tag into the right spot + if (mf.isiOS) { + + // sadly, you can't move nodes in iOS, so we have to destroy and recreate it! + var $newMedia = t.$media.clone(); + + t.container.find('.mejs-mediaelement').append($newMedia); + + t.$media.remove(); + t.$node = t.$media = $newMedia; + t.node = t.media = $newMedia[0] + + } else { + + // normal way of moving it into place (doesn't work on iOS) + t.container.find('.mejs-mediaelement').append(t.$media); + } + + // find parts + t.controls = t.container.find('.mejs-controls'); + t.layers = t.container.find('.mejs-layers'); + + // determine the size + + /* size priority: + (1) videoWidth (forced), + (2) style="width;height;" + (3) width attribute, + (4) defaultVideoWidth (for unspecified cases) + */ + + var tagType = (t.isVideo ? 'video' : 'audio'), + capsTagName = tagType.substring(0,1).toUpperCase() + tagType.substring(1); + + + + if (t.options[tagType + 'Width'] > 0 || t.options[tagType + 'Width'].toString().indexOf('%') > -1) { + t.width = t.options[tagType + 'Width']; + } else if (t.media.style.width !== '' && t.media.style.width !== null) { + t.width = t.media.style.width; + } else if (t.media.getAttribute('width') !== null) { + t.width = t.$media.attr('width'); + } else { + t.width = t.options['default' + capsTagName + 'Width']; + } + + if (t.options[tagType + 'Height'] > 0 || t.options[tagType + 'Height'].toString().indexOf('%') > -1) { + t.height = t.options[tagType + 'Height']; + } else if (t.media.style.height !== '' && t.media.style.height !== null) { + t.height = t.media.style.height; + } else if (t.$media[0].getAttribute('height') !== null) { + t.height = t.$media.attr('height'); + } else { + t.height = t.options['default' + capsTagName + 'Height']; + } + + // set the size, while we wait for the plugins to load below + t.setPlayerSize(t.width, t.height); + + // create MediaElementShim + meOptions.pluginWidth = t.width; + meOptions.pluginHeight = t.height; + } + + // create MediaElement shim + mejs.MediaElement(t.$media[0], meOptions); + + if (typeof(t.container) != 'undefined' && t.controlsAreVisible){ + // controls are shown when loaded + t.container.trigger('controlsshown'); + } + }, + + showControls: function(doAnimation) { + var t = this; + + doAnimation = typeof doAnimation == 'undefined' || doAnimation; + + if (t.controlsAreVisible) + return; + + if (doAnimation) { + t.controls + .css('visibility','visible') + .stop(true, true).fadeIn(200, function() { + t.controlsAreVisible = true; + t.container.trigger('controlsshown'); + }); + + // any additional controls people might add and want to hide + t.container.find('.mejs-control') + .css('visibility','visible') + .stop(true, true).fadeIn(200, function() {t.controlsAreVisible = true;}); + + } else { + t.controls + .css('visibility','visible') + .css('display','block'); + + // any additional controls people might add and want to hide + t.container.find('.mejs-control') + .css('visibility','visible') + .css('display','block'); + + t.controlsAreVisible = true; + t.container.trigger('controlsshown'); + } + + t.setControlsSize(); + + }, + + hideControls: function(doAnimation) { + var t = this; + + doAnimation = typeof doAnimation == 'undefined' || doAnimation; + + if (!t.controlsAreVisible || t.options.alwaysShowControls) + return; + + if (doAnimation) { + // fade out main controls + t.controls.stop(true, true).fadeOut(200, function() { + $(this) + .css('visibility','hidden') + .css('display','block'); + + t.controlsAreVisible = false; + t.container.trigger('controlshidden'); + }); + + // any additional controls people might add and want to hide + t.container.find('.mejs-control').stop(true, true).fadeOut(200, function() { + $(this) + .css('visibility','hidden') + .css('display','block'); + }); + } else { + + // hide main controls + t.controls + .css('visibility','hidden') + .css('display','block'); + + // hide others + t.container.find('.mejs-control') + .css('visibility','hidden') + .css('display','block'); + + t.controlsAreVisible = false; + t.container.trigger('controlshidden'); + } + }, + + controlsTimer: null, + + startControlsTimer: function(timeout) { + + var t = this; + + timeout = typeof timeout != 'undefined' ? timeout : 1500; + + t.killControlsTimer('start'); + + t.controlsTimer = setTimeout(function() { + // + t.hideControls(); + t.killControlsTimer('hide'); + }, timeout); + }, + + killControlsTimer: function(src) { + + var t = this; + + if (t.controlsTimer !== null) { + clearTimeout(t.controlsTimer); + delete t.controlsTimer; + t.controlsTimer = null; + } + }, + + controlsEnabled: true, + + disableControls: function() { + var t= this; + + t.killControlsTimer(); + t.hideControls(false); + this.controlsEnabled = false; + }, + + enableControls: function() { + var t= this; + + t.showControls(false); + + t.controlsEnabled = true; + }, + + + // Sets up all controls and events + meReady: function(media, domNode) { + + + var t = this, + mf = mejs.MediaFeatures, + autoplayAttr = domNode.getAttribute('autoplay'), + autoplay = !(typeof autoplayAttr == 'undefined' || autoplayAttr === null || autoplayAttr === 'false'), + featureIndex, + feature; + + // make sure it can't create itself again if a plugin reloads + if (t.created) { + return; + } else { + t.created = true; + } + + t.media = media; + t.domNode = domNode; + + if (!(mf.isAndroid && t.options.AndroidUseNativeControls) && !(mf.isiPad && t.options.iPadUseNativeControls) && !(mf.isiPhone && t.options.iPhoneUseNativeControls)) { + + // two built in features + t.buildposter(t, t.controls, t.layers, t.media); + t.buildkeyboard(t, t.controls, t.layers, t.media); + t.buildoverlays(t, t.controls, t.layers, t.media); + + // grab for use by features + t.findTracks(); + + // add user-defined features/controls + for (featureIndex in t.options.features) { + feature = t.options.features[featureIndex]; + if (t['build' + feature]) { + try { + t['build' + feature](t, t.controls, t.layers, t.media); + } catch (e) { + // TODO: report control error + //throw e; + + + } + } + } + + t.container.trigger('controlsready'); + + // reset all layers and controls + t.setPlayerSize(t.width, t.height); + t.setControlsSize(); + + + // controls fade + if (t.isVideo) { + + if (mejs.MediaFeatures.hasTouch) { + + // for touch devices (iOS, Android) + // show/hide without animation on touch + + t.$media.bind('touchstart', function() { + + + // toggle controls + if (t.controlsAreVisible) { + t.hideControls(false); + } else { + if (t.controlsEnabled) { + t.showControls(false); + } + } + }); + + } else { + + // create callback here since it needs access to current + // MediaElement object + t.clickToPlayPauseCallback = function() { + // + + if (t.options.clickToPlayPause) { + if (t.media.paused) { + t.play(); + } else { + t.pause(); + } + } + }; + + // click to play/pause + t.media.addEventListener('click', t.clickToPlayPauseCallback, false); + + // show/hide controls + t.container + .bind('mouseenter mouseover', function () { + if (t.controlsEnabled) { + if (!t.options.alwaysShowControls ) { + t.killControlsTimer('enter'); + t.showControls(); + t.startControlsTimer(2500); + } + } + }) + .bind('mousemove', function() { + if (t.controlsEnabled) { + if (!t.controlsAreVisible) { + t.showControls(); + } + if (!t.options.alwaysShowControls) { + t.startControlsTimer(2500); + } + } + }) + .bind('mouseleave', function () { + if (t.controlsEnabled) { + if (!t.media.paused && !t.options.alwaysShowControls) { + t.startControlsTimer(1000); + } + } + }); + } + + if(t.options.hideVideoControlsOnLoad) { + t.hideControls(false); + } + + // check for autoplay + if (autoplay && !t.options.alwaysShowControls) { + t.hideControls(); + } + + // resizer + if (t.options.enableAutosize) { + t.media.addEventListener('loadedmetadata', function(e) { + // if the <video height> was not set and the options.videoHeight was not set + // then resize to the real dimensions + if (t.options.videoHeight <= 0 && t.domNode.getAttribute('height') === null && !isNaN(e.target.videoHeight)) { + t.setPlayerSize(e.target.videoWidth, e.target.videoHeight); + t.setControlsSize(); + t.media.setVideoSize(e.target.videoWidth, e.target.videoHeight); + } + }, false); + } + } + + // EVENTS + + // FOCUS: when a video starts playing, it takes focus from other players (possibily pausing them) + media.addEventListener('play', function() { + var playerIndex; + + // go through all other players + for (playerIndex in mejs.players) { + var p = mejs.players[playerIndex]; + if (p.id != t.id && t.options.pauseOtherPlayers && !p.paused && !p.ended) { + p.pause(); + } + p.hasFocus = false; + } + + t.hasFocus = true; + },false); + + + // ended for all + t.media.addEventListener('ended', function (e) { + if(t.options.autoRewind) { + try{ + t.media.setCurrentTime(0); + } catch (exp) { + + } + } + t.media.pause(); + + if (t.setProgressRail) { + t.setProgressRail(); + } + if (t.setCurrentRail) { + t.setCurrentRail(); + } + + if (t.options.loop) { + t.play(); + } else if (!t.options.alwaysShowControls && t.controlsEnabled) { + t.showControls(); + } + }, false); + + // resize on the first play + t.media.addEventListener('loadedmetadata', function(e) { + if (t.updateDuration) { + t.updateDuration(); + } + if (t.updateCurrent) { + t.updateCurrent(); + } + + if (!t.isFullScreen) { + t.setPlayerSize(t.width, t.height); + t.setControlsSize(); + } + }, false); + + + // webkit has trouble doing this without a delay + setTimeout(function () { + t.setPlayerSize(t.width, t.height); + t.setControlsSize(); + }, 50); + + // adjust controls whenever window sizes (used to be in fullscreen only) + t.globalBind('resize', function() { + + // don't resize for fullscreen mode + if ( !(t.isFullScreen || (mejs.MediaFeatures.hasTrueNativeFullScreen && document.webkitIsFullScreen)) ) { + t.setPlayerSize(t.width, t.height); + } + + // always adjust controls + t.setControlsSize(); + }); + + // TEMP: needs to be moved somewhere else + if (t.media.pluginType == 'youtube' && t.options.autoplay) { + //LOK-Soft: added t.options.autoplay to if -- I can only guess this is for hiding play button when autoplaying youtube, general hiding play button layer causes missing button on player load + t.container.find('.mejs-overlay-play').hide(); + } + } + + // force autoplay for HTML5 + if (autoplay && media.pluginType == 'native') { + t.play(); + } + + + if (t.options.success) { + + if (typeof t.options.success == 'string') { + window[t.options.success](t.media, t.domNode, t); + } else { + t.options.success(t.media, t.domNode, t); + } + } + }, + + handleError: function(e) { + var t = this; + + t.controls.hide(); + + // Tell user that the file cannot be played + if (t.options.error) { + t.options.error(e); + } + }, + + setPlayerSize: function(width,height) { + var t = this; + + if( !t.options.setDimensions ) { + return false; + } + + if (typeof width != 'undefined') { + t.width = width; + } + + if (typeof height != 'undefined') { + t.height = height; + } + + // detect 100% mode - use currentStyle for IE since css() doesn't return percentages + if (t.height.toString().indexOf('%') > 0 || t.$node.css('max-width') === '100%' || (t.$node[0].currentStyle && t.$node[0].currentStyle.maxWidth === '100%')) { + + // do we have the native dimensions yet? + var nativeWidth = (function() { + if (t.isVideo) { + if (t.media.videoWidth && t.media.videoWidth > 0) { + return t.media.videoWidth; + } else if (t.media.getAttribute('width') !== null) { + return t.media.getAttribute('width'); + } else { + return t.options.defaultVideoWidth; + } + } else { + return t.options.defaultAudioWidth; + } + })(); + + var nativeHeight = (function() { + if (t.isVideo) { + if (t.media.videoHeight && t.media.videoHeight > 0) { + return t.media.videoHeight; + } else if (t.media.getAttribute('height') !== null) { + return t.media.getAttribute('height'); + } else { + return t.options.defaultVideoHeight; + } + } else { + return t.options.defaultAudioHeight; + } + })(); + + var + parentWidth = t.container.parent().closest(':visible').width(), + parentHeight = t.container.parent().closest(':visible').height(), + newHeight = t.isVideo || !t.options.autosizeProgress ? parseInt(parentWidth * nativeHeight/nativeWidth, 10) : nativeHeight; + + // When we use percent, the newHeight can't be calculated so we get the container height + if(isNaN(newHeight) || ( parentHeight != 0 && newHeight > parentHeight )) { + newHeight = parentHeight; + } + + if (t.container.parent()[0].tagName.toLowerCase() === 'body') { // && t.container.siblings().count == 0) { + parentWidth = $(window).width(); + newHeight = $(window).height(); + } + + if ( newHeight != 0 && parentWidth != 0 ) { + // set outer container size + t.container + .width(parentWidth) + .height(newHeight); + + // set native <video> or <audio> and shims + t.$media.add(t.container.find('.mejs-shim')) + .width('100%') + .height('100%'); + + // if shim is ready, send the size to the embeded plugin + if (t.isVideo) { + if (t.media.setVideoSize) { + t.media.setVideoSize(parentWidth, newHeight); + } + } + + // set the layers + t.layers.children('.mejs-layer') + .width('100%') + .height('100%'); + } + + + } else { + + t.container + .width(t.width) + .height(t.height); + + t.layers.children('.mejs-layer') + .width(t.width) + .height(t.height); + + } + + // special case for big play button so it doesn't go over the controls area + var playLayer = t.layers.find('.mejs-overlay-play'), + playButton = playLayer.find('.mejs-overlay-button'); + + playLayer.height(t.container.height() - t.controls.height()); + playButton.css('margin-top', '-' + (playButton.height()/2 - t.controls.height()/2).toString() + 'px' ); + + }, + + setControlsSize: function() { + var t = this, + usedWidth = 0, + railWidth = 0, + rail = t.controls.find('.mejs-time-rail'), + total = t.controls.find('.mejs-time-total'), + current = t.controls.find('.mejs-time-current'), + loaded = t.controls.find('.mejs-time-loaded'), + others = rail.siblings(), + lastControl = others.last(), + lastControlPosition = null; + + // skip calculation if hidden + if (!t.container.is(':visible') || !rail.length || !rail.is(':visible')) { + return; + } + + + // allow the size to come from custom CSS + if (t.options && !t.options.autosizeProgress) { + // Also, frontends devs can be more flexible + // due the opportunity of absolute positioning. + railWidth = parseInt(rail.css('width')); + } + + // attempt to autosize + if (railWidth === 0 || !railWidth) { + + // find the size of all the other controls besides the rail + others.each(function() { + var $this = $(this); + if ($this.css('position') != 'absolute' && $this.is(':visible')) { + usedWidth += $(this).outerWidth(true); + } + }); + + // fit the rail into the remaining space + railWidth = t.controls.width() - usedWidth - (rail.outerWidth(true) - rail.width()); + } + + // resize the rail, + // but then check if the last control (say, the fullscreen button) got pushed down + // this often happens when zoomed + do { + // outer area + rail.width(railWidth); + // dark space + total.width(railWidth - (total.outerWidth(true) - total.width())); + + if (lastControl.css('position') != 'absolute') { + lastControlPosition = lastControl.position(); + railWidth--; + } + } while (lastControlPosition != null && lastControlPosition.top > 0 && railWidth > 0); + + if (t.setProgressRail) + t.setProgressRail(); + if (t.setCurrentRail) + t.setCurrentRail(); + }, + + + buildposter: function(player, controls, layers, media) { + var t = this, + poster = + $('<div class="mejs-poster mejs-layer">' + + '</div>') + .appendTo(layers), + posterUrl = player.$media.attr('poster'); + + // prioriy goes to option (this is useful if you need to support iOS 3.x (iOS completely fails with poster) + if (player.options.poster !== '') { + posterUrl = player.options.poster; + } + + // second, try the real poster + if (posterUrl !== '' && posterUrl != null) { + t.setPoster(posterUrl); + } else { + poster.hide(); + } + + media.addEventListener('play',function() { + poster.hide(); + }, false); + + if(player.options.showPosterWhenEnded && player.options.autoRewind){ + media.addEventListener('ended',function() { + poster.show(); + }, false); + } + }, + + setPoster: function(url) { + var t = this, + posterDiv = t.container.find('.mejs-poster'), + posterImg = posterDiv.find('img'); + + if (posterImg.length == 0) { + posterImg = $('<img width="100%" height="100%" />').appendTo(posterDiv); + } + + posterImg.attr('src', url); + posterDiv.css({'background-image' : 'url(' + url + ')'}); + }, + + buildoverlays: function(player, controls, layers, media) { + var t = this; + if (!player.isVideo) + return; + + var + loading = + $('<div class="mejs-overlay mejs-layer">'+ + '<div class="mejs-overlay-loading"><span></span></div>'+ + '</div>') + .hide() // start out hidden + .appendTo(layers), + error = + $('<div class="mejs-overlay mejs-layer">'+ + '<div class="mejs-overlay-error"></div>'+ + '</div>') + .hide() // start out hidden + .appendTo(layers), + // this needs to come last so it's on top + bigPlay = + $('<div class="mejs-overlay mejs-layer mejs-overlay-play">'+ + '<div class="mejs-overlay-button"></div>'+ + '</div>') + .appendTo(layers) + .bind('click', function() { // Removed 'touchstart' due issues on Samsung Android devices where a tap on bigPlay started and immediately stopped the video + if (t.options.clickToPlayPause) { + if (media.paused) { + media.play(); + } + } + }); + + /* + if (mejs.MediaFeatures.isiOS || mejs.MediaFeatures.isAndroid) { + bigPlay.remove(); + loading.remove(); + } + */ + + + // show/hide big play button + media.addEventListener('play',function() { + bigPlay.hide(); + loading.hide(); + controls.find('.mejs-time-buffering').hide(); + error.hide(); + }, false); + + media.addEventListener('playing', function() { + bigPlay.hide(); + loading.hide(); + controls.find('.mejs-time-buffering').hide(); + error.hide(); + }, false); + + media.addEventListener('seeking', function() { + loading.show(); + controls.find('.mejs-time-buffering').show(); + }, false); + + media.addEventListener('seeked', function() { + loading.hide(); + controls.find('.mejs-time-buffering').hide(); + }, false); + + media.addEventListener('pause',function() { + if (!mejs.MediaFeatures.isiPhone) { + bigPlay.show(); + } + }, false); + + media.addEventListener('waiting', function() { + loading.show(); + controls.find('.mejs-time-buffering').show(); + }, false); + + + // show/hide loading + media.addEventListener('loadeddata',function() { + // for some reason Chrome is firing this event + //if (mejs.MediaFeatures.isChrome && media.getAttribute && media.getAttribute('preload') === 'none') + // return; + + loading.show(); + controls.find('.mejs-time-buffering').show(); + }, false); + media.addEventListener('canplay',function() { + loading.hide(); + controls.find('.mejs-time-buffering').hide(); + }, false); + + // error handling + media.addEventListener('error',function() { + loading.hide(); + controls.find('.mejs-time-buffering').hide(); + error.show(); + error.find('mejs-overlay-error').html("Error loading this resource"); + }, false); + + media.addEventListener('keydown', function(e) { + t.onkeydown(player, media, e); + }, false); + }, + + buildkeyboard: function(player, controls, layers, media) { + + var t = this; + + // listen for key presses + t.globalBind('keydown', function(e) { + return t.onkeydown(player, media, e); + }); + + // check if someone clicked outside a player region, then kill its focus + t.globalBind('click', function(event) { + player.hasFocus = $(event.target).closest('.mejs-container').length != 0; + }); + + }, + onkeydown: function(player, media, e) { + if (player.hasFocus && player.options.enableKeyboard) { + // find a matching key + for (var i = 0, il = player.options.keyActions.length; i < il; i++) { + var keyAction = player.options.keyActions[i]; + + for (var j = 0, jl = keyAction.keys.length; j < jl; j++) { + if (e.keyCode == keyAction.keys[j]) { + if (typeof(e.preventDefault) == "function") e.preventDefault(); + keyAction.action(player, media, e.keyCode); + return false; + } + } + } + } + + return true; + }, + + findTracks: function() { + var t = this, + tracktags = t.$media.find('track'); + + // store for use by plugins + t.tracks = []; + tracktags.each(function(index, track) { + + track = $(track); + + t.tracks.push({ + srclang: (track.attr('srclang')) ? track.attr('srclang').toLowerCase() : '', + src: track.attr('src'), + kind: track.attr('kind'), + label: track.attr('label') || '', + entries: [], + isLoaded: false + }); + }); + }, + changeSkin: function(className) { + this.container[0].className = 'mejs-container ' + className; + this.setPlayerSize(this.width, this.height); + this.setControlsSize(); + }, + play: function() { + this.load(); + this.media.play(); + }, + pause: function() { + try { + this.media.pause(); + } catch (e) {} + }, + load: function() { + if (!this.isLoaded) { + this.media.load(); + } + + this.isLoaded = true; + }, + setMuted: function(muted) { + this.media.setMuted(muted); + }, + setCurrentTime: function(time) { + this.media.setCurrentTime(time); + }, + getCurrentTime: function() { + return this.media.currentTime; + }, + setVolume: function(volume) { + this.media.setVolume(volume); + }, + getVolume: function() { + return this.media.volume; + }, + setSrc: function(src) { + this.media.setSrc(src); + }, + remove: function() { + var t = this, featureIndex, feature; + + // invoke features cleanup + for (featureIndex in t.options.features) { + feature = t.options.features[featureIndex]; + if (t['clean' + feature]) { + try { + t['clean' + feature](t); + } catch (e) { + // TODO: report control error + //throw e; + // + // + } + } + } + + // grab video and put it back in place + if (!t.isDynamic) { + t.$media.prop('controls', true); + // detach events from the video + // TODO: detach event listeners better than this; + // also detach ONLY the events attached by this plugin! + t.$node.clone().insertBefore(t.container).show(); + t.$node.remove(); + } else { + t.$node.insertBefore(t.container); + } + + if (t.media.pluginType !== 'native') { + t.media.remove(); + } + + // Remove the player from the mejs.players object so that pauseOtherPlayers doesn't blow up when trying to pause a non existance flash api. + delete mejs.players[t.id]; + + if (typeof t.container == 'object') { + t.container.remove(); + } + t.globalUnbind(); + delete t.node.player; + } + }; + + (function(){ + var rwindow = /^((after|before)print|(before)?unload|hashchange|message|o(ff|n)line|page(hide|show)|popstate|resize|storage)\b/; + + function splitEvents(events, id) { + // add player ID as an event namespace so it's easier to unbind them all later + var ret = {d: [], w: []}; + $.each((events || '').split(' '), function(k, v){ + var eventname = v + '.' + id; + if (eventname.indexOf('.') === 0) { + ret.d.push(eventname); + ret.w.push(eventname); + } + else { + ret[rwindow.test(v) ? 'w' : 'd'].push(eventname); + } + }); + ret.d = ret.d.join(' '); + ret.w = ret.w.join(' '); + return ret; + } + + mejs.MediaElementPlayer.prototype.globalBind = function(events, data, callback) { + var t = this; + events = splitEvents(events, t.id); + if (events.d) $(document).bind(events.d, data, callback); + if (events.w) $(window).bind(events.w, data, callback); + }; + + mejs.MediaElementPlayer.prototype.globalUnbind = function(events, callback) { + var t = this; + events = splitEvents(events, t.id); + if (events.d) $(document).unbind(events.d, callback); + if (events.w) $(window).unbind(events.w, callback); + }; + })(); + + // turn into jQuery plugin + if (typeof $ != 'undefined') { + $.fn.mediaelementplayer = function (options) { + if (options === false) { + this.each(function () { + var player = $(this).data('mediaelementplayer'); + if (player) { + player.remove(); + } + $(this).removeData('mediaelementplayer'); + }); + } + else { + this.each(function () { + $(this).data('mediaelementplayer', new mejs.MediaElementPlayer(this, options)); + }); + } + return this; + }; + + + $(document).ready(function() { + // auto enable using JSON attribute + $('.mejs-player').mediaelementplayer(); + }); + } + + // push out to window + window.MediaElementPlayer = mejs.MediaElementPlayer; + +})(mejs.$); + +(function($) { + + $.extend(mejs.MepDefaults, { + playpauseText: mejs.i18n.t('Play/Pause') + }); + + // PLAY/pause BUTTON + $.extend(MediaElementPlayer.prototype, { + buildplaypause: function(player, controls, layers, media) { + var + t = this, + play = + $('<div class="mejs-button mejs-playpause-button mejs-play" >' + + '<button type="button" aria-controls="' + t.id + '" title="' + t.options.playpauseText + '" aria-label="' + t.options.playpauseText + '"></button>' + + '</div>') + .appendTo(controls) + .click(function(e) { + e.preventDefault(); + + if (media.paused) { + media.play(); + } else { + media.pause(); + } + + return false; + }); + + media.addEventListener('play',function() { + play.removeClass('mejs-play').addClass('mejs-pause'); + }, false); + media.addEventListener('playing',function() { + play.removeClass('mejs-play').addClass('mejs-pause'); + }, false); + + + media.addEventListener('pause',function() { + play.removeClass('mejs-pause').addClass('mejs-play'); + }, false); + media.addEventListener('paused',function() { + play.removeClass('mejs-pause').addClass('mejs-play'); + }, false); + } + }); + +})(mejs.$); + +(function($) { + + $.extend(mejs.MepDefaults, { + stopText: 'Stop' + }); + + // STOP BUTTON + $.extend(MediaElementPlayer.prototype, { + buildstop: function(player, controls, layers, media) { + var t = this, + stop = + $('<div class="mejs-button mejs-stop-button mejs-stop">' + + '<button type="button" aria-controls="' + t.id + '" title="' + t.options.stopText + '" aria-label="' + t.options.stopText + '"></button>' + + '</div>') + .appendTo(controls) + .click(function() { + if (!media.paused) { + media.pause(); + } + if (media.currentTime > 0) { + media.setCurrentTime(0); + media.pause(); + controls.find('.mejs-time-current').width('0px'); + controls.find('.mejs-time-handle').css('left', '0px'); + controls.find('.mejs-time-float-current').html( mejs.Utility.secondsToTimeCode(0) ); + controls.find('.mejs-currenttime').html( mejs.Utility.secondsToTimeCode(0) ); + layers.find('.mejs-poster').show(); + } + }); + } + }); + +})(mejs.$); + +(function($) { + // progress/loaded bar + $.extend(MediaElementPlayer.prototype, { + buildprogress: function(player, controls, layers, media) { + + $('<div class="mejs-time-rail">'+ + '<span class="mejs-time-total">'+ + '<span class="mejs-time-buffering"></span>'+ + '<span class="mejs-time-loaded"></span>'+ + '<span class="mejs-time-current"></span>'+ + '<span class="mejs-time-handle"></span>'+ + '<span class="mejs-time-float">' + + '<span class="mejs-time-float-current">00:00</span>' + + '<span class="mejs-time-float-corner"></span>' + + '</span>'+ + '</span>'+ + '</div>') + .appendTo(controls); + controls.find('.mejs-time-buffering').hide(); + + var + t = this, + total = controls.find('.mejs-time-total'), + loaded = controls.find('.mejs-time-loaded'), + current = controls.find('.mejs-time-current'), + handle = controls.find('.mejs-time-handle'), + timefloat = controls.find('.mejs-time-float'), + timefloatcurrent = controls.find('.mejs-time-float-current'), + handleMouseMove = function (e) { + // mouse or touch position relative to the object + if (e.originalEvent.changedTouches) { + var x = e.originalEvent.changedTouches[0].pageX; + }else{ + var x = e.pageX; + } + + var offset = total.offset(), + width = total.outerWidth(true), + percentage = 0, + newTime = 0, + pos = 0; + + + if (media.duration) { + if (x < offset.left) { + x = offset.left; + } else if (x > width + offset.left) { + x = width + offset.left; + } + + pos = x - offset.left; + percentage = (pos / width); + newTime = (percentage <= 0.02) ? 0 : percentage * media.duration; + + // seek to where the mouse is + if (mouseIsDown && newTime !== media.currentTime) { + media.setCurrentTime(newTime); + } + + // position floating time box + if (!mejs.MediaFeatures.hasTouch) { + timefloat.css('left', pos); + timefloatcurrent.html( mejs.Utility.secondsToTimeCode(newTime) ); + timefloat.show(); + } + } + }, + mouseIsDown = false, + mouseIsOver = false; + + // handle clicks + //controls.find('.mejs-time-rail').delegate('span', 'click', handleMouseMove); + total + .bind('mousedown touchstart', function (e) { + // only handle left clicks or touch + if (e.which === 1 || e.which === 0) { + mouseIsDown = true; + handleMouseMove(e); + t.globalBind('mousemove.dur touchmove.dur', function(e) { + handleMouseMove(e); + }); + t.globalBind('mouseup.dur touchend.dur', function (e) { + mouseIsDown = false; + timefloat.hide(); + t.globalUnbind('.dur'); + }); + return false; + } + }) + .bind('mouseenter', function(e) { + mouseIsOver = true; + t.globalBind('mousemove.dur', function(e) { + handleMouseMove(e); + }); + if (!mejs.MediaFeatures.hasTouch) { + timefloat.show(); + } + }) + .bind('mouseleave',function(e) { + mouseIsOver = false; + if (!mouseIsDown) { + t.globalUnbind('.dur'); + timefloat.hide(); + } + }); + + // loading + media.addEventListener('progress', function (e) { + player.setProgressRail(e); + player.setCurrentRail(e); + }, false); + + // current time + media.addEventListener('timeupdate', function(e) { + player.setProgressRail(e); + player.setCurrentRail(e); + }, false); + + + // store for later use + t.loaded = loaded; + t.total = total; + t.current = current; + t.handle = handle; + }, + setProgressRail: function(e) { + + var + t = this, + target = (e != undefined) ? e.target : t.media, + percent = null; + + // newest HTML5 spec has buffered array (FF4, Webkit) + if (target && target.buffered && target.buffered.length > 0 && target.buffered.end && target.duration) { + // TODO: account for a real array with multiple values (only Firefox 4 has this so far) + percent = target.buffered.end(0) / target.duration; + } + // Some browsers (e.g., FF3.6 and Safari 5) cannot calculate target.bufferered.end() + // to be anything other than 0. If the byte count is available we use this instead. + // Browsers that support the else if do not seem to have the bufferedBytes value and + // should skip to there. Tested in Safari 5, Webkit head, FF3.6, Chrome 6, IE 7/8. + else if (target && target.bytesTotal != undefined && target.bytesTotal > 0 && target.bufferedBytes != undefined) { + percent = target.bufferedBytes / target.bytesTotal; + } + // Firefox 3 with an Ogg file seems to go this way + else if (e && e.lengthComputable && e.total != 0) { + percent = e.loaded/e.total; + } + + // finally update the progress bar + if (percent !== null) { + percent = Math.min(1, Math.max(0, percent)); + // update loaded bar + if (t.loaded && t.total) { + t.loaded.width(t.total.width() * percent); + } + } + }, + setCurrentRail: function() { + + var t = this; + + if (t.media.currentTime != undefined && t.media.duration) { + + // update bar and handle + if (t.total && t.handle) { + var + newWidth = Math.round(t.total.width() * t.media.currentTime / t.media.duration), + handlePos = newWidth - Math.round(t.handle.outerWidth(true) / 2); + + t.current.width(newWidth); + t.handle.css('left', handlePos); + } + } + + } + }); +})(mejs.$); + +(function($) { + + // options + $.extend(mejs.MepDefaults, { + duration: -1, + timeAndDurationSeparator: '<span> | </span>' + }); + + + // current and duration 00:00 / 00:00 + $.extend(MediaElementPlayer.prototype, { + buildcurrent: function(player, controls, layers, media) { + var t = this; + + $('<div class="mejs-time">'+ + '<span class="mejs-currenttime">' + (player.options.alwaysShowHours ? '00:' : '') + + (player.options.showTimecodeFrameCount? '00:00:00':'00:00')+ '</span>'+ + '</div>') + .appendTo(controls); + + t.currenttime = t.controls.find('.mejs-currenttime'); + + media.addEventListener('timeupdate',function() { + player.updateCurrent(); + }, false); + }, + + + buildduration: function(player, controls, layers, media) { + var t = this; + + if (controls.children().last().find('.mejs-currenttime').length > 0) { + $(t.options.timeAndDurationSeparator + + '<span class="mejs-duration">' + + (t.options.duration > 0 ? + mejs.Utility.secondsToTimeCode(t.options.duration, t.options.alwaysShowHours || t.media.duration > 3600, t.options.showTimecodeFrameCount, t.options.framesPerSecond || 25) : + ((player.options.alwaysShowHours ? '00:' : '') + (player.options.showTimecodeFrameCount? '00:00:00':'00:00')) + ) + + '</span>') + .appendTo(controls.find('.mejs-time')); + } else { + + // add class to current time + controls.find('.mejs-currenttime').parent().addClass('mejs-currenttime-container'); + + $('<div class="mejs-time mejs-duration-container">'+ + '<span class="mejs-duration">' + + (t.options.duration > 0 ? + mejs.Utility.secondsToTimeCode(t.options.duration, t.options.alwaysShowHours || t.media.duration > 3600, t.options.showTimecodeFrameCount, t.options.framesPerSecond || 25) : + ((player.options.alwaysShowHours ? '00:' : '') + (player.options.showTimecodeFrameCount? '00:00:00':'00:00')) + ) + + '</span>' + + '</div>') + .appendTo(controls); + } + + t.durationD = t.controls.find('.mejs-duration'); + + media.addEventListener('timeupdate',function() { + player.updateDuration(); + }, false); + }, + + updateCurrent: function() { + var t = this; + + if (t.currenttime) { + t.currenttime.html(mejs.Utility.secondsToTimeCode(t.media.currentTime, t.options.alwaysShowHours || t.media.duration > 3600, t.options.showTimecodeFrameCount, t.options.framesPerSecond || 25)); + } + }, + + updateDuration: function() { + var t = this; + + //Toggle the long video class if the video is longer than an hour. + t.container.toggleClass("mejs-long-video", t.media.duration > 3600); + + if (t.durationD && (t.options.duration > 0 || t.media.duration)) { + t.durationD.html(mejs.Utility.secondsToTimeCode(t.options.duration > 0 ? t.options.duration : t.media.duration, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond || 25)); + } + } + }); + +})(mejs.$); + +(function($) { + + $.extend(mejs.MepDefaults, { + muteText: mejs.i18n.t('Mute Toggle'), + hideVolumeOnTouchDevices: true, + + audioVolume: 'horizontal', + videoVolume: 'vertical' + }); + + $.extend(MediaElementPlayer.prototype, { + buildvolume: function(player, controls, layers, media) { + + // Android and iOS don't support volume controls + if ((mejs.MediaFeatures.isAndroid || mejs.MediaFeatures.isiOS) && this.options.hideVolumeOnTouchDevices) + return; + + var t = this, + mode = (t.isVideo) ? t.options.videoVolume : t.options.audioVolume, + mute = (mode == 'horizontal') ? + + // horizontal version + $('<div class="mejs-button mejs-volume-button mejs-mute">'+ + '<button type="button" aria-controls="' + t.id + '" title="' + t.options.muteText + '" aria-label="' + t.options.muteText + '"></button>'+ + '</div>' + + '<div class="mejs-horizontal-volume-slider">'+ // outer background + '<div class="mejs-horizontal-volume-total"></div>'+ // line background + '<div class="mejs-horizontal-volume-current"></div>'+ // current volume + '<div class="mejs-horizontal-volume-handle"></div>'+ // handle + '</div>' + ) + .appendTo(controls) : + + // vertical version + $('<div class="mejs-button mejs-volume-button mejs-mute">'+ + '<button type="button" aria-controls="' + t.id + '" title="' + t.options.muteText + '" aria-label="' + t.options.muteText + '"></button>'+ + '<div class="mejs-volume-slider">'+ // outer background + '<div class="mejs-volume-total"></div>'+ // line background + '<div class="mejs-volume-current"></div>'+ // current volume + '<div class="mejs-volume-handle"></div>'+ // handle + '</div>'+ + '</div>') + .appendTo(controls), + volumeSlider = t.container.find('.mejs-volume-slider, .mejs-horizontal-volume-slider'), + volumeTotal = t.container.find('.mejs-volume-total, .mejs-horizontal-volume-total'), + volumeCurrent = t.container.find('.mejs-volume-current, .mejs-horizontal-volume-current'), + volumeHandle = t.container.find('.mejs-volume-handle, .mejs-horizontal-volume-handle'), + + positionVolumeHandle = function(volume, secondTry) { + + if (!volumeSlider.is(':visible') && typeof secondTry == 'undefined') { + volumeSlider.show(); + positionVolumeHandle(volume, true); + volumeSlider.hide() + return; + } + + // correct to 0-1 + volume = Math.max(0,volume); + volume = Math.min(volume,1); + + // ajust mute button style + if (volume == 0) { + mute.removeClass('mejs-mute').addClass('mejs-unmute'); + } else { + mute.removeClass('mejs-unmute').addClass('mejs-mute'); + } + + // position slider + if (mode == 'vertical') { + var + + // height of the full size volume slider background + totalHeight = volumeTotal.height(), + + // top/left of full size volume slider background + totalPosition = volumeTotal.position(), + + // the new top position based on the current volume + // 70% volume on 100px height == top:30px + newTop = totalHeight - (totalHeight * volume); + + // handle + volumeHandle.css('top', Math.round(totalPosition.top + newTop - (volumeHandle.height() / 2))); + + // show the current visibility + volumeCurrent.height(totalHeight - newTop ); + volumeCurrent.css('top', totalPosition.top + newTop); + } else { + var + + // height of the full size volume slider background + totalWidth = volumeTotal.width(), + + // top/left of full size volume slider background + totalPosition = volumeTotal.position(), + + // the new left position based on the current volume + newLeft = totalWidth * volume; + + // handle + volumeHandle.css('left', Math.round(totalPosition.left + newLeft - (volumeHandle.width() / 2))); + + // rezize the current part of the volume bar + volumeCurrent.width( Math.round(newLeft) ); + } + }, + handleVolumeMove = function(e) { + + var volume = null, + totalOffset = volumeTotal.offset(); + + // calculate the new volume based on the moust position + if (mode == 'vertical') { + + var + railHeight = volumeTotal.height(), + totalTop = parseInt(volumeTotal.css('top').replace(/px/,''),10), + newY = e.pageY - totalOffset.top; + + volume = (railHeight - newY) / railHeight; + + // the controls just hide themselves (usually when mouse moves too far up) + if (totalOffset.top == 0 || totalOffset.left == 0) + return; + + } else { + var + railWidth = volumeTotal.width(), + newX = e.pageX - totalOffset.left; + + volume = newX / railWidth; + } + + // ensure the volume isn't outside 0-1 + volume = Math.max(0,volume); + volume = Math.min(volume,1); + + // position the slider and handle + positionVolumeHandle(volume); + + // set the media object (this will trigger the volumechanged event) + if (volume == 0) { + media.setMuted(true); + } else { + media.setMuted(false); + } + media.setVolume(volume); + }, + mouseIsDown = false, + mouseIsOver = false; + + // SLIDER + + mute + .hover(function() { + volumeSlider.show(); + mouseIsOver = true; + }, function() { + mouseIsOver = false; + + if (!mouseIsDown && mode == 'vertical') { + volumeSlider.hide(); + } + }); + + volumeSlider + .bind('mouseover', function() { + mouseIsOver = true; + }) + .bind('mousedown', function (e) { + handleVolumeMove(e); + t.globalBind('mousemove.vol', function(e) { + handleVolumeMove(e); + }); + t.globalBind('mouseup.vol', function () { + mouseIsDown = false; + t.globalUnbind('.vol'); + + if (!mouseIsOver && mode == 'vertical') { + volumeSlider.hide(); + } + }); + mouseIsDown = true; + + return false; + }); + + + // MUTE button + mute.find('button').click(function() { + media.setMuted( !media.muted ); + }); + + // listen for volume change events from other sources + media.addEventListener('volumechange', function(e) { + if (!mouseIsDown) { + if (media.muted) { + positionVolumeHandle(0); + mute.removeClass('mejs-mute').addClass('mejs-unmute'); + } else { + positionVolumeHandle(media.volume); + mute.removeClass('mejs-unmute').addClass('mejs-mute'); + } + } + }, false); + + if (t.container.is(':visible')) { + // set initial volume + positionVolumeHandle(player.options.startVolume); + + // mutes the media and sets the volume icon muted if the initial volume is set to 0 + if (player.options.startVolume === 0) { + media.setMuted(true); + } + + // shim gets the startvolume as a parameter, but we have to set it on the native <video> and <audio> elements + if (media.pluginType === 'native') { + media.setVolume(player.options.startVolume); + } + } + } + }); + +})(mejs.$); + +(function($) { + + $.extend(mejs.MepDefaults, { + usePluginFullScreen: true, + newWindowCallback: function() { return '';}, + fullscreenText: mejs.i18n.t('Fullscreen') + }); + + $.extend(MediaElementPlayer.prototype, { + + isFullScreen: false, + + isNativeFullScreen: false, + + isInIframe: false, + + buildfullscreen: function(player, controls, layers, media) { + + if (!player.isVideo) + return; + + player.isInIframe = (window.location != window.parent.location); + + // native events + if (mejs.MediaFeatures.hasTrueNativeFullScreen) { + + // chrome doesn't alays fire this in an iframe + var func = function(e) { + if (player.isFullScreen) { + if (mejs.MediaFeatures.isFullScreen()) { + player.isNativeFullScreen = true; + // reset the controls once we are fully in full screen + player.setControlsSize(); + } else { + player.isNativeFullScreen = false; + // when a user presses ESC + // make sure to put the player back into place + player.exitFullScreen(); + } + } + }; + + player.globalBind(mejs.MediaFeatures.fullScreenEventName, func); + } + + var t = this, + normalHeight = 0, + normalWidth = 0, + container = player.container, + fullscreenBtn = + $('<div class="mejs-button mejs-fullscreen-button">' + + '<button type="button" aria-controls="' + t.id + '" title="' + t.options.fullscreenText + '" aria-label="' + t.options.fullscreenText + '"></button>' + + '</div>') + .appendTo(controls); + + if (t.media.pluginType === 'native' || (!t.options.usePluginFullScreen && !mejs.MediaFeatures.isFirefox)) { + + fullscreenBtn.click(function() { + var isFullScreen = (mejs.MediaFeatures.hasTrueNativeFullScreen && mejs.MediaFeatures.isFullScreen()) || player.isFullScreen; + + if (isFullScreen) { + player.exitFullScreen(); + } else { + player.enterFullScreen(); + } + }); + + } else { + + var hideTimeout = null, + supportsPointerEvents = (function() { + // TAKEN FROM MODERNIZR + var element = document.createElement('x'), + documentElement = document.documentElement, + getComputedStyle = window.getComputedStyle, + supports; + if(!('pointerEvents' in element.style)){ + return false; + } + element.style.pointerEvents = 'auto'; + element.style.pointerEvents = 'x'; + documentElement.appendChild(element); + supports = getComputedStyle && + getComputedStyle(element, '').pointerEvents === 'auto'; + documentElement.removeChild(element); + return !!supports; + })(); + + // + + if (supportsPointerEvents && !mejs.MediaFeatures.isOpera) { // opera doesn't allow this :( + + // allows clicking through the fullscreen button and controls down directly to Flash + + /* + When a user puts his mouse over the fullscreen button, the controls are disabled + So we put a div over the video and another one on iether side of the fullscreen button + that caputre mouse movement + and restore the controls once the mouse moves outside of the fullscreen button + */ + + var fullscreenIsDisabled = false, + restoreControls = function() { + if (fullscreenIsDisabled) { + // hide the hovers + for (var i in hoverDivs) { + hoverDivs[i].hide(); + } + + // restore the control bar + fullscreenBtn.css('pointer-events', ''); + t.controls.css('pointer-events', ''); + + // prevent clicks from pausing video + t.media.removeEventListener('click', t.clickToPlayPauseCallback); + + // store for later + fullscreenIsDisabled = false; + } + }, + hoverDivs = {}, + hoverDivNames = ['top', 'left', 'right', 'bottom'], + i, len, + positionHoverDivs = function() { + var fullScreenBtnOffsetLeft = fullscreenBtn.offset().left - t.container.offset().left, + fullScreenBtnOffsetTop = fullscreenBtn.offset().top - t.container.offset().top, + fullScreenBtnWidth = fullscreenBtn.outerWidth(true), + fullScreenBtnHeight = fullscreenBtn.outerHeight(true), + containerWidth = t.container.width(), + containerHeight = t.container.height(); + + for (i in hoverDivs) { + hoverDivs[i].css({position: 'absolute', top: 0, left: 0}); //, backgroundColor: '#f00'}); + } + + // over video, but not controls + hoverDivs['top'] + .width( containerWidth ) + .height( fullScreenBtnOffsetTop ); + + // over controls, but not the fullscreen button + hoverDivs['left'] + .width( fullScreenBtnOffsetLeft ) + .height( fullScreenBtnHeight ) + .css({top: fullScreenBtnOffsetTop}); + + // after the fullscreen button + hoverDivs['right'] + .width( containerWidth - fullScreenBtnOffsetLeft - fullScreenBtnWidth ) + .height( fullScreenBtnHeight ) + .css({top: fullScreenBtnOffsetTop, + left: fullScreenBtnOffsetLeft + fullScreenBtnWidth}); + + // under the fullscreen button + hoverDivs['bottom'] + .width( containerWidth ) + .height( containerHeight - fullScreenBtnHeight - fullScreenBtnOffsetTop ) + .css({top: fullScreenBtnOffsetTop + fullScreenBtnHeight}); + }; + + t.globalBind('resize', function() { + positionHoverDivs(); + }); + + for (i = 0, len = hoverDivNames.length; i < len; i++) { + hoverDivs[hoverDivNames[i]] = $('<div class="mejs-fullscreen-hover" />').appendTo(t.container).mouseover(restoreControls).hide(); + } + + // on hover, kill the fullscreen button's HTML handling, allowing clicks down to Flash + fullscreenBtn.on('mouseover',function() { + + if (!t.isFullScreen) { + + var buttonPos = fullscreenBtn.offset(), + containerPos = player.container.offset(); + + // move the button in Flash into place + media.positionFullscreenButton(buttonPos.left - containerPos.left, buttonPos.top - containerPos.top, false); + + // allows click through + fullscreenBtn.css('pointer-events', 'none'); + t.controls.css('pointer-events', 'none'); + + // restore click-to-play + t.media.addEventListener('click', t.clickToPlayPauseCallback); + + // show the divs that will restore things + for (i in hoverDivs) { + hoverDivs[i].show(); + } + + positionHoverDivs(); + + fullscreenIsDisabled = true; + } + + }); + + // restore controls anytime the user enters or leaves fullscreen + media.addEventListener('fullscreenchange', function(e) { + t.isFullScreen = !t.isFullScreen; + // don't allow plugin click to pause video - messes with + // plugin's controls + if (t.isFullScreen) { + t.media.removeEventListener('click', t.clickToPlayPauseCallback); + } else { + t.media.addEventListener('click', t.clickToPlayPauseCallback); + } + restoreControls(); + }); + + + // the mouseout event doesn't work on the fullscren button, because we already killed the pointer-events + // so we use the document.mousemove event to restore controls when the mouse moves outside the fullscreen button + + t.globalBind('mousemove', function(e) { + + // if the mouse is anywhere but the fullsceen button, then restore it all + if (fullscreenIsDisabled) { + + var fullscreenBtnPos = fullscreenBtn.offset(); + + + if (e.pageY < fullscreenBtnPos.top || e.pageY > fullscreenBtnPos.top + fullscreenBtn.outerHeight(true) || + e.pageX < fullscreenBtnPos.left || e.pageX > fullscreenBtnPos.left + fullscreenBtn.outerWidth(true) + ) { + + fullscreenBtn.css('pointer-events', ''); + t.controls.css('pointer-events', ''); + + fullscreenIsDisabled = false; + } + } + }); + + + + } else { + + // the hover state will show the fullscreen button in Flash to hover up and click + + fullscreenBtn + .on('mouseover', function() { + + if (hideTimeout !== null) { + clearTimeout(hideTimeout); + delete hideTimeout; + } + + var buttonPos = fullscreenBtn.offset(), + containerPos = player.container.offset(); + + media.positionFullscreenButton(buttonPos.left - containerPos.left, buttonPos.top - containerPos.top, true); + + }) + .on('mouseout', function() { + + if (hideTimeout !== null) { + clearTimeout(hideTimeout); + delete hideTimeout; + } + + hideTimeout = setTimeout(function() { + media.hideFullscreenButton(); + }, 1500); + + + }); + } + } + + player.fullscreenBtn = fullscreenBtn; + + t.globalBind('keydown',function (e) { + if (((mejs.MediaFeatures.hasTrueNativeFullScreen && mejs.MediaFeatures.isFullScreen()) || t.isFullScreen) && e.keyCode == 27) { + player.exitFullScreen(); + } + }); + + }, + + cleanfullscreen: function(player) { + player.exitFullScreen(); + }, + + containerSizeTimeout: null, + + enterFullScreen: function() { + + var t = this; + + // firefox+flash can't adjust plugin sizes without resetting :( + if (t.media.pluginType !== 'native' && (mejs.MediaFeatures.isFirefox || t.options.usePluginFullScreen)) { + //t.media.setFullscreen(true); + //player.isFullScreen = true; + return; + } + + // set it to not show scroll bars so 100% will work + $(document.documentElement).addClass('mejs-fullscreen'); + + // store sizing + normalHeight = t.container.height(); + normalWidth = t.container.width(); + + // attempt to do true fullscreen (Safari 5.1 and Firefox Nightly only for now) + if (t.media.pluginType === 'native') { + if (mejs.MediaFeatures.hasTrueNativeFullScreen) { + + mejs.MediaFeatures.requestFullScreen(t.container[0]); + //return; + + if (t.isInIframe) { + // sometimes exiting from fullscreen doesn't work + // notably in Chrome <iframe>. Fixed in version 17 + setTimeout(function checkFullscreen() { + + if (t.isNativeFullScreen) { + var zoomMultiplier = window["devicePixelRatio"] || 1; + // Use a percent error margin since devicePixelRatio is a float and not exact. + var percentErrorMargin = 0.002; // 0.2% + var windowWidth = zoomMultiplier * $(window).width(); + var screenWidth = screen.width; + var absDiff = Math.abs(screenWidth - windowWidth); + var marginError = screenWidth * percentErrorMargin; + + // check if the video is suddenly not really fullscreen + if (absDiff > marginError) { + // manually exit + t.exitFullScreen(); + } else { + // test again + setTimeout(checkFullscreen, 500); + } + } + + + }, 500); + } + + } else if (mejs.MediaFeatures.hasSemiNativeFullScreen) { + t.media.webkitEnterFullscreen(); + return; + } + } + + // check for iframe launch + if (t.isInIframe) { + var url = t.options.newWindowCallback(this); + + + if (url !== '') { + + // launch immediately + if (!mejs.MediaFeatures.hasTrueNativeFullScreen) { + t.pause(); + window.open(url, t.id, 'top=0,left=0,width=' + screen.availWidth + ',height=' + screen.availHeight + ',resizable=yes,scrollbars=no,status=no,toolbar=no'); + return; + } else { + setTimeout(function() { + if (!t.isNativeFullScreen) { + t.pause(); + window.open(url, t.id, 'top=0,left=0,width=' + screen.availWidth + ',height=' + screen.availHeight + ',resizable=yes,scrollbars=no,status=no,toolbar=no'); + } + }, 250); + } + } + + } + + // full window code + + + + // make full size + t.container + .addClass('mejs-container-fullscreen') + .width('100%') + .height('100%'); + //.css({position: 'fixed', left: 0, top: 0, right: 0, bottom: 0, overflow: 'hidden', width: '100%', height: '100%', 'z-index': 1000}); + + // Only needed for safari 5.1 native full screen, can cause display issues elsewhere + // Actually, it seems to be needed for IE8, too + //if (mejs.MediaFeatures.hasTrueNativeFullScreen) { + t.containerSizeTimeout = setTimeout(function() { + t.container.css({width: '100%', height: '100%'}); + t.setControlsSize(); + }, 500); + //} + + if (t.media.pluginType === 'native') { + t.$media + .width('100%') + .height('100%'); + } else { + t.container.find('.mejs-shim') + .width('100%') + .height('100%'); + + //if (!mejs.MediaFeatures.hasTrueNativeFullScreen) { + t.media.setVideoSize($(window).width(),$(window).height()); + //} + } + + t.layers.children('div') + .width('100%') + .height('100%'); + + if (t.fullscreenBtn) { + t.fullscreenBtn + .removeClass('mejs-fullscreen') + .addClass('mejs-unfullscreen'); + } + + t.setControlsSize(); + t.isFullScreen = true; + + t.container.find('.mejs-captions-text').css('font-size', screen.width / t.width * 1.00 * 100 + '%'); + t.container.find('.mejs-captions-position').css('bottom', '45px'); + }, + + exitFullScreen: function() { + + var t = this; + + // Prevent container from attempting to stretch a second time + clearTimeout(t.containerSizeTimeout); + + // firefox can't adjust plugins + if (t.media.pluginType !== 'native' && mejs.MediaFeatures.isFirefox) { + t.media.setFullscreen(false); + //player.isFullScreen = false; + return; + } + + // come outo of native fullscreen + if (mejs.MediaFeatures.hasTrueNativeFullScreen && (mejs.MediaFeatures.isFullScreen() || t.isFullScreen)) { + mejs.MediaFeatures.cancelFullScreen(); + } + + // restore scroll bars to document + $(document.documentElement).removeClass('mejs-fullscreen'); + + t.container + .removeClass('mejs-container-fullscreen') + .width(normalWidth) + .height(normalHeight); + //.css({position: '', left: '', top: '', right: '', bottom: '', overflow: 'inherit', width: normalWidth + 'px', height: normalHeight + 'px', 'z-index': 1}); + + if (t.media.pluginType === 'native') { + t.$media + .width(normalWidth) + .height(normalHeight); + } else { + t.container.find('.mejs-shim') + .width(normalWidth) + .height(normalHeight); + + t.media.setVideoSize(normalWidth, normalHeight); + } + + t.layers.children('div') + .width(normalWidth) + .height(normalHeight); + + t.fullscreenBtn + .removeClass('mejs-unfullscreen') + .addClass('mejs-fullscreen'); + + t.setControlsSize(); + t.isFullScreen = false; + + t.container.find('.mejs-captions-text').css('font-size',''); + t.container.find('.mejs-captions-position').css('bottom', ''); + } + }); + +})(mejs.$); + +(function($) { + + // Speed + $.extend(mejs.MepDefaults, { + + speeds: ['1.50', '1.25', '1.00', '0.75'], + + defaultSpeed: '1.00' + + }); + + $.extend(MediaElementPlayer.prototype, { + + buildspeed: function(player, controls, layers, media) { + var t = this; + + if (t.media.pluginType == 'native') { + var s = '<div class="mejs-button mejs-speed-button"><button type="button">'+t.options.defaultSpeed+'x</button><div class="mejs-speed-selector"><ul>'; + var i, ss; + + if ($.inArray(t.options.defaultSpeed, t.options.speeds) === -1) { + t.options.speeds.push(t.options.defaultSpeed); + } + + t.options.speeds.sort(function(a, b) { + return parseFloat(b) - parseFloat(a); + }); + + for (i = 0; i < t.options.speeds.length; i++) { + s += '<li><input type="radio" name="speed" value="' + t.options.speeds[i] + '" id="' + t.options.speeds[i] + '" '; + if (t.options.speeds[i] == t.options.defaultSpeed) { + s += 'checked=true '; + s += '/><label for="' + t.options.speeds[i] + '" class="mejs-speed-selected">'+ t.options.speeds[i] + 'x</label></li>'; + } else { + s += '/><label for="' + t.options.speeds[i] + '">'+ t.options.speeds[i] + 'x</label></li>'; + } + } + s += '</ul></div></div>'; + + player.speedButton = $(s).appendTo(controls); + + player.playbackspeed = t.options.defaultSpeed; + + player.speedButton + .on('click', 'input[type=radio]', function() { + player.playbackspeed = $(this).attr('value'); + media.playbackRate = parseFloat(player.playbackspeed); + player.speedButton.find('button').text(player.playbackspeed + 'x'); + player.speedButton.find('.mejs-speed-selected').removeClass('mejs-speed-selected'); + player.speedButton.find('input[type=radio]:checked').next().addClass('mejs-speed-selected'); + }); + + ss = player.speedButton.find('.mejs-speed-selector'); + ss.height(this.speedButton.find('.mejs-speed-selector ul').outerHeight(true) + player.speedButton.find('.mejs-speed-translations').outerHeight(true)); + ss.css('top', (-1 * ss.height()) + 'px'); + } + } + }); + +})(mejs.$); + +(function($) { + + // add extra default options + $.extend(mejs.MepDefaults, { + // this will automatically turn on a <track> + startLanguage: '', + + tracksText: mejs.i18n.t('Captions/Subtitles'), + + // option to remove the [cc] button when no <track kind="subtitles"> are present + hideCaptionsButtonWhenEmpty: true, + + // If true and we only have one track, change captions to popup + toggleCaptionsButtonWhenOnlyOne: false, + + // #id or .class + slidesSelector: '' + }); + + $.extend(MediaElementPlayer.prototype, { + + hasChapters: false, + + buildtracks: function(player, controls, layers, media) { + if (player.tracks.length === 0) + return; + + var t = this, + i, + options = ''; + + if (t.domNode.textTracks) { // if browser will do native captions, prefer mejs captions, loop through tracks and hide + for (i = t.domNode.textTracks.length - 1; i >= 0; i--) { + t.domNode.textTracks[i].mode = "hidden"; + } + } + player.chapters = + $('<div class="mejs-chapters mejs-layer"></div>') + .prependTo(layers).hide(); + player.captions = + $('<div class="mejs-captions-layer mejs-layer"><div class="mejs-captions-position mejs-captions-position-hover"><span class="mejs-captions-text"></span></div></div>') + .prependTo(layers).hide(); + player.captionsText = player.captions.find('.mejs-captions-text'); + player.captionsButton = + $('<div class="mejs-button mejs-captions-button">'+ + '<button type="button" aria-controls="' + t.id + '" title="' + t.options.tracksText + '" aria-label="' + t.options.tracksText + '"></button>'+ + '<div class="mejs-captions-selector">'+ + '<ul>'+ + '<li>'+ + '<input type="radio" name="' + player.id + '_captions" id="' + player.id + '_captions_none" value="none" checked="checked" />' + + '<label for="' + player.id + '_captions_none">' + mejs.i18n.t('None') +'</label>'+ + '</li>' + + '</ul>'+ + '</div>'+ + '</div>') + .appendTo(controls); + + + var subtitleCount = 0; + for (i=0; i<player.tracks.length; i++) { + if (player.tracks[i].kind == 'subtitles') { + subtitleCount++; + } + } + + // if only one language then just make the button a toggle + if (t.options.toggleCaptionsButtonWhenOnlyOne && subtitleCount == 1){ + // click + player.captionsButton.on('click',function() { + if (player.selectedTrack === null) { + lang = player.tracks[0].srclang; + } else { + lang = 'none'; + } + player.setTrack(lang); + }); + } else { + // hover or keyboard focus + player.captionsButton.on( 'mouseenter focusin', function() { + $(this).find('.mejs-captions-selector').css('visibility','visible'); + }) + + // handle clicks to the language radio buttons + .on('click','input[type=radio]',function() { + lang = this.value; + player.setTrack(lang); + }); + + player.captionsButton.on( 'mouseleave focusout', function() { + $(this).find(".mejs-captions-selector").css("visibility","hidden"); + }); + + } + + if (!player.options.alwaysShowControls) { + // move with controls + player.container + .bind('controlsshown', function () { + // push captions above controls + player.container.find('.mejs-captions-position').addClass('mejs-captions-position-hover'); + + }) + .bind('controlshidden', function () { + if (!media.paused) { + // move back to normal place + player.container.find('.mejs-captions-position').removeClass('mejs-captions-position-hover'); + } + }); + } else { + player.container.find('.mejs-captions-position').addClass('mejs-captions-position-hover'); + } + + player.trackToLoad = -1; + player.selectedTrack = null; + player.isLoadingTrack = false; + + // add to list + for (i=0; i<player.tracks.length; i++) { + if (player.tracks[i].kind == 'subtitles') { + player.addTrackButton(player.tracks[i].srclang, player.tracks[i].label); + } + } + + // start loading tracks + player.loadNextTrack(); + + media.addEventListener('timeupdate',function(e) { + player.displayCaptions(); + }, false); + + if (player.options.slidesSelector !== '') { + player.slidesContainer = $(player.options.slidesSelector); + + media.addEventListener('timeupdate',function(e) { + player.displaySlides(); + }, false); + + } + + media.addEventListener('loadedmetadata', function(e) { + player.displayChapters(); + }, false); + + player.container.hover( + function () { + // chapters + if (player.hasChapters) { + player.chapters.css('visibility','visible'); + player.chapters.fadeIn(200).height(player.chapters.find('.mejs-chapter').outerHeight()); + } + }, + function () { + if (player.hasChapters && !media.paused) { + player.chapters.fadeOut(200, function() { + $(this).css('visibility','hidden'); + $(this).css('display','block'); + }); + } + }); + + // check for autoplay + if (player.node.getAttribute('autoplay') !== null) { + player.chapters.css('visibility','hidden'); + } + }, + + setTrack: function(lang){ + + var t = this, + i; + + if (lang == 'none') { + t.selectedTrack = null; + t.captionsButton.removeClass('mejs-captions-enabled'); + } else { + for (i=0; i<t.tracks.length; i++) { + if (t.tracks[i].srclang == lang) { + if (t.selectedTrack === null) + t.captionsButton.addClass('mejs-captions-enabled'); + t.selectedTrack = t.tracks[i]; + t.captions.attr('lang', t.selectedTrack.srclang); + t.displayCaptions(); + break; + } + } + } + }, + + loadNextTrack: function() { + var t = this; + + t.trackToLoad++; + if (t.trackToLoad < t.tracks.length) { + t.isLoadingTrack = true; + t.loadTrack(t.trackToLoad); + } else { + // add done? + t.isLoadingTrack = false; + + t.checkForTracks(); + } + }, + + loadTrack: function(index){ + var + t = this, + track = t.tracks[index], + after = function() { + + track.isLoaded = true; + + // create button + //t.addTrackButton(track.srclang); + t.enableTrackButton(track.srclang, track.label); + + t.loadNextTrack(); + + }; + + + $.ajax({ + url: track.src, + dataType: "text", + success: function(d) { + + // parse the loaded file + if (typeof d == "string" && (/<tt\s+xml/ig).exec(d)) { + track.entries = mejs.TrackFormatParser.dfxp.parse(d); + } else { + track.entries = mejs.TrackFormatParser.webvtt.parse(d); + } + + after(); + + if (track.kind == 'chapters') { + t.media.addEventListener('play', function(e) { + if (t.media.duration > 0) { + t.displayChapters(track); + } + }, false); + } + + if (track.kind == 'slides') { + t.setupSlides(track); + } + }, + error: function() { + t.loadNextTrack(); + } + }); + }, + + enableTrackButton: function(lang, label) { + var t = this; + + if (label === '') { + label = mejs.language.codes[lang] || lang; + } + + t.captionsButton + .find('input[value=' + lang + ']') + .prop('disabled',false) + .siblings('label') + .html( label ); + + // auto select + if (t.options.startLanguage == lang) { + $('#' + t.id + '_captions_' + lang).prop('checked', true).trigger('click'); + } + + t.adjustLanguageBox(); + }, + + addTrackButton: function(lang, label) { + var t = this; + if (label === '') { + label = mejs.language.codes[lang] || lang; + } + + t.captionsButton.find('ul').append( + $('<li>'+ + '<input type="radio" name="' + t.id + '_captions" id="' + t.id + '_captions_' + lang + '" value="' + lang + '" disabled="disabled" />' + + '<label for="' + t.id + '_captions_' + lang + '">' + label + ' (loading)' + '</label>'+ + '</li>') + ); + + t.adjustLanguageBox(); + + // remove this from the dropdownlist (if it exists) + t.container.find('.mejs-captions-translations option[value=' + lang + ']').remove(); + }, + + adjustLanguageBox:function() { + var t = this; + // adjust the size of the outer box + t.captionsButton.find('.mejs-captions-selector').height( + t.captionsButton.find('.mejs-captions-selector ul').outerHeight(true) + + t.captionsButton.find('.mejs-captions-translations').outerHeight(true) + ); + }, + + checkForTracks: function() { + var + t = this, + hasSubtitles = false; + + // check if any subtitles + if (t.options.hideCaptionsButtonWhenEmpty) { + for (i=0; i<t.tracks.length; i++) { + if (t.tracks[i].kind == 'subtitles') { + hasSubtitles = true; + break; + } + } + + if (!hasSubtitles) { + t.captionsButton.hide(); + t.setControlsSize(); + } + } + }, + + displayCaptions: function() { + + if (typeof this.tracks == 'undefined') + return; + + var + t = this, + i, + track = t.selectedTrack; + + if (track !== null && track.isLoaded) { + for (i=0; i<track.entries.times.length; i++) { + if (t.media.currentTime >= track.entries.times[i].start && t.media.currentTime <= track.entries.times[i].stop) { + // Set the line before the timecode as a class so the cue can be targeted if needed + t.captionsText.html(track.entries.text[i]).attr('class', 'mejs-captions-text ' + (track.entries.times[i].identifier || '')); + t.captions.show().height(0); + return; // exit out if one is visible; + } + } + t.captions.hide(); + } else { + t.captions.hide(); + } + }, + + setupSlides: function(track) { + var t = this; + + t.slides = track; + t.slides.entries.imgs = [t.slides.entries.text.length]; + t.showSlide(0); + + }, + + showSlide: function(index) { + if (typeof this.tracks == 'undefined' || typeof this.slidesContainer == 'undefined') { + return; + } + + var t = this, + url = t.slides.entries.text[index], + img = t.slides.entries.imgs[index]; + + if (typeof img == 'undefined' || typeof img.fadeIn == 'undefined') { + + t.slides.entries.imgs[index] = img = $('<img src="' + url + '">') + .on('load', function() { + img.appendTo(t.slidesContainer) + .hide() + .fadeIn() + .siblings(':visible') + .fadeOut(); + + }); + + } else { + + if (!img.is(':visible') && !img.is(':animated')) { + + // + + img.fadeIn() + .siblings(':visible') + .fadeOut(); + } + } + + }, + + displaySlides: function() { + + if (typeof this.slides == 'undefined') + return; + + var + t = this, + slides = t.slides, + i; + + for (i=0; i<slides.entries.times.length; i++) { + if (t.media.currentTime >= slides.entries.times[i].start && t.media.currentTime <= slides.entries.times[i].stop){ + + t.showSlide(i); + + return; // exit out if one is visible; + } + } + }, + + displayChapters: function() { + var + t = this, + i; + + for (i=0; i<t.tracks.length; i++) { + if (t.tracks[i].kind == 'chapters' && t.tracks[i].isLoaded) { + t.drawChapters(t.tracks[i]); + t.hasChapters = true; + break; + } + } + }, + + drawChapters: function(chapters) { + var + t = this, + i, + dur, + //width, + //left, + percent = 0, + usedPercent = 0; + + t.chapters.empty(); + + for (i=0; i<chapters.entries.times.length; i++) { + dur = chapters.entries.times[i].stop - chapters.entries.times[i].start; + percent = Math.floor(dur / t.media.duration * 100); + if (percent + usedPercent > 100 || // too large + i == chapters.entries.times.length-1 && percent + usedPercent < 100) // not going to fill it in + { + percent = 100 - usedPercent; + } + //width = Math.floor(t.width * dur / t.media.duration); + //left = Math.floor(t.width * chapters.entries.times[i].start / t.media.duration); + //if (left + width > t.width) { + // width = t.width - left; + //} + + t.chapters.append( $( + '<div class="mejs-chapter" rel="' + chapters.entries.times[i].start + '" style="left: ' + usedPercent.toString() + '%;width: ' + percent.toString() + '%;">' + + '<div class="mejs-chapter-block' + ((i==chapters.entries.times.length-1) ? ' mejs-chapter-block-last' : '') + '">' + + '<span class="ch-title">' + chapters.entries.text[i] + '</span>' + + '<span class="ch-time">' + mejs.Utility.secondsToTimeCode(chapters.entries.times[i].start) + '–' + mejs.Utility.secondsToTimeCode(chapters.entries.times[i].stop) + '</span>' + + '</div>' + + '</div>')); + usedPercent += percent; + } + + t.chapters.find('div.mejs-chapter').click(function() { + t.media.setCurrentTime( parseFloat( $(this).attr('rel') ) ); + if (t.media.paused) { + t.media.play(); + } + }); + + t.chapters.show(); + } + }); + + + + mejs.language = { + codes: { + af:'Afrikaans', + sq:'Albanian', + ar:'Arabic', + be:'Belarusian', + bg:'Bulgarian', + ca:'Catalan', + zh:'Chinese', + 'zh-cn':'Chinese Simplified', + 'zh-tw':'Chinese Traditional', + hr:'Croatian', + cs:'Czech', + da:'Danish', + nl:'Dutch', + en:'English', + et:'Estonian', + fl:'Filipino', + fi:'Finnish', + fr:'French', + gl:'Galician', + de:'German', + el:'Greek', + ht:'Haitian Creole', + iw:'Hebrew', + hi:'Hindi', + hu:'Hungarian', + is:'Icelandic', + id:'Indonesian', + ga:'Irish', + it:'Italian', + ja:'Japanese', + ko:'Korean', + lv:'Latvian', + lt:'Lithuanian', + mk:'Macedonian', + ms:'Malay', + mt:'Maltese', + no:'Norwegian', + fa:'Persian', + pl:'Polish', + pt:'Portuguese', + // 'pt-pt':'Portuguese (Portugal)', + ro:'Romanian', + ru:'Russian', + sr:'Serbian', + sk:'Slovak', + sl:'Slovenian', + es:'Spanish', + sw:'Swahili', + sv:'Swedish', + tl:'Tagalog', + th:'Thai', + tr:'Turkish', + uk:'Ukrainian', + vi:'Vietnamese', + cy:'Welsh', + yi:'Yiddish' + } + }; + + /* + Parses WebVTT format which should be formatted as + ================================ + WEBVTT + + 1 + 00:00:01,1 --> 00:00:05,000 + A line of text + + 2 + 00:01:15,1 --> 00:02:05,000 + A second line of text + + =============================== + + Adapted from: http://www.delphiki.com/html5/playr + */ + mejs.TrackFormatParser = { + webvtt: { + pattern_timecode: /^((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{1,3})?) --\> ((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{3})?)(.*)$/, + + parse: function(trackText) { + var + i = 0, + lines = mejs.TrackFormatParser.split2(trackText, /\r?\n/), + entries = {text:[], times:[]}, + timecode, + text, + identifier; + for(; i<lines.length; i++) { + timecode = this.pattern_timecode.exec(lines[i]); + + if (timecode && i<lines.length) { + if ((i - 1) >= 0 && lines[i - 1] !== '') { + identifier = lines[i - 1]; + } + i++; + // grab all the (possibly multi-line) text that follows + text = lines[i]; + i++; + while(lines[i] !== '' && i<lines.length){ + text = text + '\n' + lines[i]; + i++; + } + text = $.trim(text).replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, "<a href='$1' target='_blank'>$1</a>"); + // Text is in a different array so I can use .join + entries.text.push(text); + entries.times.push( + { + identifier: identifier, + start: (mejs.Utility.convertSMPTEtoSeconds(timecode[1]) === 0) ? 0.200 : mejs.Utility.convertSMPTEtoSeconds(timecode[1]), + stop: mejs.Utility.convertSMPTEtoSeconds(timecode[3]), + settings: timecode[5] + }); + } + identifier = ''; + } + return entries; + } + }, + // Thanks to Justin Capella: https://github.com/johndyer/mediaelement/pull/420 + dfxp: { + parse: function(trackText) { + trackText = $(trackText).filter("tt"); + var + i = 0, + container = trackText.children("div").eq(0), + lines = container.find("p"), + styleNode = trackText.find("#" + container.attr("style")), + styles, + begin, + end, + text, + entries = {text:[], times:[]}; + + + if (styleNode.length) { + var attributes = styleNode.removeAttr("id").get(0).attributes; + if (attributes.length) { + styles = {}; + for (i = 0; i < attributes.length; i++) { + styles[attributes[i].name.split(":")[1]] = attributes[i].value; + } + } + } + + for(i = 0; i<lines.length; i++) { + var style; + var _temp_times = { + start: null, + stop: null, + style: null + }; + if (lines.eq(i).attr("begin")) _temp_times.start = mejs.Utility.convertSMPTEtoSeconds(lines.eq(i).attr("begin")); + if (!_temp_times.start && lines.eq(i-1).attr("end")) _temp_times.start = mejs.Utility.convertSMPTEtoSeconds(lines.eq(i-1).attr("end")); + if (lines.eq(i).attr("end")) _temp_times.stop = mejs.Utility.convertSMPTEtoSeconds(lines.eq(i).attr("end")); + if (!_temp_times.stop && lines.eq(i+1).attr("begin")) _temp_times.stop = mejs.Utility.convertSMPTEtoSeconds(lines.eq(i+1).attr("begin")); + if (styles) { + style = ""; + for (var _style in styles) { + style += _style + ":" + styles[_style] + ";"; + } + } + if (style) _temp_times.style = style; + if (_temp_times.start === 0) _temp_times.start = 0.200; + entries.times.push(_temp_times); + text = $.trim(lines.eq(i).html()).replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, "<a href='$1' target='_blank'>$1</a>"); + entries.text.push(text); + if (entries.times.start === 0) entries.times.start = 2; + } + return entries; + } + }, + split2: function (text, regex) { + // normal version for compliant browsers + // see below for IE fix + return text.split(regex); + } + }; + + // test for browsers with bad String.split method. + if ('x\n\ny'.split(/\n/gi).length != 3) { + // add super slow IE8 and below version + mejs.TrackFormatParser.split2 = function(text, regex) { + var + parts = [], + chunk = '', + i; + + for (i=0; i<text.length; i++) { + chunk += text.substring(i,i+1); + if (regex.test(chunk)) { + parts.push(chunk.replace(regex, '')); + chunk = ''; + } + } + parts.push(chunk); + return parts; + }; + } + +})(mejs.$); + +/* +* ContextMenu Plugin +* +* +*/ + +(function($) { + +$.extend(mejs.MepDefaults, + { 'contextMenuItems': [ + // demo of a fullscreen option + { + render: function(player) { + + // check for fullscreen plugin + if (typeof player.enterFullScreen == 'undefined') + return null; + + if (player.isFullScreen) { + return mejs.i18n.t('Turn off Fullscreen'); + } else { + return mejs.i18n.t('Go Fullscreen'); + } + }, + click: function(player) { + if (player.isFullScreen) { + player.exitFullScreen(); + } else { + player.enterFullScreen(); + } + } + } + , + // demo of a mute/unmute button + { + render: function(player) { + if (player.media.muted) { + return mejs.i18n.t('Unmute'); + } else { + return mejs.i18n.t('Mute'); + } + }, + click: function(player) { + if (player.media.muted) { + player.setMuted(false); + } else { + player.setMuted(true); + } + } + }, + // separator + { + isSeparator: true + } + , + // demo of simple download video + { + render: function(player) { + return mejs.i18n.t('Download Video'); + }, + click: function(player) { + window.location.href = player.media.currentSrc; + } + } + ]} +); + + + $.extend(MediaElementPlayer.prototype, { + buildcontextmenu: function(player, controls, layers, media) { + + // create context menu + player.contextMenu = $('<div class="mejs-contextmenu"></div>') + .appendTo($('body')) + .hide(); + + // create events for showing context menu + player.container.bind('contextmenu', function(e) { + if (player.isContextMenuEnabled) { + e.preventDefault(); + player.renderContextMenu(e.clientX-1, e.clientY-1); + return false; + } + }); + player.container.bind('click', function() { + player.contextMenu.hide(); + }); + player.contextMenu.bind('mouseleave', function() { + + // + player.startContextMenuTimer(); + + }); + }, + + cleancontextmenu: function(player) { + player.contextMenu.remove(); + }, + + isContextMenuEnabled: true, + enableContextMenu: function() { + this.isContextMenuEnabled = true; + }, + disableContextMenu: function() { + this.isContextMenuEnabled = false; + }, + + contextMenuTimeout: null, + startContextMenuTimer: function() { + // + + var t = this; + + t.killContextMenuTimer(); + + t.contextMenuTimer = setTimeout(function() { + t.hideContextMenu(); + t.killContextMenuTimer(); + }, 750); + }, + killContextMenuTimer: function() { + var timer = this.contextMenuTimer; + + // + + if (timer != null) { + clearTimeout(timer); + delete timer; + timer = null; + } + }, + + hideContextMenu: function() { + this.contextMenu.hide(); + }, + + renderContextMenu: function(x,y) { + + // alway re-render the items so that things like "turn fullscreen on" and "turn fullscreen off" are always written correctly + var t = this, + html = '', + items = t.options.contextMenuItems; + + for (var i=0, il=items.length; i<il; i++) { + + if (items[i].isSeparator) { + html += '<div class="mejs-contextmenu-separator"></div>'; + } else { + + var rendered = items[i].render(t); + + // render can return null if the item doesn't need to be used at the moment + if (rendered != null) { + html += '<div class="mejs-contextmenu-item" data-itemindex="' + i + '" id="element-' + (Math.random()*1000000) + '">' + rendered + '</div>'; + } + } + } + + // position and show the context menu + t.contextMenu + .empty() + .append($(html)) + .css({top:y, left:x}) + .show(); + + // bind events + t.contextMenu.find('.mejs-contextmenu-item').each(function() { + + // which one is this? + var $dom = $(this), + itemIndex = parseInt( $dom.data('itemindex'), 10 ), + item = t.options.contextMenuItems[itemIndex]; + + // bind extra functionality? + if (typeof item.show != 'undefined') + item.show( $dom , t); + + // bind click action + $dom.click(function() { + // perform click action + if (typeof item.click != 'undefined') + item.click(t); + + // close + t.contextMenu.hide(); + }); + }); + + // stop the controls from hiding + setTimeout(function() { + t.killControlsTimer('rev3'); + }, 100); + + } + }); + +})(mejs.$); +/** + * Postroll plugin + */ +(function($) { + + $.extend(mejs.MepDefaults, { + postrollCloseText: mejs.i18n.t('Close') + }); + + // Postroll + $.extend(MediaElementPlayer.prototype, { + buildpostroll: function(player, controls, layers, media) { + var + t = this, + postrollLink = t.container.find('link[rel="postroll"]').attr('href'); + + if (typeof postrollLink !== 'undefined') { + player.postroll = + $('<div class="mejs-postroll-layer mejs-layer"><a class="mejs-postroll-close" onclick="$(this).parent().hide();return false;">' + t.options.postrollCloseText + '</a><div class="mejs-postroll-layer-content"></div></div>').prependTo(layers).hide(); + + t.media.addEventListener('ended', function (e) { + $.ajax({ + dataType: 'html', + url: postrollLink, + success: function (data, textStatus) { + layers.find('.mejs-postroll-layer-content').html(data); + } + }); + player.postroll.show(); + }, false); + } + } + }); + +})(mejs.$); + diff --git a/lib/mejs/mediaelement-and-player.min.js b/lib/mejs/mediaelement-and-player.min.js new file mode 100755 index 00000000..f8a16c4c --- /dev/null +++ b/lib/mejs/mediaelement-and-player.min.js @@ -0,0 +1,183 @@ +/*! +* MediaElement.js +* HTML5 <video> and <audio> shim and player +* http://mediaelementjs.com/ +* +* Creates a JavaScript object that mimics HTML5 MediaElement API +* for browsers that don't understand HTML5 or can't play the provided codec +* Can play MP4 (H.264), Ogg, WebM, FLV, WMV, WMA, ACC, and MP3 +* +* Copyright 2010-2014, John Dyer (http://j.hn) +* License: MIT +* +*/var mejs=mejs||{};mejs.version="2.15.1";mejs.meIndex=0; +mejs.plugins={silverlight:[{version:[3,0],types:["video/mp4","video/m4v","video/mov","video/wmv","audio/wma","audio/m4a","audio/mp3","audio/wav","audio/mpeg"]}],flash:[{version:[9,0,124],types:["video/mp4","video/m4v","video/mov","video/flv","video/rtmp","video/x-flv","audio/flv","audio/x-flv","audio/mp3","audio/m4a","audio/mpeg","video/youtube","video/x-youtube","application/x-mpegURL"]}],youtube:[{version:null,types:["video/youtube","video/x-youtube","audio/youtube","audio/x-youtube"]}],vimeo:[{version:null, +types:["video/vimeo","video/x-vimeo"]}]}; +mejs.Utility={encodeUrl:function(a){return encodeURIComponent(a)},escapeHTML:function(a){return a.toString().split("&").join("&").split("<").join("<").split('"').join(""")},absolutizeUrl:function(a){var b=document.createElement("div");b.innerHTML='<a href="'+this.escapeHTML(a)+'">x</a>';return b.firstChild.href},getScriptPath:function(a){for(var b=0,c,d="",e="",g,f,i=document.getElementsByTagName("script"),k=i.length,h=a.length;b<k;b++){g=i[b].src;c=g.lastIndexOf("/");if(c>-1){f=g.substring(c+ +1);g=g.substring(0,c+1)}else{f=g;g=""}for(c=0;c<h;c++){e=a[c];e=f.indexOf(e);if(e>-1){d=g;break}}if(d!=="")break}return d},secondsToTimeCode:function(a,b,c,d){if(typeof c=="undefined")c=false;else if(typeof d=="undefined")d=25;var e=Math.floor(a/3600)%24,g=Math.floor(a/60)%60,f=Math.floor(a%60);a=Math.floor((a%1*d).toFixed(3));return(b||e>0?(e<10?"0"+e:e)+":":"")+(g<10?"0"+g:g)+":"+(f<10?"0"+f:f)+(c?":"+(a<10?"0"+a:a):"")},timeCodeToSeconds:function(a,b,c,d){if(typeof c=="undefined")c=false;else if(typeof d== +"undefined")d=25;a=a.split(":");b=parseInt(a[0],10);var e=parseInt(a[1],10),g=parseInt(a[2],10),f=0,i=0;if(c)f=parseInt(a[3])/d;return i=b*3600+e*60+g+f},convertSMPTEtoSeconds:function(a){if(typeof a!="string")return false;a=a.replace(",",".");var b=0,c=a.indexOf(".")!=-1?a.split(".")[1].length:0,d=1;a=a.split(":").reverse();for(var e=0;e<a.length;e++){d=1;if(e>0)d=Math.pow(60,e);b+=Number(a[e])*d}return Number(b.toFixed(c))},removeSwf:function(a){var b=document.getElementById(a);if(b&&/object|embed/i.test(b.nodeName))if(mejs.MediaFeatures.isIE){b.style.display= +"none";(function(){b.readyState==4?mejs.Utility.removeObjectInIE(a):setTimeout(arguments.callee,10)})()}else b.parentNode.removeChild(b)},removeObjectInIE:function(a){if(a=document.getElementById(a)){for(var b in a)if(typeof a[b]=="function")a[b]=null;a.parentNode.removeChild(a)}}}; +mejs.PluginDetector={hasPluginVersion:function(a,b){var c=this.plugins[a];b[1]=b[1]||0;b[2]=b[2]||0;return c[0]>b[0]||c[0]==b[0]&&c[1]>b[1]||c[0]==b[0]&&c[1]==b[1]&&c[2]>=b[2]?true:false},nav:window.navigator,ua:window.navigator.userAgent.toLowerCase(),plugins:[],addPlugin:function(a,b,c,d,e){this.plugins[a]=this.detectPlugin(b,c,d,e)},detectPlugin:function(a,b,c,d){var e=[0,0,0],g;if(typeof this.nav.plugins!="undefined"&&typeof this.nav.plugins[a]=="object"){if((c=this.nav.plugins[a].description)&& +!(typeof this.nav.mimeTypes!="undefined"&&this.nav.mimeTypes[b]&&!this.nav.mimeTypes[b].enabledPlugin)){e=c.replace(a,"").replace(/^\s+/,"").replace(/\sr/gi,".").split(".");for(a=0;a<e.length;a++)e[a]=parseInt(e[a].match(/\d+/),10)}}else if(typeof window.ActiveXObject!="undefined")try{if(g=new ActiveXObject(c))e=d(g)}catch(f){}return e}}; +mejs.PluginDetector.addPlugin("flash","Shockwave Flash","application/x-shockwave-flash","ShockwaveFlash.ShockwaveFlash",function(a){var b=[];if(a=a.GetVariable("$version")){a=a.split(" ")[1].split(",");b=[parseInt(a[0],10),parseInt(a[1],10),parseInt(a[2],10)]}return b}); +mejs.PluginDetector.addPlugin("silverlight","Silverlight Plug-In","application/x-silverlight-2","AgControl.AgControl",function(a){var b=[0,0,0,0],c=function(d,e,g,f){for(;d.isVersionSupported(e[0]+"."+e[1]+"."+e[2]+"."+e[3]);)e[g]+=f;e[g]-=f};c(a,b,0,1);c(a,b,1,1);c(a,b,2,1E4);c(a,b,2,1E3);c(a,b,2,100);c(a,b,2,10);c(a,b,2,1);c(a,b,3,1);return b}); +mejs.MediaFeatures={init:function(){var a=this,b=document,c=mejs.PluginDetector.nav,d=mejs.PluginDetector.ua.toLowerCase(),e,g=["source","track","audio","video"];a.isiPad=d.match(/ipad/i)!==null;a.isiPhone=d.match(/iphone/i)!==null;a.isiOS=a.isiPhone||a.isiPad;a.isAndroid=d.match(/android/i)!==null;a.isBustedAndroid=d.match(/android 2\.[12]/)!==null;a.isBustedNativeHTTPS=location.protocol==="https:"&&(d.match(/android [12]\./)!==null||d.match(/macintosh.* version.* safari/)!==null);a.isIE=c.appName.toLowerCase().indexOf("microsoft")!= +-1||c.appName.toLowerCase().match(/trident/gi)!==null;a.isChrome=d.match(/chrome/gi)!==null;a.isChromium=d.match(/chromium/gi)!==null;a.isFirefox=d.match(/firefox/gi)!==null;a.isWebkit=d.match(/webkit/gi)!==null;a.isGecko=d.match(/gecko/gi)!==null&&!a.isWebkit&&!a.isIE;a.isOpera=d.match(/opera/gi)!==null;a.hasTouch="ontouchstart"in window;a.svg=!!document.createElementNS&&!!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect;for(c=0;c<g.length;c++)e=document.createElement(g[c]); +a.supportsMediaTag=typeof e.canPlayType!=="undefined"||a.isBustedAndroid;try{e.canPlayType("video/mp4")}catch(f){a.supportsMediaTag=false}a.hasSemiNativeFullScreen=typeof e.webkitEnterFullscreen!=="undefined";a.hasNativeFullscreen=typeof e.requestFullscreen!=="undefined";a.hasWebkitNativeFullScreen=typeof e.webkitRequestFullScreen!=="undefined";a.hasMozNativeFullScreen=typeof e.mozRequestFullScreen!=="undefined";a.hasMsNativeFullScreen=typeof e.msRequestFullscreen!=="undefined";a.hasTrueNativeFullScreen= +a.hasWebkitNativeFullScreen||a.hasMozNativeFullScreen||a.hasMsNativeFullScreen;a.nativeFullScreenEnabled=a.hasTrueNativeFullScreen;if(a.hasMozNativeFullScreen)a.nativeFullScreenEnabled=document.mozFullScreenEnabled;else if(a.hasMsNativeFullScreen)a.nativeFullScreenEnabled=document.msFullscreenEnabled;if(a.isChrome)a.hasSemiNativeFullScreen=false;if(a.hasTrueNativeFullScreen){a.fullScreenEventName="";if(a.hasWebkitNativeFullScreen)a.fullScreenEventName="webkitfullscreenchange";else if(a.hasMozNativeFullScreen)a.fullScreenEventName= +"mozfullscreenchange";else if(a.hasMsNativeFullScreen)a.fullScreenEventName="MSFullscreenChange";a.isFullScreen=function(){if(a.hasMozNativeFullScreen)return b.mozFullScreen;else if(a.hasWebkitNativeFullScreen)return b.webkitIsFullScreen;else if(a.hasMsNativeFullScreen)return b.msFullscreenElement!==null};a.requestFullScreen=function(i){if(a.hasWebkitNativeFullScreen)i.webkitRequestFullScreen();else if(a.hasMozNativeFullScreen)i.mozRequestFullScreen();else a.hasMsNativeFullScreen&&i.msRequestFullscreen()}; +a.cancelFullScreen=function(){if(a.hasWebkitNativeFullScreen)document.webkitCancelFullScreen();else if(a.hasMozNativeFullScreen)document.mozCancelFullScreen();else a.hasMsNativeFullScreen&&document.msExitFullscreen()}}if(a.hasSemiNativeFullScreen&&d.match(/mac os x 10_5/i)){a.hasNativeFullScreen=false;a.hasSemiNativeFullScreen=false}}};mejs.MediaFeatures.init(); +mejs.HtmlMediaElement={pluginType:"native",isFullScreen:false,setCurrentTime:function(a){this.currentTime=a},setMuted:function(a){this.muted=a},setVolume:function(a){this.volume=a},stop:function(){this.pause()},setSrc:function(a){for(var b=this.getElementsByTagName("source");b.length>0;)this.removeChild(b[0]);if(typeof a=="string")this.src=a;else{var c;for(b=0;b<a.length;b++){c=a[b];if(this.canPlayType(c.type)){this.src=c.src;break}}}},setVideoSize:function(a,b){this.width=a;this.height=b}}; +mejs.PluginMediaElement=function(a,b,c){this.id=a;this.pluginType=b;this.src=c;this.events={};this.attributes={}}; +mejs.PluginMediaElement.prototype={pluginElement:null,pluginType:"",isFullScreen:false,playbackRate:-1,defaultPlaybackRate:-1,seekable:[],played:[],paused:true,ended:false,seeking:false,duration:0,error:null,tagName:"",muted:false,volume:1,currentTime:0,play:function(){if(this.pluginApi!=null){this.pluginType=="youtube"||this.pluginType=="vimeo"?this.pluginApi.playVideo():this.pluginApi.playMedia();this.paused=false}},load:function(){if(this.pluginApi!=null){this.pluginType=="youtube"||this.pluginType== +"vimeo"||this.pluginApi.loadMedia();this.paused=false}},pause:function(){if(this.pluginApi!=null){this.pluginType=="youtube"||this.pluginType=="vimeo"?this.pluginApi.pauseVideo():this.pluginApi.pauseMedia();this.paused=true}},stop:function(){if(this.pluginApi!=null){this.pluginType=="youtube"||this.pluginType=="vimeo"?this.pluginApi.stopVideo():this.pluginApi.stopMedia();this.paused=true}},canPlayType:function(a){var b,c,d,e=mejs.plugins[this.pluginType];for(b=0;b<e.length;b++){d=e[b];if(mejs.PluginDetector.hasPluginVersion(this.pluginType, +d.version))for(c=0;c<d.types.length;c++)if(a==d.types[c])return"probably"}return""},positionFullscreenButton:function(a,b,c){this.pluginApi!=null&&this.pluginApi.positionFullscreenButton&&this.pluginApi.positionFullscreenButton(Math.floor(a),Math.floor(b),c)},hideFullscreenButton:function(){this.pluginApi!=null&&this.pluginApi.hideFullscreenButton&&this.pluginApi.hideFullscreenButton()},setSrc:function(a){if(typeof a=="string"){this.pluginApi.setSrc(mejs.Utility.absolutizeUrl(a));this.src=mejs.Utility.absolutizeUrl(a)}else{var b, +c;for(b=0;b<a.length;b++){c=a[b];if(this.canPlayType(c.type)){this.pluginApi.setSrc(mejs.Utility.absolutizeUrl(c.src));this.src=mejs.Utility.absolutizeUrl(a);break}}}},setCurrentTime:function(a){if(this.pluginApi!=null){this.pluginType=="youtube"||this.pluginType=="vimeo"?this.pluginApi.seekTo(a):this.pluginApi.setCurrentTime(a);this.currentTime=a}},setVolume:function(a){if(this.pluginApi!=null){this.pluginType=="youtube"?this.pluginApi.setVolume(a*100):this.pluginApi.setVolume(a);this.volume=a}}, +setMuted:function(a){if(this.pluginApi!=null){if(this.pluginType=="youtube"){a?this.pluginApi.mute():this.pluginApi.unMute();this.muted=a;this.dispatchEvent("volumechange")}else this.pluginApi.setMuted(a);this.muted=a}},setVideoSize:function(a,b){if(this.pluginElement&&this.pluginElement.style){this.pluginElement.style.width=a+"px";this.pluginElement.style.height=b+"px"}this.pluginApi!=null&&this.pluginApi.setVideoSize&&this.pluginApi.setVideoSize(a,b)},setFullscreen:function(a){this.pluginApi!=null&& +this.pluginApi.setFullscreen&&this.pluginApi.setFullscreen(a)},enterFullScreen:function(){this.pluginApi!=null&&this.pluginApi.setFullscreen&&this.setFullscreen(true)},exitFullScreen:function(){this.pluginApi!=null&&this.pluginApi.setFullscreen&&this.setFullscreen(false)},addEventListener:function(a,b){this.events[a]=this.events[a]||[];this.events[a].push(b)},removeEventListener:function(a,b){if(!a){this.events={};return true}var c=this.events[a];if(!c)return true;if(!b){this.events[a]=[];return true}for(var d= +0;d<c.length;d++)if(c[d]===b){this.events[a].splice(d,1);return true}return false},dispatchEvent:function(a){var b,c,d=this.events[a];if(d){c=Array.prototype.slice.call(arguments,1);for(b=0;b<d.length;b++)d[b].apply(null,c)}},hasAttribute:function(a){return a in this.attributes},removeAttribute:function(a){delete this.attributes[a]},getAttribute:function(a){if(this.hasAttribute(a))return this.attributes[a];return""},setAttribute:function(a,b){this.attributes[a]=b},remove:function(){mejs.Utility.removeSwf(this.pluginElement.id); +mejs.MediaPluginBridge.unregisterPluginElement(this.pluginElement.id)}}; +mejs.MediaPluginBridge={pluginMediaElements:{},htmlMediaElements:{},registerPluginElement:function(a,b,c){this.pluginMediaElements[a]=b;this.htmlMediaElements[a]=c},unregisterPluginElement:function(a){delete this.pluginMediaElements[a];delete this.htmlMediaElements[a]},initPlugin:function(a){var b=this.pluginMediaElements[a],c=this.htmlMediaElements[a];if(b){switch(b.pluginType){case "flash":b.pluginElement=b.pluginApi=document.getElementById(a);break;case "silverlight":b.pluginElement=document.getElementById(b.id); +b.pluginApi=b.pluginElement.Content.MediaElementJS}b.pluginApi!=null&&b.success&&b.success(b,c)}},fireEvent:function(a,b,c){var d,e;if(a=this.pluginMediaElements[a]){b={type:b,target:a};for(d in c){a[d]=c[d];b[d]=c[d]}e=c.bufferedTime||0;b.target.buffered=b.buffered={start:function(){return 0},end:function(){return e},length:1};a.dispatchEvent(b.type,b)}}}; +mejs.MediaElementDefaults={mode:"auto",plugins:["flash","silverlight","youtube","vimeo"],enablePluginDebug:false,httpsBasicAuthSite:false,type:"",pluginPath:mejs.Utility.getScriptPath(["mediaelement.js","mediaelement.min.js","mediaelement-and-player.js","mediaelement-and-player.min.js"]),flashName:"flashmediaelement.swf",flashStreamer:"",enablePluginSmoothing:false,enablePseudoStreaming:false,pseudoStreamingStartQueryParam:"start",silverlightName:"silverlightmediaelement.xap",defaultVideoWidth:480, +defaultVideoHeight:270,pluginWidth:-1,pluginHeight:-1,pluginVars:[],timerRate:250,startVolume:0.8,success:function(){},error:function(){}};mejs.MediaElement=function(a,b){return mejs.HtmlMediaElementShim.create(a,b)}; +mejs.HtmlMediaElementShim={create:function(a,b){var c=mejs.MediaElementDefaults,d=typeof a=="string"?document.getElementById(a):a,e=d.tagName.toLowerCase(),g=e==="audio"||e==="video",f=g?d.getAttribute("src"):d.getAttribute("href");e=d.getAttribute("poster");var i=d.getAttribute("autoplay"),k=d.getAttribute("preload"),h=d.getAttribute("controls"),j;for(j in b)c[j]=b[j];f=typeof f=="undefined"||f===null||f==""?null:f;e=typeof e=="undefined"||e===null?"":e;k=typeof k=="undefined"||k===null||k==="false"? +"none":k;i=!(typeof i=="undefined"||i===null||i==="false");h=!(typeof h=="undefined"||h===null||h==="false");j=this.determinePlayback(d,c,mejs.MediaFeatures.supportsMediaTag,g,f);j.url=j.url!==null?mejs.Utility.absolutizeUrl(j.url):"";if(j.method=="native"){if(mejs.MediaFeatures.isBustedAndroid){d.src=j.url;d.addEventListener("click",function(){d.play()},false)}return this.updateNative(j,c,i,k)}else if(j.method!=="")return this.createPlugin(j,c,e,i,k,h);else{this.createErrorMessage(j,c,e);return this}}, +determinePlayback:function(a,b,c,d,e){var g=[],f,i,k,h={method:"",url:"",htmlMediaElement:a,isVideo:a.tagName.toLowerCase()!="audio"},j;if(typeof b.type!="undefined"&&b.type!=="")if(typeof b.type=="string")g.push({type:b.type,url:e});else for(f=0;f<b.type.length;f++)g.push({type:b.type[f],url:e});else if(e!==null){k=this.formatType(e,a.getAttribute("type"));g.push({type:k,url:e})}else for(f=0;f<a.childNodes.length;f++){i=a.childNodes[f];if(i.nodeType==1&&i.tagName.toLowerCase()=="source"){e=i.getAttribute("src"); +k=this.formatType(e,i.getAttribute("type"));i=i.getAttribute("media");if(!i||!window.matchMedia||window.matchMedia&&window.matchMedia(i).matches)g.push({type:k,url:e})}}if(!d&&g.length>0&&g[0].url!==null&&this.getTypeFromFile(g[0].url).indexOf("audio")>-1)h.isVideo=false;if(mejs.MediaFeatures.isBustedAndroid)a.canPlayType=function(m){return m.match(/video\/(mp4|m4v)/gi)!==null?"maybe":""};if(mejs.MediaFeatures.isChromium)a.canPlayType=function(m){return m.match(/video\/(webm|ogv|ogg)/gi)!==null?"maybe": +""};if(c&&(b.mode==="auto"||b.mode==="auto_plugin"||b.mode==="native")&&!(mejs.MediaFeatures.isBustedNativeHTTPS&&b.httpsBasicAuthSite===true)){if(!d){f=document.createElement(h.isVideo?"video":"audio");a.parentNode.insertBefore(f,a);a.style.display="none";h.htmlMediaElement=a=f}for(f=0;f<g.length;f++)if(g[f].type=="video/m3u8"||a.canPlayType(g[f].type).replace(/no/,"")!==""||a.canPlayType(g[f].type.replace(/mp3/,"mpeg")).replace(/no/,"")!==""||a.canPlayType(g[f].type.replace(/m4a/,"mp4")).replace(/no/, +"")!==""){h.method="native";h.url=g[f].url;break}if(h.method==="native"){if(h.url!==null)a.src=h.url;if(b.mode!=="auto_plugin")return h}}if(b.mode==="auto"||b.mode==="auto_plugin"||b.mode==="shim")for(f=0;f<g.length;f++){k=g[f].type;for(a=0;a<b.plugins.length;a++){e=b.plugins[a];i=mejs.plugins[e];for(c=0;c<i.length;c++){j=i[c];if(j.version==null||mejs.PluginDetector.hasPluginVersion(e,j.version))for(d=0;d<j.types.length;d++)if(k==j.types[d]){h.method=e;h.url=g[f].url;return h}}}}if(b.mode==="auto_plugin"&& +h.method==="native")return h;if(h.method===""&&g.length>0)h.url=g[0].url;return h},formatType:function(a,b){return a&&!b?this.getTypeFromFile(a):b&&~b.indexOf(";")?b.substr(0,b.indexOf(";")):b},getTypeFromFile:function(a){a=a.split("?")[0];a=a.substring(a.lastIndexOf(".")+1).toLowerCase();return(/(mp4|m4v|ogg|ogv|m3u8|webm|webmv|flv|wmv|mpeg|mov)/gi.test(a)?"video":"audio")+"/"+this.getTypeFromExtension(a)},getTypeFromExtension:function(a){switch(a){case "mp4":case "m4v":case "m4a":return"mp4";case "webm":case "webma":case "webmv":return"webm"; +case "ogg":case "oga":case "ogv":return"ogg";default:return a}},createErrorMessage:function(a,b,c){var d=a.htmlMediaElement,e=document.createElement("div");e.className="me-cannotplay";try{e.style.width=d.width+"px";e.style.height=d.height+"px"}catch(g){}e.innerHTML=b.customError?b.customError:c!==""?'<a href="'+a.url+'"><img src="'+c+'" width="100%" height="100%" /></a>':'<a href="'+a.url+'"><span>'+mejs.i18n.t("Download File")+"</span></a>";d.parentNode.insertBefore(e,d);d.style.display="none";b.error(d)}, +createPlugin:function(a,b,c,d,e,g){c=a.htmlMediaElement;var f=1,i=1,k="me_"+a.method+"_"+mejs.meIndex++,h=new mejs.PluginMediaElement(k,a.method,a.url),j=document.createElement("div"),m;h.tagName=c.tagName;for(m=0;m<c.attributes.length;m++){var q=c.attributes[m];q.specified==true&&h.setAttribute(q.name,q.value)}for(m=c.parentNode;m!==null&&m.tagName.toLowerCase()!=="body"&&m.parentNode!=null;){if(m.parentNode.tagName.toLowerCase()==="p"){m.parentNode.parentNode.insertBefore(m,m.parentNode);break}m= +m.parentNode}if(a.isVideo){f=b.pluginWidth>0?b.pluginWidth:b.videoWidth>0?b.videoWidth:c.getAttribute("width")!==null?c.getAttribute("width"):b.defaultVideoWidth;i=b.pluginHeight>0?b.pluginHeight:b.videoHeight>0?b.videoHeight:c.getAttribute("height")!==null?c.getAttribute("height"):b.defaultVideoHeight;f=mejs.Utility.encodeUrl(f);i=mejs.Utility.encodeUrl(i)}else if(b.enablePluginDebug){f=320;i=240}h.success=b.success;mejs.MediaPluginBridge.registerPluginElement(k,h,c);j.className="me-plugin";j.id= +k+"_container";a.isVideo?c.parentNode.insertBefore(j,c):document.body.insertBefore(j,document.body.childNodes[0]);d=["id="+k,"isvideo="+(a.isVideo?"true":"false"),"autoplay="+(d?"true":"false"),"preload="+e,"width="+f,"startvolume="+b.startVolume,"timerrate="+b.timerRate,"flashstreamer="+b.flashStreamer,"height="+i,"pseudostreamstart="+b.pseudoStreamingStartQueryParam];if(a.url!==null)a.method=="flash"?d.push("file="+mejs.Utility.encodeUrl(a.url)):d.push("file="+a.url);b.enablePluginDebug&&d.push("debug=true"); +b.enablePluginSmoothing&&d.push("smoothing=true");b.enablePseudoStreaming&&d.push("pseudostreaming=true");g&&d.push("controls=true");if(b.pluginVars)d=d.concat(b.pluginVars);switch(a.method){case "silverlight":j.innerHTML='<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" id="'+k+'" name="'+k+'" width="'+f+'" height="'+i+'" class="mejs-shim"><param name="initParams" value="'+d.join(",")+'" /><param name="windowless" value="true" /><param name="background" value="black" /><param name="minRuntimeVersion" value="3.0.0.0" /><param name="autoUpgrade" value="true" /><param name="source" value="'+ +b.pluginPath+b.silverlightName+'" /></object>';break;case "flash":if(mejs.MediaFeatures.isIE){a=document.createElement("div");j.appendChild(a);a.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" id="'+k+'" width="'+f+'" height="'+i+'" class="mejs-shim"><param name="movie" value="'+b.pluginPath+b.flashName+"?x="+new Date+'" /><param name="flashvars" value="'+d.join("&")+'" /><param name="quality" value="high" /><param name="bgcolor" value="#000000" /><param name="wmode" value="transparent" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="scale" value="default" /></object>'}else j.innerHTML= +'<embed id="'+k+'" name="'+k+'" play="true" loop="false" quality="high" bgcolor="#000000" wmode="transparent" allowScriptAccess="always" allowFullScreen="true" type="application/x-shockwave-flash" pluginspage="//www.macromedia.com/go/getflashplayer" src="'+b.pluginPath+b.flashName+'" flashvars="'+d.join("&")+'" width="'+f+'" height="'+i+'" scale="default"class="mejs-shim"></embed>';break;case "youtube":if(a.url.lastIndexOf("youtu.be")!=-1){a=a.url.substr(a.url.lastIndexOf("/")+1);if(a.indexOf("?")!= +-1)a=a.substr(0,a.indexOf("?"))}else a=a.url.substr(a.url.lastIndexOf("=")+1);youtubeSettings={container:j,containerId:j.id,pluginMediaElement:h,pluginId:k,videoId:a,height:i,width:f};mejs.PluginDetector.hasPluginVersion("flash",[10,0,0])?mejs.YouTubeApi.createFlash(youtubeSettings):mejs.YouTubeApi.enqueueIframe(youtubeSettings);break;case "vimeo":b=k+"_player";h.vimeoid=a.url.substr(a.url.lastIndexOf("/")+1);j.innerHTML='<iframe src="//player.vimeo.com/video/'+h.vimeoid+"?api=1&portrait=0&byline=0&title=0&player_id="+ +b+'" width="'+f+'" height="'+i+'" frameborder="0" class="mejs-shim" id="'+b+'"></iframe>';if(typeof $f=="function"){var l=$f(j.childNodes[0]);l.addEvent("ready",function(){function o(n,p,r,s){n={type:r,target:p};if(r=="timeupdate"){p.currentTime=n.currentTime=s.seconds;p.duration=n.duration=s.duration}p.dispatchEvent(n.type,n)}$.extend(l,{playVideo:function(){l.api("play")},stopVideo:function(){l.api("unload")},pauseVideo:function(){l.api("pause")},seekTo:function(n){l.api("seekTo",n)},setVolume:function(n){l.api("setVolume", +n)},setMuted:function(n){if(n){l.lastVolume=l.api("getVolume");l.api("setVolume",0)}else{l.api("setVolume",l.lastVolume);delete l.lastVolume}}});l.addEvent("play",function(){o(l,h,"play");o(l,h,"playing")});l.addEvent("pause",function(){o(l,h,"pause")});l.addEvent("finish",function(){o(l,h,"ended")});l.addEvent("playProgress",function(n){o(l,h,"timeupdate",n)});h.pluginElement=j;h.pluginApi=l;mejs.MediaPluginBridge.initPlugin(k)})}else console.warn("You need to include froogaloop for vimeo to work")}c.style.display= +"none";c.removeAttribute("autoplay");return h},updateNative:function(a,b){var c=a.htmlMediaElement,d;for(d in mejs.HtmlMediaElement)c[d]=mejs.HtmlMediaElement[d];b.success(c,c);return c}}; +mejs.YouTubeApi={isIframeStarted:false,isIframeLoaded:false,loadIframeApi:function(){if(!this.isIframeStarted){var a=document.createElement("script");a.src="//www.youtube.com/player_api";var b=document.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b);this.isIframeStarted=true}},iframeQueue:[],enqueueIframe:function(a){if(this.isLoaded)this.createIframe(a);else{this.loadIframeApi();this.iframeQueue.push(a)}},createIframe:function(a){var b=a.pluginMediaElement,c=new YT.Player(a.containerId, +{height:a.height,width:a.width,videoId:a.videoId,playerVars:{controls:0},events:{onReady:function(){a.pluginMediaElement.pluginApi=c;mejs.MediaPluginBridge.initPlugin(a.pluginId);setInterval(function(){mejs.YouTubeApi.createEvent(c,b,"timeupdate")},250)},onStateChange:function(d){mejs.YouTubeApi.handleStateChange(d.data,c,b)}}})},createEvent:function(a,b,c){c={type:c,target:b};if(a&&a.getDuration){b.currentTime=c.currentTime=a.getCurrentTime();b.duration=c.duration=a.getDuration();c.paused=b.paused; +c.ended=b.ended;c.muted=a.isMuted();c.volume=a.getVolume()/100;c.bytesTotal=a.getVideoBytesTotal();c.bufferedBytes=a.getVideoBytesLoaded();var d=c.bufferedBytes/c.bytesTotal*c.duration;c.target.buffered=c.buffered={start:function(){return 0},end:function(){return d},length:1}}b.dispatchEvent(c.type,c)},iFrameReady:function(){for(this.isIframeLoaded=this.isLoaded=true;this.iframeQueue.length>0;)this.createIframe(this.iframeQueue.pop())},flashPlayers:{},createFlash:function(a){this.flashPlayers[a.pluginId]= +a;var b,c="//www.youtube.com/apiplayer?enablejsapi=1&playerapiid="+a.pluginId+"&version=3&autoplay=0&controls=0&modestbranding=1&loop=0";if(mejs.MediaFeatures.isIE){b=document.createElement("div");a.container.appendChild(b);b.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" id="'+a.pluginId+'" width="'+a.width+'" height="'+a.height+'" class="mejs-shim"><param name="movie" value="'+ +c+'" /><param name="wmode" value="transparent" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /></object>'}else a.container.innerHTML='<object type="application/x-shockwave-flash" id="'+a.pluginId+'" data="'+c+'" width="'+a.width+'" height="'+a.height+'" style="visibility: visible; " class="mejs-shim"><param name="allowScriptAccess" value="always"><param name="wmode" value="transparent"></object>'},flashReady:function(a){var b=this.flashPlayers[a],c= +document.getElementById(a),d=b.pluginMediaElement;d.pluginApi=d.pluginElement=c;mejs.MediaPluginBridge.initPlugin(a);c.cueVideoById(b.videoId);a=b.containerId+"_callback";window[a]=function(e){mejs.YouTubeApi.handleStateChange(e,c,d)};c.addEventListener("onStateChange",a);setInterval(function(){mejs.YouTubeApi.createEvent(c,d,"timeupdate")},250);mejs.YouTubeApi.createEvent(c,d,"canplay")},handleStateChange:function(a,b,c){switch(a){case -1:c.paused=true;c.ended=true;mejs.YouTubeApi.createEvent(b, +c,"loadedmetadata");break;case 0:c.paused=false;c.ended=true;mejs.YouTubeApi.createEvent(b,c,"ended");break;case 1:c.paused=false;c.ended=false;mejs.YouTubeApi.createEvent(b,c,"play");mejs.YouTubeApi.createEvent(b,c,"playing");break;case 2:c.paused=true;c.ended=false;mejs.YouTubeApi.createEvent(b,c,"pause");break;case 3:mejs.YouTubeApi.createEvent(b,c,"progress")}}};function onYouTubePlayerAPIReady(){mejs.YouTubeApi.iFrameReady()}function onYouTubePlayerReady(a){mejs.YouTubeApi.flashReady(a)} +window.mejs=mejs;window.MediaElement=mejs.MediaElement; +(function(a,b){var c={locale:{language:"",strings:{}},methods:{}};c.getLanguage=function(){return(c.locale.language||window.navigator.userLanguage||window.navigator.language).substr(0,2).toLowerCase()};if(typeof mejsL10n!="undefined")c.locale.language=mejsL10n.language;c.methods.checkPlain=function(d){var e,g,f={"&":"&",'"':""","<":"<",">":">"};d=String(d);for(e in f)if(f.hasOwnProperty(e)){g=RegExp(e,"g");d=d.replace(g,f[e])}return d};c.methods.t=function(d,e){if(c.locale.strings&& +c.locale.strings[e.context]&&c.locale.strings[e.context][d])d=c.locale.strings[e.context][d];return c.methods.checkPlain(d)};c.t=function(d,e){if(typeof d==="string"&&d.length>0){var g=c.getLanguage();e=e||{context:g};return c.methods.t(d,e)}else throw{name:"InvalidArgumentException",message:"First argument is either not a string or empty."};};b.i18n=c})(document,mejs);(function(a){if(typeof mejsL10n!="undefined")a[mejsL10n.language]=mejsL10n.strings})(mejs.i18n.locale.strings); +(function(a){if(typeof a.de==="undefined")a.de={Fullscreen:"Vollbild","Go Fullscreen":"Vollbild an","Turn off Fullscreen":"Vollbild aus",Close:"Schlie\u00dfen"}})(mejs.i18n.locale.strings);(function(a){if(typeof a.zh==="undefined")a.zh={Fullscreen:"\u5168\u87a2\u5e55","Go Fullscreen":"\u5168\u5c4f\u6a21\u5f0f","Turn off Fullscreen":"\u9000\u51fa\u5168\u5c4f\u6a21\u5f0f",Close:"\u95dc\u9589"}})(mejs.i18n.locale.strings); + +/*! + * MediaElementPlayer + * http://mediaelementjs.com/ + * + * Creates a controller bar for HTML5 <video> add <audio> tags + * using jQuery and MediaElement.js (HTML5 Flash/Silverlight wrapper) + * + * Copyright 2010-2013, John Dyer (http://j.hn/) + * License: MIT + * + */if(typeof jQuery!="undefined")mejs.$=jQuery;else if(typeof ender!="undefined")mejs.$=ender; +(function(f){mejs.MepDefaults={poster:"",showPosterWhenEnded:false,defaultVideoWidth:480,defaultVideoHeight:270,videoWidth:-1,videoHeight:-1,defaultAudioWidth:400,defaultAudioHeight:30,defaultSeekBackwardInterval:function(a){return a.duration*0.05},defaultSeekForwardInterval:function(a){return a.duration*0.05},setDimensions:true,audioWidth:-1,audioHeight:-1,startVolume:0.8,loop:false,autoRewind:true,enableAutosize:true,alwaysShowHours:false,showTimecodeFrameCount:false,framesPerSecond:25,autosizeProgress:true, +alwaysShowControls:false,hideVideoControlsOnLoad:false,clickToPlayPause:true,iPadUseNativeControls:false,iPhoneUseNativeControls:false,AndroidUseNativeControls:false,features:["playpause","current","progress","duration","tracks","volume","fullscreen"],isVideo:true,enableKeyboard:true,pauseOtherPlayers:true,keyActions:[{keys:[32,179],action:function(a,b){b.paused||b.ended?a.play():a.pause()}},{keys:[38],action:function(a,b){a.container.find(".mejs-volume-slider").css("display","block");if(a.isVideo){a.showControls(); +a.startControlsTimer()}b.setVolume(Math.min(b.volume+0.1,1))}},{keys:[40],action:function(a,b){a.container.find(".mejs-volume-slider").css("display","block");if(a.isVideo){a.showControls();a.startControlsTimer()}b.setVolume(Math.max(b.volume-0.1,0))}},{keys:[37,227],action:function(a,b){if(!isNaN(b.duration)&&b.duration>0){if(a.isVideo){a.showControls();a.startControlsTimer()}var c=Math.max(b.currentTime-a.options.defaultSeekBackwardInterval(b),0);b.setCurrentTime(c)}}},{keys:[39,228],action:function(a, +b){if(!isNaN(b.duration)&&b.duration>0){if(a.isVideo){a.showControls();a.startControlsTimer()}var c=Math.min(b.currentTime+a.options.defaultSeekForwardInterval(b),b.duration);b.setCurrentTime(c)}}},{keys:[70],action:function(a){if(typeof a.enterFullScreen!="undefined")a.isFullScreen?a.exitFullScreen():a.enterFullScreen()}},{keys:[77],action:function(a){a.container.find(".mejs-volume-slider").css("display","block");if(a.isVideo){a.showControls();a.startControlsTimer()}a.media.muted?a.setMuted(false): +a.setMuted(true)}}]};mejs.mepIndex=0;mejs.players={};mejs.MediaElementPlayer=function(a,b){if(!(this instanceof mejs.MediaElementPlayer))return new mejs.MediaElementPlayer(a,b);this.$media=this.$node=f(a);this.node=this.media=this.$media[0];if(typeof this.node.player!="undefined")return this.node.player;else this.node.player=this;if(typeof b=="undefined")b=this.$node.data("mejsoptions");this.options=f.extend({},mejs.MepDefaults,b);this.id="mep_"+mejs.mepIndex++;mejs.players[this.id]=this;this.init(); +return this};mejs.MediaElementPlayer.prototype={hasFocus:false,controlsAreVisible:true,init:function(){var a=this,b=mejs.MediaFeatures,c=f.extend(true,{},a.options,{success:function(d,g){a.meReady(d,g)},error:function(d){a.handleError(d)}}),e=a.media.tagName.toLowerCase();a.isDynamic=e!=="audio"&&e!=="video";a.isVideo=a.isDynamic?a.options.isVideo:e!=="audio"&&a.options.isVideo;if(b.isiPad&&a.options.iPadUseNativeControls||b.isiPhone&&a.options.iPhoneUseNativeControls){a.$media.attr("controls","controls"); +b.isiPad&&a.media.getAttribute("autoplay")!==null&&a.play()}else if(!(b.isAndroid&&a.options.AndroidUseNativeControls)){a.$media.removeAttr("controls");a.container=f('<div id="'+a.id+'" class="mejs-container '+(mejs.MediaFeatures.svg?"svg":"no-svg")+'"><div class="mejs-inner"><div class="mejs-mediaelement"></div><div class="mejs-layers"></div><div class="mejs-controls"></div><div class="mejs-clear"></div></div></div>').addClass(a.$media[0].className).insertBefore(a.$media);a.container.addClass((b.isAndroid? +"mejs-android ":"")+(b.isiOS?"mejs-ios ":"")+(b.isiPad?"mejs-ipad ":"")+(b.isiPhone?"mejs-iphone ":"")+(a.isVideo?"mejs-video ":"mejs-audio "));if(b.isiOS){b=a.$media.clone();a.container.find(".mejs-mediaelement").append(b);a.$media.remove();a.$node=a.$media=b;a.node=a.media=b[0]}else a.container.find(".mejs-mediaelement").append(a.$media);a.controls=a.container.find(".mejs-controls");a.layers=a.container.find(".mejs-layers");b=a.isVideo?"video":"audio";e=b.substring(0,1).toUpperCase()+b.substring(1); +a.width=a.options[b+"Width"]>0||a.options[b+"Width"].toString().indexOf("%")>-1?a.options[b+"Width"]:a.media.style.width!==""&&a.media.style.width!==null?a.media.style.width:a.media.getAttribute("width")!==null?a.$media.attr("width"):a.options["default"+e+"Width"];a.height=a.options[b+"Height"]>0||a.options[b+"Height"].toString().indexOf("%")>-1?a.options[b+"Height"]:a.media.style.height!==""&&a.media.style.height!==null?a.media.style.height:a.$media[0].getAttribute("height")!==null?a.$media.attr("height"): +a.options["default"+e+"Height"];a.setPlayerSize(a.width,a.height);c.pluginWidth=a.width;c.pluginHeight=a.height}mejs.MediaElement(a.$media[0],c);typeof a.container!="undefined"&&a.controlsAreVisible&&a.container.trigger("controlsshown")},showControls:function(a){var b=this;a=typeof a=="undefined"||a;if(!b.controlsAreVisible){if(a){b.controls.css("visibility","visible").stop(true,true).fadeIn(200,function(){b.controlsAreVisible=true;b.container.trigger("controlsshown")});b.container.find(".mejs-control").css("visibility", +"visible").stop(true,true).fadeIn(200,function(){b.controlsAreVisible=true})}else{b.controls.css("visibility","visible").css("display","block");b.container.find(".mejs-control").css("visibility","visible").css("display","block");b.controlsAreVisible=true;b.container.trigger("controlsshown")}b.setControlsSize()}},hideControls:function(a){var b=this;a=typeof a=="undefined"||a;if(!(!b.controlsAreVisible||b.options.alwaysShowControls))if(a){b.controls.stop(true,true).fadeOut(200,function(){f(this).css("visibility", +"hidden").css("display","block");b.controlsAreVisible=false;b.container.trigger("controlshidden")});b.container.find(".mejs-control").stop(true,true).fadeOut(200,function(){f(this).css("visibility","hidden").css("display","block")})}else{b.controls.css("visibility","hidden").css("display","block");b.container.find(".mejs-control").css("visibility","hidden").css("display","block");b.controlsAreVisible=false;b.container.trigger("controlshidden")}},controlsTimer:null,startControlsTimer:function(a){var b= +this;a=typeof a!="undefined"?a:1500;b.killControlsTimer("start");b.controlsTimer=setTimeout(function(){b.hideControls();b.killControlsTimer("hide")},a)},killControlsTimer:function(){if(this.controlsTimer!==null){clearTimeout(this.controlsTimer);delete this.controlsTimer;this.controlsTimer=null}},controlsEnabled:true,disableControls:function(){this.killControlsTimer();this.hideControls(false);this.controlsEnabled=false},enableControls:function(){this.showControls(false);this.controlsEnabled=true}, +meReady:function(a,b){var c=this,e=mejs.MediaFeatures,d=b.getAttribute("autoplay");d=!(typeof d=="undefined"||d===null||d==="false");var g;if(!c.created){c.created=true;c.media=a;c.domNode=b;if(!(e.isAndroid&&c.options.AndroidUseNativeControls)&&!(e.isiPad&&c.options.iPadUseNativeControls)&&!(e.isiPhone&&c.options.iPhoneUseNativeControls)){c.buildposter(c,c.controls,c.layers,c.media);c.buildkeyboard(c,c.controls,c.layers,c.media);c.buildoverlays(c,c.controls,c.layers,c.media);c.findTracks();for(g in c.options.features){e= +c.options.features[g];if(c["build"+e])try{c["build"+e](c,c.controls,c.layers,c.media)}catch(k){}}c.container.trigger("controlsready");c.setPlayerSize(c.width,c.height);c.setControlsSize();if(c.isVideo){if(mejs.MediaFeatures.hasTouch)c.$media.bind("touchstart",function(){if(c.controlsAreVisible)c.hideControls(false);else c.controlsEnabled&&c.showControls(false)});else{c.clickToPlayPauseCallback=function(){if(c.options.clickToPlayPause)c.media.paused?c.play():c.pause()};c.media.addEventListener("click", +c.clickToPlayPauseCallback,false);c.container.bind("mouseenter mouseover",function(){if(c.controlsEnabled)if(!c.options.alwaysShowControls){c.killControlsTimer("enter");c.showControls();c.startControlsTimer(2500)}}).bind("mousemove",function(){if(c.controlsEnabled){c.controlsAreVisible||c.showControls();c.options.alwaysShowControls||c.startControlsTimer(2500)}}).bind("mouseleave",function(){c.controlsEnabled&&!c.media.paused&&!c.options.alwaysShowControls&&c.startControlsTimer(1E3)})}c.options.hideVideoControlsOnLoad&& +c.hideControls(false);d&&!c.options.alwaysShowControls&&c.hideControls();c.options.enableAutosize&&c.media.addEventListener("loadedmetadata",function(j){if(c.options.videoHeight<=0&&c.domNode.getAttribute("height")===null&&!isNaN(j.target.videoHeight)){c.setPlayerSize(j.target.videoWidth,j.target.videoHeight);c.setControlsSize();c.media.setVideoSize(j.target.videoWidth,j.target.videoHeight)}},false)}a.addEventListener("play",function(){for(var j in mejs.players){var m=mejs.players[j];m.id!=c.id&& +c.options.pauseOtherPlayers&&!m.paused&&!m.ended&&m.pause();m.hasFocus=false}c.hasFocus=true},false);c.media.addEventListener("ended",function(){if(c.options.autoRewind)try{c.media.setCurrentTime(0)}catch(j){}c.media.pause();c.setProgressRail&&c.setProgressRail();c.setCurrentRail&&c.setCurrentRail();if(c.options.loop)c.play();else!c.options.alwaysShowControls&&c.controlsEnabled&&c.showControls()},false);c.media.addEventListener("loadedmetadata",function(){c.updateDuration&&c.updateDuration();c.updateCurrent&& +c.updateCurrent();if(!c.isFullScreen){c.setPlayerSize(c.width,c.height);c.setControlsSize()}},false);setTimeout(function(){c.setPlayerSize(c.width,c.height);c.setControlsSize()},50);c.globalBind("resize",function(){c.isFullScreen||mejs.MediaFeatures.hasTrueNativeFullScreen&&document.webkitIsFullScreen||c.setPlayerSize(c.width,c.height);c.setControlsSize()});c.media.pluginType=="youtube"&&c.options.autoplay&&c.container.find(".mejs-overlay-play").hide()}d&&a.pluginType=="native"&&c.play();if(c.options.success)typeof c.options.success== +"string"?window[c.options.success](c.media,c.domNode,c):c.options.success(c.media,c.domNode,c)}},handleError:function(a){this.controls.hide();this.options.error&&this.options.error(a)},setPlayerSize:function(a,b){if(!this.options.setDimensions)return false;if(typeof a!="undefined")this.width=a;if(typeof b!="undefined")this.height=b;if(this.height.toString().indexOf("%")>0||this.$node.css("max-width")==="100%"||this.$node[0].currentStyle&&this.$node[0].currentStyle.maxWidth==="100%"){var c=this.isVideo? +this.media.videoWidth&&this.media.videoWidth>0?this.media.videoWidth:this.media.getAttribute("width")!==null?this.media.getAttribute("width"):this.options.defaultVideoWidth:this.options.defaultAudioWidth,e=this.isVideo?this.media.videoHeight&&this.media.videoHeight>0?this.media.videoHeight:this.media.getAttribute("height")!==null?this.media.getAttribute("height"):this.options.defaultVideoHeight:this.options.defaultAudioHeight,d=this.container.parent().closest(":visible").width(),g=this.container.parent().closest(":visible").height(); +c=this.isVideo||!this.options.autosizeProgress?parseInt(d*e/c,10):e;if(isNaN(c)||g!=0&&c>g)c=g;if(this.container.parent()[0].tagName.toLowerCase()==="body"){d=f(window).width();c=f(window).height()}if(c!=0&&d!=0){this.container.width(d).height(c);this.$media.add(this.container.find(".mejs-shim")).width("100%").height("100%");this.isVideo&&this.media.setVideoSize&&this.media.setVideoSize(d,c);this.layers.children(".mejs-layer").width("100%").height("100%")}}else{this.container.width(this.width).height(this.height); +this.layers.children(".mejs-layer").width(this.width).height(this.height)}d=this.layers.find(".mejs-overlay-play");g=d.find(".mejs-overlay-button");d.height(this.container.height()-this.controls.height());g.css("margin-top","-"+(g.height()/2-this.controls.height()/2).toString()+"px")},setControlsSize:function(){var a=0,b=0,c=this.controls.find(".mejs-time-rail"),e=this.controls.find(".mejs-time-total");this.controls.find(".mejs-time-current");this.controls.find(".mejs-time-loaded");var d=c.siblings(), +g=d.last(),k=null;if(!(!this.container.is(":visible")||!c.length||!c.is(":visible"))){if(this.options&&!this.options.autosizeProgress)b=parseInt(c.css("width"));if(b===0||!b){d.each(function(){var j=f(this);if(j.css("position")!="absolute"&&j.is(":visible"))a+=f(this).outerWidth(true)});b=this.controls.width()-a-(c.outerWidth(true)-c.width())}do{c.width(b);e.width(b-(e.outerWidth(true)-e.width()));if(g.css("position")!="absolute"){k=g.position();b--}}while(k!=null&&k.top>0&&b>0);this.setProgressRail&& +this.setProgressRail();this.setCurrentRail&&this.setCurrentRail()}},buildposter:function(a,b,c,e){var d=f('<div class="mejs-poster mejs-layer"></div>').appendTo(c);b=a.$media.attr("poster");if(a.options.poster!=="")b=a.options.poster;b!==""&&b!=null?this.setPoster(b):d.hide();e.addEventListener("play",function(){d.hide()},false);a.options.showPosterWhenEnded&&a.options.autoRewind&&e.addEventListener("ended",function(){d.show()},false)},setPoster:function(a){var b=this.container.find(".mejs-poster"), +c=b.find("img");if(c.length==0)c=f('<img width="100%" height="100%" />').appendTo(b);c.attr("src",a);b.css({"background-image":"url("+a+")"})},buildoverlays:function(a,b,c,e){var d=this;if(a.isVideo){var g=f('<div class="mejs-overlay mejs-layer"><div class="mejs-overlay-loading"><span></span></div></div>').hide().appendTo(c),k=f('<div class="mejs-overlay mejs-layer"><div class="mejs-overlay-error"></div></div>').hide().appendTo(c),j=f('<div class="mejs-overlay mejs-layer mejs-overlay-play"><div class="mejs-overlay-button"></div></div>').appendTo(c).bind("click", +function(){d.options.clickToPlayPause&&e.paused&&e.play()});e.addEventListener("play",function(){j.hide();g.hide();b.find(".mejs-time-buffering").hide();k.hide()},false);e.addEventListener("playing",function(){j.hide();g.hide();b.find(".mejs-time-buffering").hide();k.hide()},false);e.addEventListener("seeking",function(){g.show();b.find(".mejs-time-buffering").show()},false);e.addEventListener("seeked",function(){g.hide();b.find(".mejs-time-buffering").hide()},false);e.addEventListener("pause",function(){mejs.MediaFeatures.isiPhone|| +j.show()},false);e.addEventListener("waiting",function(){g.show();b.find(".mejs-time-buffering").show()},false);e.addEventListener("loadeddata",function(){g.show();b.find(".mejs-time-buffering").show()},false);e.addEventListener("canplay",function(){g.hide();b.find(".mejs-time-buffering").hide()},false);e.addEventListener("error",function(){g.hide();b.find(".mejs-time-buffering").hide();k.show();k.find("mejs-overlay-error").html("Error loading this resource")},false);e.addEventListener("keydown", +function(m){d.onkeydown(a,e,m)},false)}},buildkeyboard:function(a,b,c,e){var d=this;d.globalBind("keydown",function(g){return d.onkeydown(a,e,g)});d.globalBind("click",function(g){a.hasFocus=f(g.target).closest(".mejs-container").length!=0})},onkeydown:function(a,b,c){if(a.hasFocus&&a.options.enableKeyboard)for(var e=0,d=a.options.keyActions.length;e<d;e++)for(var g=a.options.keyActions[e],k=0,j=g.keys.length;k<j;k++)if(c.keyCode==g.keys[k]){typeof c.preventDefault=="function"&&c.preventDefault(); +g.action(a,b,c.keyCode);return false}return true},findTracks:function(){var a=this,b=a.$media.find("track");a.tracks=[];b.each(function(c,e){e=f(e);a.tracks.push({srclang:e.attr("srclang")?e.attr("srclang").toLowerCase():"",src:e.attr("src"),kind:e.attr("kind"),label:e.attr("label")||"",entries:[],isLoaded:false})})},changeSkin:function(a){this.container[0].className="mejs-container "+a;this.setPlayerSize(this.width,this.height);this.setControlsSize()},play:function(){this.load();this.media.play()}, +pause:function(){try{this.media.pause()}catch(a){}},load:function(){this.isLoaded||this.media.load();this.isLoaded=true},setMuted:function(a){this.media.setMuted(a)},setCurrentTime:function(a){this.media.setCurrentTime(a)},getCurrentTime:function(){return this.media.currentTime},setVolume:function(a){this.media.setVolume(a)},getVolume:function(){return this.media.volume},setSrc:function(a){this.media.setSrc(a)},remove:function(){var a,b;for(a in this.options.features){b=this.options.features[a];if(this["clean"+ +b])try{this["clean"+b](this)}catch(c){}}if(this.isDynamic)this.$node.insertBefore(this.container);else{this.$media.prop("controls",true);this.$node.clone().insertBefore(this.container).show();this.$node.remove()}this.media.pluginType!=="native"&&this.media.remove();delete mejs.players[this.id];typeof this.container=="object"&&this.container.remove();this.globalUnbind();delete this.node.player}};(function(){function a(c,e){var d={d:[],w:[]};f.each((c||"").split(" "),function(g,k){var j=k+"."+e;if(j.indexOf(".")=== +0){d.d.push(j);d.w.push(j)}else d[b.test(k)?"w":"d"].push(j)});d.d=d.d.join(" ");d.w=d.w.join(" ");return d}var b=/^((after|before)print|(before)?unload|hashchange|message|o(ff|n)line|page(hide|show)|popstate|resize|storage)\b/;mejs.MediaElementPlayer.prototype.globalBind=function(c,e,d){c=a(c,this.id);c.d&&f(document).bind(c.d,e,d);c.w&&f(window).bind(c.w,e,d)};mejs.MediaElementPlayer.prototype.globalUnbind=function(c,e){c=a(c,this.id);c.d&&f(document).unbind(c.d,e);c.w&&f(window).unbind(c.w,e)}})(); +if(typeof f!="undefined"){f.fn.mediaelementplayer=function(a){a===false?this.each(function(){var b=f(this).data("mediaelementplayer");b&&b.remove();f(this).removeData("mediaelementplayer")}):this.each(function(){f(this).data("mediaelementplayer",new mejs.MediaElementPlayer(this,a))});return this};f(document).ready(function(){f(".mejs-player").mediaelementplayer()})}window.MediaElementPlayer=mejs.MediaElementPlayer})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{playpauseText:mejs.i18n.t("Play/Pause")});f.extend(MediaElementPlayer.prototype,{buildplaypause:function(a,b,c,e){var d=f('<div class="mejs-button mejs-playpause-button mejs-play" ><button type="button" aria-controls="'+this.id+'" title="'+this.options.playpauseText+'" aria-label="'+this.options.playpauseText+'"></button></div>').appendTo(b).click(function(g){g.preventDefault();e.paused?e.play():e.pause();return false});e.addEventListener("play",function(){d.removeClass("mejs-play").addClass("mejs-pause")}, +false);e.addEventListener("playing",function(){d.removeClass("mejs-play").addClass("mejs-pause")},false);e.addEventListener("pause",function(){d.removeClass("mejs-pause").addClass("mejs-play")},false);e.addEventListener("paused",function(){d.removeClass("mejs-pause").addClass("mejs-play")},false)}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{stopText:"Stop"});f.extend(MediaElementPlayer.prototype,{buildstop:function(a,b,c,e){f('<div class="mejs-button mejs-stop-button mejs-stop"><button type="button" aria-controls="'+this.id+'" title="'+this.options.stopText+'" aria-label="'+this.options.stopText+'"></button></div>').appendTo(b).click(function(){e.paused||e.pause();if(e.currentTime>0){e.setCurrentTime(0);e.pause();b.find(".mejs-time-current").width("0px");b.find(".mejs-time-handle").css("left", +"0px");b.find(".mejs-time-float-current").html(mejs.Utility.secondsToTimeCode(0));b.find(".mejs-currenttime").html(mejs.Utility.secondsToTimeCode(0));c.find(".mejs-poster").show()}})}})})(mejs.$); +(function(f){f.extend(MediaElementPlayer.prototype,{buildprogress:function(a,b,c,e){f('<div class="mejs-time-rail"><span class="mejs-time-total"><span class="mejs-time-buffering"></span><span class="mejs-time-loaded"></span><span class="mejs-time-current"></span><span class="mejs-time-handle"></span><span class="mejs-time-float"><span class="mejs-time-float-current">00:00</span><span class="mejs-time-float-corner"></span></span></span></div>').appendTo(b);b.find(".mejs-time-buffering").hide();var d= +this,g=b.find(".mejs-time-total");c=b.find(".mejs-time-loaded");var k=b.find(".mejs-time-current"),j=b.find(".mejs-time-handle"),m=b.find(".mejs-time-float"),q=b.find(".mejs-time-float-current"),p=function(h){h=h.originalEvent.changedTouches?h.originalEvent.changedTouches[0].pageX:h.pageX;var l=g.offset(),r=g.outerWidth(true),n=0,o=n=0;if(e.duration){if(h<l.left)h=l.left;else if(h>r+l.left)h=r+l.left;o=h-l.left;n=o/r;n=n<=0.02?0:n*e.duration;t&&n!==e.currentTime&&e.setCurrentTime(n);if(!mejs.MediaFeatures.hasTouch){m.css("left", +o);q.html(mejs.Utility.secondsToTimeCode(n));m.show()}}},t=false;g.bind("mousedown touchstart",function(h){if(h.which===1||h.which===0){t=true;p(h);d.globalBind("mousemove.dur touchmove.dur",function(l){p(l)});d.globalBind("mouseup.dur touchend.dur",function(){t=false;m.hide();d.globalUnbind(".dur")});return false}}).bind("mouseenter",function(){d.globalBind("mousemove.dur",function(h){p(h)});mejs.MediaFeatures.hasTouch||m.show()}).bind("mouseleave",function(){if(!t){d.globalUnbind(".dur");m.hide()}}); +e.addEventListener("progress",function(h){a.setProgressRail(h);a.setCurrentRail(h)},false);e.addEventListener("timeupdate",function(h){a.setProgressRail(h);a.setCurrentRail(h)},false);d.loaded=c;d.total=g;d.current=k;d.handle=j},setProgressRail:function(a){var b=a!=undefined?a.target:this.media,c=null;if(b&&b.buffered&&b.buffered.length>0&&b.buffered.end&&b.duration)c=b.buffered.end(0)/b.duration;else if(b&&b.bytesTotal!=undefined&&b.bytesTotal>0&&b.bufferedBytes!=undefined)c=b.bufferedBytes/b.bytesTotal; +else if(a&&a.lengthComputable&&a.total!=0)c=a.loaded/a.total;if(c!==null){c=Math.min(1,Math.max(0,c));this.loaded&&this.total&&this.loaded.width(this.total.width()*c)}},setCurrentRail:function(){if(this.media.currentTime!=undefined&&this.media.duration)if(this.total&&this.handle){var a=Math.round(this.total.width()*this.media.currentTime/this.media.duration),b=a-Math.round(this.handle.outerWidth(true)/2);this.current.width(a);this.handle.css("left",b)}}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{duration:-1,timeAndDurationSeparator:"<span> | </span>"});f.extend(MediaElementPlayer.prototype,{buildcurrent:function(a,b,c,e){f('<div class="mejs-time"><span class="mejs-currenttime">'+(a.options.alwaysShowHours?"00:":"")+(a.options.showTimecodeFrameCount?"00:00:00":"00:00")+"</span></div>").appendTo(b);this.currenttime=this.controls.find(".mejs-currenttime");e.addEventListener("timeupdate",function(){a.updateCurrent()},false)},buildduration:function(a,b, +c,e){if(b.children().last().find(".mejs-currenttime").length>0)f(this.options.timeAndDurationSeparator+'<span class="mejs-duration">'+(this.options.duration>0?mejs.Utility.secondsToTimeCode(this.options.duration,this.options.alwaysShowHours||this.media.duration>3600,this.options.showTimecodeFrameCount,this.options.framesPerSecond||25):(a.options.alwaysShowHours?"00:":"")+(a.options.showTimecodeFrameCount?"00:00:00":"00:00"))+"</span>").appendTo(b.find(".mejs-time"));else{b.find(".mejs-currenttime").parent().addClass("mejs-currenttime-container"); +f('<div class="mejs-time mejs-duration-container"><span class="mejs-duration">'+(this.options.duration>0?mejs.Utility.secondsToTimeCode(this.options.duration,this.options.alwaysShowHours||this.media.duration>3600,this.options.showTimecodeFrameCount,this.options.framesPerSecond||25):(a.options.alwaysShowHours?"00:":"")+(a.options.showTimecodeFrameCount?"00:00:00":"00:00"))+"</span></div>").appendTo(b)}this.durationD=this.controls.find(".mejs-duration");e.addEventListener("timeupdate",function(){a.updateDuration()}, +false)},updateCurrent:function(){if(this.currenttime)this.currenttime.html(mejs.Utility.secondsToTimeCode(this.media.currentTime,this.options.alwaysShowHours||this.media.duration>3600,this.options.showTimecodeFrameCount,this.options.framesPerSecond||25))},updateDuration:function(){this.container.toggleClass("mejs-long-video",this.media.duration>3600);if(this.durationD&&(this.options.duration>0||this.media.duration))this.durationD.html(mejs.Utility.secondsToTimeCode(this.options.duration>0?this.options.duration: +this.media.duration,this.options.alwaysShowHours,this.options.showTimecodeFrameCount,this.options.framesPerSecond||25))}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{muteText:mejs.i18n.t("Mute Toggle"),hideVolumeOnTouchDevices:true,audioVolume:"horizontal",videoVolume:"vertical"});f.extend(MediaElementPlayer.prototype,{buildvolume:function(a,b,c,e){if(!((mejs.MediaFeatures.isAndroid||mejs.MediaFeatures.isiOS)&&this.options.hideVolumeOnTouchDevices)){var d=this,g=d.isVideo?d.options.videoVolume:d.options.audioVolume,k=g=="horizontal"?f('<div class="mejs-button mejs-volume-button mejs-mute"><button type="button" aria-controls="'+ +d.id+'" title="'+d.options.muteText+'" aria-label="'+d.options.muteText+'"></button></div><div class="mejs-horizontal-volume-slider"><div class="mejs-horizontal-volume-total"></div><div class="mejs-horizontal-volume-current"></div><div class="mejs-horizontal-volume-handle"></div></div>').appendTo(b):f('<div class="mejs-button mejs-volume-button mejs-mute"><button type="button" aria-controls="'+d.id+'" title="'+d.options.muteText+'" aria-label="'+d.options.muteText+'"></button><div class="mejs-volume-slider"><div class="mejs-volume-total"></div><div class="mejs-volume-current"></div><div class="mejs-volume-handle"></div></div></div>').appendTo(b), +j=d.container.find(".mejs-volume-slider, .mejs-horizontal-volume-slider"),m=d.container.find(".mejs-volume-total, .mejs-horizontal-volume-total"),q=d.container.find(".mejs-volume-current, .mejs-horizontal-volume-current"),p=d.container.find(".mejs-volume-handle, .mejs-horizontal-volume-handle"),t=function(n,o){if(!j.is(":visible")&&typeof o=="undefined"){j.show();t(n,true);j.hide()}else{n=Math.max(0,n);n=Math.min(n,1);n==0?k.removeClass("mejs-mute").addClass("mejs-unmute"):k.removeClass("mejs-unmute").addClass("mejs-mute"); +if(g=="vertical"){var s=m.height(),u=m.position(),v=s-s*n;p.css("top",Math.round(u.top+v-p.height()/2));q.height(s-v);q.css("top",u.top+v)}else{s=m.width();u=m.position();s=s*n;p.css("left",Math.round(u.left+s-p.width()/2));q.width(Math.round(s))}}},h=function(n){var o=null,s=m.offset();if(g=="vertical"){o=m.height();parseInt(m.css("top").replace(/px/,""),10);o=(o-(n.pageY-s.top))/o;if(s.top==0||s.left==0)return}else{o=m.width();o=(n.pageX-s.left)/o}o=Math.max(0,o);o=Math.min(o,1);t(o);o==0?e.setMuted(true): +e.setMuted(false);e.setVolume(o)},l=false,r=false;k.hover(function(){j.show();r=true},function(){r=false;!l&&g=="vertical"&&j.hide()});j.bind("mouseover",function(){r=true}).bind("mousedown",function(n){h(n);d.globalBind("mousemove.vol",function(o){h(o)});d.globalBind("mouseup.vol",function(){l=false;d.globalUnbind(".vol");!r&&g=="vertical"&&j.hide()});l=true;return false});k.find("button").click(function(){e.setMuted(!e.muted)});e.addEventListener("volumechange",function(){if(!l)if(e.muted){t(0); +k.removeClass("mejs-mute").addClass("mejs-unmute")}else{t(e.volume);k.removeClass("mejs-unmute").addClass("mejs-mute")}},false);if(d.container.is(":visible")){t(a.options.startVolume);a.options.startVolume===0&&e.setMuted(true);e.pluginType==="native"&&e.setVolume(a.options.startVolume)}}}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{usePluginFullScreen:true,newWindowCallback:function(){return""},fullscreenText:mejs.i18n.t("Fullscreen")});f.extend(MediaElementPlayer.prototype,{isFullScreen:false,isNativeFullScreen:false,isInIframe:false,buildfullscreen:function(a,b,c,e){if(a.isVideo){a.isInIframe=window.location!=window.parent.location;mejs.MediaFeatures.hasTrueNativeFullScreen&&a.globalBind(mejs.MediaFeatures.fullScreenEventName,function(){if(a.isFullScreen)if(mejs.MediaFeatures.isFullScreen()){a.isNativeFullScreen= +true;a.setControlsSize()}else{a.isNativeFullScreen=false;a.exitFullScreen()}});var d=this,g=f('<div class="mejs-button mejs-fullscreen-button"><button type="button" aria-controls="'+d.id+'" title="'+d.options.fullscreenText+'" aria-label="'+d.options.fullscreenText+'"></button></div>').appendTo(b);if(d.media.pluginType==="native"||!d.options.usePluginFullScreen&&!mejs.MediaFeatures.isFirefox)g.click(function(){mejs.MediaFeatures.hasTrueNativeFullScreen&&mejs.MediaFeatures.isFullScreen()||a.isFullScreen? +a.exitFullScreen():a.enterFullScreen()});else{var k=null;if(function(){var h=document.createElement("x"),l=document.documentElement,r=window.getComputedStyle;if(!("pointerEvents"in h.style))return false;h.style.pointerEvents="auto";h.style.pointerEvents="x";l.appendChild(h);r=r&&r(h,"").pointerEvents==="auto";l.removeChild(h);return!!r}()&&!mejs.MediaFeatures.isOpera){var j=false,m=function(){if(j){for(var h in q)q[h].hide();g.css("pointer-events","");d.controls.css("pointer-events","");d.media.removeEventListener("click", +d.clickToPlayPauseCallback);j=false}},q={};b=["top","left","right","bottom"];var p,t=function(){var h=g.offset().left-d.container.offset().left,l=g.offset().top-d.container.offset().top,r=g.outerWidth(true),n=g.outerHeight(true),o=d.container.width(),s=d.container.height();for(p in q)q[p].css({position:"absolute",top:0,left:0});q.top.width(o).height(l);q.left.width(h).height(n).css({top:l});q.right.width(o-h-r).height(n).css({top:l,left:h+r});q.bottom.width(o).height(s-n-l).css({top:l+n})};d.globalBind("resize", +function(){t()});p=0;for(c=b.length;p<c;p++)q[b[p]]=f('<div class="mejs-fullscreen-hover" />').appendTo(d.container).mouseover(m).hide();g.on("mouseover",function(){if(!d.isFullScreen){var h=g.offset(),l=a.container.offset();e.positionFullscreenButton(h.left-l.left,h.top-l.top,false);g.css("pointer-events","none");d.controls.css("pointer-events","none");d.media.addEventListener("click",d.clickToPlayPauseCallback);for(p in q)q[p].show();t();j=true}});e.addEventListener("fullscreenchange",function(){d.isFullScreen= +!d.isFullScreen;d.isFullScreen?d.media.removeEventListener("click",d.clickToPlayPauseCallback):d.media.addEventListener("click",d.clickToPlayPauseCallback);m()});d.globalBind("mousemove",function(h){if(j){var l=g.offset();if(h.pageY<l.top||h.pageY>l.top+g.outerHeight(true)||h.pageX<l.left||h.pageX>l.left+g.outerWidth(true)){g.css("pointer-events","");d.controls.css("pointer-events","");j=false}}})}else g.on("mouseover",function(){if(k!==null){clearTimeout(k);delete k}var h=g.offset(),l=a.container.offset(); +e.positionFullscreenButton(h.left-l.left,h.top-l.top,true)}).on("mouseout",function(){if(k!==null){clearTimeout(k);delete k}k=setTimeout(function(){e.hideFullscreenButton()},1500)})}a.fullscreenBtn=g;d.globalBind("keydown",function(h){if((mejs.MediaFeatures.hasTrueNativeFullScreen&&mejs.MediaFeatures.isFullScreen()||d.isFullScreen)&&h.keyCode==27)a.exitFullScreen()})}},cleanfullscreen:function(a){a.exitFullScreen()},containerSizeTimeout:null,enterFullScreen:function(){var a=this;if(!(a.media.pluginType!== +"native"&&(mejs.MediaFeatures.isFirefox||a.options.usePluginFullScreen))){f(document.documentElement).addClass("mejs-fullscreen");normalHeight=a.container.height();normalWidth=a.container.width();if(a.media.pluginType==="native")if(mejs.MediaFeatures.hasTrueNativeFullScreen){mejs.MediaFeatures.requestFullScreen(a.container[0]);a.isInIframe&&setTimeout(function c(){if(a.isNativeFullScreen){var e=(window.devicePixelRatio||1)*f(window).width(),d=screen.width;Math.abs(d-e)>d*0.0020?a.exitFullScreen(): +setTimeout(c,500)}},500)}else if(mejs.MediaFeatures.hasSemiNativeFullScreen){a.media.webkitEnterFullscreen();return}if(a.isInIframe){var b=a.options.newWindowCallback(this);if(b!=="")if(mejs.MediaFeatures.hasTrueNativeFullScreen)setTimeout(function(){if(!a.isNativeFullScreen){a.pause();window.open(b,a.id,"top=0,left=0,width="+screen.availWidth+",height="+screen.availHeight+",resizable=yes,scrollbars=no,status=no,toolbar=no")}},250);else{a.pause();window.open(b,a.id,"top=0,left=0,width="+screen.availWidth+ +",height="+screen.availHeight+",resizable=yes,scrollbars=no,status=no,toolbar=no");return}}a.container.addClass("mejs-container-fullscreen").width("100%").height("100%");a.containerSizeTimeout=setTimeout(function(){a.container.css({width:"100%",height:"100%"});a.setControlsSize()},500);if(a.media.pluginType==="native")a.$media.width("100%").height("100%");else{a.container.find(".mejs-shim").width("100%").height("100%");a.media.setVideoSize(f(window).width(),f(window).height())}a.layers.children("div").width("100%").height("100%"); +a.fullscreenBtn&&a.fullscreenBtn.removeClass("mejs-fullscreen").addClass("mejs-unfullscreen");a.setControlsSize();a.isFullScreen=true;a.container.find(".mejs-captions-text").css("font-size",screen.width/a.width*1*100+"%");a.container.find(".mejs-captions-position").css("bottom","45px")}},exitFullScreen:function(){clearTimeout(this.containerSizeTimeout);if(this.media.pluginType!=="native"&&mejs.MediaFeatures.isFirefox)this.media.setFullscreen(false);else{if(mejs.MediaFeatures.hasTrueNativeFullScreen&& +(mejs.MediaFeatures.isFullScreen()||this.isFullScreen))mejs.MediaFeatures.cancelFullScreen();f(document.documentElement).removeClass("mejs-fullscreen");this.container.removeClass("mejs-container-fullscreen").width(normalWidth).height(normalHeight);if(this.media.pluginType==="native")this.$media.width(normalWidth).height(normalHeight);else{this.container.find(".mejs-shim").width(normalWidth).height(normalHeight);this.media.setVideoSize(normalWidth,normalHeight)}this.layers.children("div").width(normalWidth).height(normalHeight); +this.fullscreenBtn.removeClass("mejs-unfullscreen").addClass("mejs-fullscreen");this.setControlsSize();this.isFullScreen=false;this.container.find(".mejs-captions-text").css("font-size","");this.container.find(".mejs-captions-position").css("bottom","")}}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{speeds:["1.50","1.25","1.00","0.75"],defaultSpeed:"1.00"});f.extend(MediaElementPlayer.prototype,{buildspeed:function(a,b,c,e){if(this.media.pluginType=="native"){c='<div class="mejs-button mejs-speed-button"><button type="button">'+this.options.defaultSpeed+'x</button><div class="mejs-speed-selector"><ul>';var d;f.inArray(this.options.defaultSpeed,this.options.speeds)===-1&&this.options.speeds.push(this.options.defaultSpeed);this.options.speeds.sort(function(g, +k){return parseFloat(k)-parseFloat(g)});for(d=0;d<this.options.speeds.length;d++){c+='<li><input type="radio" name="speed" value="'+this.options.speeds[d]+'" id="'+this.options.speeds[d]+'" ';if(this.options.speeds[d]==this.options.defaultSpeed){c+="checked=true ";c+='/><label for="'+this.options.speeds[d]+'" class="mejs-speed-selected">'+this.options.speeds[d]+"x</label></li>"}else c+='/><label for="'+this.options.speeds[d]+'">'+this.options.speeds[d]+"x</label></li>"}c+="</ul></div></div>";a.speedButton= +f(c).appendTo(b);a.playbackspeed=this.options.defaultSpeed;a.speedButton.on("click","input[type=radio]",function(){a.playbackspeed=f(this).attr("value");e.playbackRate=parseFloat(a.playbackspeed);a.speedButton.find("button").text(a.playbackspeed+"x");a.speedButton.find(".mejs-speed-selected").removeClass("mejs-speed-selected");a.speedButton.find("input[type=radio]:checked").next().addClass("mejs-speed-selected")});b=a.speedButton.find(".mejs-speed-selector");b.height(this.speedButton.find(".mejs-speed-selector ul").outerHeight(true)+ +a.speedButton.find(".mejs-speed-translations").outerHeight(true));b.css("top",-1*b.height()+"px")}}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{startLanguage:"",tracksText:mejs.i18n.t("Captions/Subtitles"),hideCaptionsButtonWhenEmpty:true,toggleCaptionsButtonWhenOnlyOne:false,slidesSelector:""});f.extend(MediaElementPlayer.prototype,{hasChapters:false,buildtracks:function(a,b,c,e){if(a.tracks.length!==0){var d;if(this.domNode.textTracks)for(d=this.domNode.textTracks.length-1;d>=0;d--)this.domNode.textTracks[d].mode="hidden";a.chapters=f('<div class="mejs-chapters mejs-layer"></div>').prependTo(c).hide(); +a.captions=f('<div class="mejs-captions-layer mejs-layer"><div class="mejs-captions-position mejs-captions-position-hover"><span class="mejs-captions-text"></span></div></div>').prependTo(c).hide();a.captionsText=a.captions.find(".mejs-captions-text");a.captionsButton=f('<div class="mejs-button mejs-captions-button"><button type="button" aria-controls="'+this.id+'" title="'+this.options.tracksText+'" aria-label="'+this.options.tracksText+'"></button><div class="mejs-captions-selector"><ul><li><input type="radio" name="'+ +a.id+'_captions" id="'+a.id+'_captions_none" value="none" checked="checked" /><label for="'+a.id+'_captions_none">'+mejs.i18n.t("None")+"</label></li></ul></div></div>").appendTo(b);for(d=b=0;d<a.tracks.length;d++)a.tracks[d].kind=="subtitles"&&b++;if(this.options.toggleCaptionsButtonWhenOnlyOne&&b==1)a.captionsButton.on("click",function(){lang=a.selectedTrack===null?a.tracks[0].srclang:"none";a.setTrack(lang)});else{a.captionsButton.on("mouseenter focusin",function(){f(this).find(".mejs-captions-selector").css("visibility", +"visible")}).on("click","input[type=radio]",function(){lang=this.value;a.setTrack(lang)});a.captionsButton.on("mouseleave focusout",function(){f(this).find(".mejs-captions-selector").css("visibility","hidden")})}a.options.alwaysShowControls?a.container.find(".mejs-captions-position").addClass("mejs-captions-position-hover"):a.container.bind("controlsshown",function(){a.container.find(".mejs-captions-position").addClass("mejs-captions-position-hover")}).bind("controlshidden",function(){e.paused||a.container.find(".mejs-captions-position").removeClass("mejs-captions-position-hover")}); +a.trackToLoad=-1;a.selectedTrack=null;a.isLoadingTrack=false;for(d=0;d<a.tracks.length;d++)a.tracks[d].kind=="subtitles"&&a.addTrackButton(a.tracks[d].srclang,a.tracks[d].label);a.loadNextTrack();e.addEventListener("timeupdate",function(){a.displayCaptions()},false);if(a.options.slidesSelector!==""){a.slidesContainer=f(a.options.slidesSelector);e.addEventListener("timeupdate",function(){a.displaySlides()},false)}e.addEventListener("loadedmetadata",function(){a.displayChapters()},false);a.container.hover(function(){if(a.hasChapters){a.chapters.css("visibility", +"visible");a.chapters.fadeIn(200).height(a.chapters.find(".mejs-chapter").outerHeight())}},function(){a.hasChapters&&!e.paused&&a.chapters.fadeOut(200,function(){f(this).css("visibility","hidden");f(this).css("display","block")})});a.node.getAttribute("autoplay")!==null&&a.chapters.css("visibility","hidden")}},setTrack:function(a){var b;if(a=="none"){this.selectedTrack=null;this.captionsButton.removeClass("mejs-captions-enabled")}else for(b=0;b<this.tracks.length;b++)if(this.tracks[b].srclang==a){this.selectedTrack=== +null&&this.captionsButton.addClass("mejs-captions-enabled");this.selectedTrack=this.tracks[b];this.captions.attr("lang",this.selectedTrack.srclang);this.displayCaptions();break}},loadNextTrack:function(){this.trackToLoad++;if(this.trackToLoad<this.tracks.length){this.isLoadingTrack=true;this.loadTrack(this.trackToLoad)}else{this.isLoadingTrack=false;this.checkForTracks()}},loadTrack:function(a){var b=this,c=b.tracks[a];f.ajax({url:c.src,dataType:"text",success:function(e){c.entries=typeof e=="string"&& +/<tt\s+xml/ig.exec(e)?mejs.TrackFormatParser.dfxp.parse(e):mejs.TrackFormatParser.webvtt.parse(e);c.isLoaded=true;b.enableTrackButton(c.srclang,c.label);b.loadNextTrack();c.kind=="chapters"&&b.media.addEventListener("play",function(){b.media.duration>0&&b.displayChapters(c)},false);c.kind=="slides"&&b.setupSlides(c)},error:function(){b.loadNextTrack()}})},enableTrackButton:function(a,b){if(b==="")b=mejs.language.codes[a]||a;this.captionsButton.find("input[value="+a+"]").prop("disabled",false).siblings("label").html(b); +this.options.startLanguage==a&&f("#"+this.id+"_captions_"+a).prop("checked",true).trigger("click");this.adjustLanguageBox()},addTrackButton:function(a,b){if(b==="")b=mejs.language.codes[a]||a;this.captionsButton.find("ul").append(f('<li><input type="radio" name="'+this.id+'_captions" id="'+this.id+"_captions_"+a+'" value="'+a+'" disabled="disabled" /><label for="'+this.id+"_captions_"+a+'">'+b+" (loading)</label></li>"));this.adjustLanguageBox();this.container.find(".mejs-captions-translations option[value="+ +a+"]").remove()},adjustLanguageBox:function(){this.captionsButton.find(".mejs-captions-selector").height(this.captionsButton.find(".mejs-captions-selector ul").outerHeight(true)+this.captionsButton.find(".mejs-captions-translations").outerHeight(true))},checkForTracks:function(){var a=false;if(this.options.hideCaptionsButtonWhenEmpty){for(i=0;i<this.tracks.length;i++)if(this.tracks[i].kind=="subtitles"){a=true;break}if(!a){this.captionsButton.hide();this.setControlsSize()}}},displayCaptions:function(){if(typeof this.tracks!= +"undefined"){var a,b=this.selectedTrack;if(b!==null&&b.isLoaded)for(a=0;a<b.entries.times.length;a++)if(this.media.currentTime>=b.entries.times[a].start&&this.media.currentTime<=b.entries.times[a].stop){this.captionsText.html(b.entries.text[a]).attr("class","mejs-captions-text "+(b.entries.times[a].identifier||""));this.captions.show().height(0);return}this.captions.hide()}},setupSlides:function(a){this.slides=a;this.slides.entries.imgs=[this.slides.entries.text.length];this.showSlide(0)},showSlide:function(a){if(!(typeof this.tracks== +"undefined"||typeof this.slidesContainer=="undefined")){var b=this,c=b.slides.entries.text[a],e=b.slides.entries.imgs[a];if(typeof e=="undefined"||typeof e.fadeIn=="undefined")b.slides.entries.imgs[a]=e=f('<img src="'+c+'">').on("load",function(){e.appendTo(b.slidesContainer).hide().fadeIn().siblings(":visible").fadeOut()});else!e.is(":visible")&&!e.is(":animated")&&e.fadeIn().siblings(":visible").fadeOut()}},displaySlides:function(){if(typeof this.slides!="undefined"){var a=this.slides,b;for(b=0;b< +a.entries.times.length;b++)if(this.media.currentTime>=a.entries.times[b].start&&this.media.currentTime<=a.entries.times[b].stop){this.showSlide(b);break}}},displayChapters:function(){var a;for(a=0;a<this.tracks.length;a++)if(this.tracks[a].kind=="chapters"&&this.tracks[a].isLoaded){this.drawChapters(this.tracks[a]);this.hasChapters=true;break}},drawChapters:function(a){var b=this,c,e,d=e=0;b.chapters.empty();for(c=0;c<a.entries.times.length;c++){e=a.entries.times[c].stop-a.entries.times[c].start; +e=Math.floor(e/b.media.duration*100);if(e+d>100||c==a.entries.times.length-1&&e+d<100)e=100-d;b.chapters.append(f('<div class="mejs-chapter" rel="'+a.entries.times[c].start+'" style="left: '+d.toString()+"%;width: "+e.toString()+'%;"><div class="mejs-chapter-block'+(c==a.entries.times.length-1?" mejs-chapter-block-last":"")+'"><span class="ch-title">'+a.entries.text[c]+'</span><span class="ch-time">'+mejs.Utility.secondsToTimeCode(a.entries.times[c].start)+"–"+mejs.Utility.secondsToTimeCode(a.entries.times[c].stop)+ +"</span></div></div>"));d+=e}b.chapters.find("div.mejs-chapter").click(function(){b.media.setCurrentTime(parseFloat(f(this).attr("rel")));b.media.paused&&b.media.play()});b.chapters.show()}});mejs.language={codes:{af:"Afrikaans",sq:"Albanian",ar:"Arabic",be:"Belarusian",bg:"Bulgarian",ca:"Catalan",zh:"Chinese","zh-cn":"Chinese Simplified","zh-tw":"Chinese Traditional",hr:"Croatian",cs:"Czech",da:"Danish",nl:"Dutch",en:"English",et:"Estonian",fl:"Filipino",fi:"Finnish",fr:"French",gl:"Galician",de:"German", +el:"Greek",ht:"Haitian Creole",iw:"Hebrew",hi:"Hindi",hu:"Hungarian",is:"Icelandic",id:"Indonesian",ga:"Irish",it:"Italian",ja:"Japanese",ko:"Korean",lv:"Latvian",lt:"Lithuanian",mk:"Macedonian",ms:"Malay",mt:"Maltese",no:"Norwegian",fa:"Persian",pl:"Polish",pt:"Portuguese",ro:"Romanian",ru:"Russian",sr:"Serbian",sk:"Slovak",sl:"Slovenian",es:"Spanish",sw:"Swahili",sv:"Swedish",tl:"Tagalog",th:"Thai",tr:"Turkish",uk:"Ukrainian",vi:"Vietnamese",cy:"Welsh",yi:"Yiddish"}};mejs.TrackFormatParser={webvtt:{pattern_timecode:/^((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{1,3})?) --\> ((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{3})?)(.*)$/, +parse:function(a){var b=0;a=mejs.TrackFormatParser.split2(a,/\r?\n/);for(var c={text:[],times:[]},e,d,g;b<a.length;b++){if((e=this.pattern_timecode.exec(a[b]))&&b<a.length){if(b-1>=0&&a[b-1]!=="")g=a[b-1];b++;d=a[b];for(b++;a[b]!==""&&b<a.length;){d=d+"\n"+a[b];b++}d=f.trim(d).replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig,"<a href='$1' target='_blank'>$1</a>");c.text.push(d);c.times.push({identifier:g,start:mejs.Utility.convertSMPTEtoSeconds(e[1])===0?0.2:mejs.Utility.convertSMPTEtoSeconds(e[1]), +stop:mejs.Utility.convertSMPTEtoSeconds(e[3]),settings:e[5]})}g=""}return c}},dfxp:{parse:function(a){a=f(a).filter("tt");var b=0;b=a.children("div").eq(0);var c=b.find("p");b=a.find("#"+b.attr("style"));var e,d;a={text:[],times:[]};if(b.length){d=b.removeAttr("id").get(0).attributes;if(d.length){e={};for(b=0;b<d.length;b++)e[d[b].name.split(":")[1]]=d[b].value}}for(b=0;b<c.length;b++){var g;d={start:null,stop:null,style:null};if(c.eq(b).attr("begin"))d.start=mejs.Utility.convertSMPTEtoSeconds(c.eq(b).attr("begin")); +if(!d.start&&c.eq(b-1).attr("end"))d.start=mejs.Utility.convertSMPTEtoSeconds(c.eq(b-1).attr("end"));if(c.eq(b).attr("end"))d.stop=mejs.Utility.convertSMPTEtoSeconds(c.eq(b).attr("end"));if(!d.stop&&c.eq(b+1).attr("begin"))d.stop=mejs.Utility.convertSMPTEtoSeconds(c.eq(b+1).attr("begin"));if(e){g="";for(var k in e)g+=k+":"+e[k]+";"}if(g)d.style=g;if(d.start===0)d.start=0.2;a.times.push(d);d=f.trim(c.eq(b).html()).replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, +"<a href='$1' target='_blank'>$1</a>");a.text.push(d);if(a.times.start===0)a.times.start=2}return a}},split2:function(a,b){return a.split(b)}};if("x\n\ny".split(/\n/gi).length!=3)mejs.TrackFormatParser.split2=function(a,b){var c=[],e="",d;for(d=0;d<a.length;d++){e+=a.substring(d,d+1);if(b.test(e)){c.push(e.replace(b,""));e=""}}c.push(e);return c}})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{contextMenuItems:[{render:function(a){if(typeof a.enterFullScreen=="undefined")return null;return a.isFullScreen?mejs.i18n.t("Turn off Fullscreen"):mejs.i18n.t("Go Fullscreen")},click:function(a){a.isFullScreen?a.exitFullScreen():a.enterFullScreen()}},{render:function(a){return a.media.muted?mejs.i18n.t("Unmute"):mejs.i18n.t("Mute")},click:function(a){a.media.muted?a.setMuted(false):a.setMuted(true)}},{isSeparator:true},{render:function(){return mejs.i18n.t("Download Video")}, +click:function(a){window.location.href=a.media.currentSrc}}]});f.extend(MediaElementPlayer.prototype,{buildcontextmenu:function(a){a.contextMenu=f('<div class="mejs-contextmenu"></div>').appendTo(f("body")).hide();a.container.bind("contextmenu",function(b){if(a.isContextMenuEnabled){b.preventDefault();a.renderContextMenu(b.clientX-1,b.clientY-1);return false}});a.container.bind("click",function(){a.contextMenu.hide()});a.contextMenu.bind("mouseleave",function(){a.startContextMenuTimer()})},cleancontextmenu:function(a){a.contextMenu.remove()}, +isContextMenuEnabled:true,enableContextMenu:function(){this.isContextMenuEnabled=true},disableContextMenu:function(){this.isContextMenuEnabled=false},contextMenuTimeout:null,startContextMenuTimer:function(){var a=this;a.killContextMenuTimer();a.contextMenuTimer=setTimeout(function(){a.hideContextMenu();a.killContextMenuTimer()},750)},killContextMenuTimer:function(){var a=this.contextMenuTimer;if(a!=null){clearTimeout(a);delete a}},hideContextMenu:function(){this.contextMenu.hide()},renderContextMenu:function(a, +b){for(var c=this,e="",d=c.options.contextMenuItems,g=0,k=d.length;g<k;g++)if(d[g].isSeparator)e+='<div class="mejs-contextmenu-separator"></div>';else{var j=d[g].render(c);if(j!=null)e+='<div class="mejs-contextmenu-item" data-itemindex="'+g+'" id="element-'+Math.random()*1E6+'">'+j+"</div>"}c.contextMenu.empty().append(f(e)).css({top:b,left:a}).show();c.contextMenu.find(".mejs-contextmenu-item").each(function(){var m=f(this),q=parseInt(m.data("itemindex"),10),p=c.options.contextMenuItems[q];typeof p.show!= +"undefined"&&p.show(m,c);m.click(function(){typeof p.click!="undefined"&&p.click(c);c.contextMenu.hide()})});setTimeout(function(){c.killControlsTimer("rev3")},100)}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{postrollCloseText:mejs.i18n.t("Close")});f.extend(MediaElementPlayer.prototype,{buildpostroll:function(a,b,c){var e=this.container.find('link[rel="postroll"]').attr("href");if(typeof e!=="undefined"){a.postroll=f('<div class="mejs-postroll-layer mejs-layer"><a class="mejs-postroll-close" onclick="$(this).parent().hide();return false;">'+this.options.postrollCloseText+'</a><div class="mejs-postroll-layer-content"></div></div>').prependTo(c).hide();this.media.addEventListener("ended", +function(){f.ajax({dataType:"html",url:e,success:function(d){c.find(".mejs-postroll-layer-content").html(d)}});a.postroll.show()},false)}}})})(mejs.$); + diff --git a/lib/mejs/mediaelement.js b/lib/mejs/mediaelement.js new file mode 100755 index 00000000..5d4ee742 --- /dev/null +++ b/lib/mejs/mediaelement.js @@ -0,0 +1,1961 @@ +/*! +* MediaElement.js +* HTML5 <video> and <audio> shim and player +* http://mediaelementjs.com/ +* +* Creates a JavaScript object that mimics HTML5 MediaElement API +* for browsers that don't understand HTML5 or can't play the provided codec +* Can play MP4 (H.264), Ogg, WebM, FLV, WMV, WMA, ACC, and MP3 +* +* Copyright 2010-2014, John Dyer (http://j.hn) +* License: MIT +* +*/ +// Namespace +var mejs = mejs || {}; + +// version number +mejs.version = '2.15.1'; + + +// player number (for missing, same id attr) +mejs.meIndex = 0; + +// media types accepted by plugins +mejs.plugins = { + silverlight: [ + {version: [3,0], types: ['video/mp4','video/m4v','video/mov','video/wmv','audio/wma','audio/m4a','audio/mp3','audio/wav','audio/mpeg']} + ], + flash: [ + {version: [9,0,124], types: ['video/mp4','video/m4v','video/mov','video/flv','video/rtmp','video/x-flv','audio/flv','audio/x-flv','audio/mp3','audio/m4a','audio/mpeg', 'video/youtube', 'video/x-youtube', 'application/x-mpegURL']} + //,{version: [12,0], types: ['video/webm']} // for future reference (hopefully!) + ], + youtube: [ + {version: null, types: ['video/youtube', 'video/x-youtube', 'audio/youtube', 'audio/x-youtube']} + ], + vimeo: [ + {version: null, types: ['video/vimeo', 'video/x-vimeo']} + ] +}; + +/* +Utility methods +*/ +mejs.Utility = { + encodeUrl: function(url) { + return encodeURIComponent(url); //.replace(/\?/gi,'%3F').replace(/=/gi,'%3D').replace(/&/gi,'%26'); + }, + escapeHTML: function(s) { + return s.toString().split('&').join('&').split('<').join('<').split('"').join('"'); + }, + absolutizeUrl: function(url) { + var el = document.createElement('div'); + el.innerHTML = '<a href="' + this.escapeHTML(url) + '">x</a>'; + return el.firstChild.href; + }, + getScriptPath: function(scriptNames) { + var + i = 0, + j, + codePath = '', + testname = '', + slashPos, + filenamePos, + scriptUrl, + scriptPath, + scriptFilename, + scripts = document.getElementsByTagName('script'), + il = scripts.length, + jl = scriptNames.length; + + // go through all <script> tags + for (; i < il; i++) { + scriptUrl = scripts[i].src; + slashPos = scriptUrl.lastIndexOf('/'); + if (slashPos > -1) { + scriptFilename = scriptUrl.substring(slashPos + 1); + scriptPath = scriptUrl.substring(0, slashPos + 1); + } else { + scriptFilename = scriptUrl; + scriptPath = ''; + } + + // see if any <script> tags have a file name that matches the + for (j = 0; j < jl; j++) { + testname = scriptNames[j]; + filenamePos = scriptFilename.indexOf(testname); + if (filenamePos > -1) { + codePath = scriptPath; + break; + } + } + + // if we found a path, then break and return it + if (codePath !== '') { + break; + } + } + + // send the best path back + return codePath; + }, + secondsToTimeCode: function(time, forceHours, showFrameCount, fps) { + //add framecount + if (typeof showFrameCount == 'undefined') { + showFrameCount=false; + } else if(typeof fps == 'undefined') { + fps = 25; + } + + var hours = Math.floor(time / 3600) % 24, + minutes = Math.floor(time / 60) % 60, + seconds = Math.floor(time % 60), + frames = Math.floor(((time % 1)*fps).toFixed(3)), + result = + ( (forceHours || hours > 0) ? (hours < 10 ? '0' + hours : hours) + ':' : '') + + (minutes < 10 ? '0' + minutes : minutes) + ':' + + (seconds < 10 ? '0' + seconds : seconds) + + ((showFrameCount) ? ':' + (frames < 10 ? '0' + frames : frames) : ''); + + return result; + }, + + timeCodeToSeconds: function(hh_mm_ss_ff, forceHours, showFrameCount, fps){ + if (typeof showFrameCount == 'undefined') { + showFrameCount=false; + } else if(typeof fps == 'undefined') { + fps = 25; + } + + var tc_array = hh_mm_ss_ff.split(":"), + tc_hh = parseInt(tc_array[0], 10), + tc_mm = parseInt(tc_array[1], 10), + tc_ss = parseInt(tc_array[2], 10), + tc_ff = 0, + tc_in_seconds = 0; + + if (showFrameCount) { + tc_ff = parseInt(tc_array[3])/fps; + } + + tc_in_seconds = ( tc_hh * 3600 ) + ( tc_mm * 60 ) + tc_ss + tc_ff; + + return tc_in_seconds; + }, + + + convertSMPTEtoSeconds: function (SMPTE) { + if (typeof SMPTE != 'string') + return false; + + SMPTE = SMPTE.replace(',', '.'); + + var secs = 0, + decimalLen = (SMPTE.indexOf('.') != -1) ? SMPTE.split('.')[1].length : 0, + multiplier = 1; + + SMPTE = SMPTE.split(':').reverse(); + + for (var i = 0; i < SMPTE.length; i++) { + multiplier = 1; + if (i > 0) { + multiplier = Math.pow(60, i); + } + secs += Number(SMPTE[i]) * multiplier; + } + return Number(secs.toFixed(decimalLen)); + }, + + /* borrowed from SWFObject: http://code.google.com/p/swfobject/source/browse/trunk/swfobject/src/swfobject.js#474 */ + removeSwf: function(id) { + var obj = document.getElementById(id); + if (obj && /object|embed/i.test(obj.nodeName)) { + if (mejs.MediaFeatures.isIE) { + obj.style.display = "none"; + (function(){ + if (obj.readyState == 4) { + mejs.Utility.removeObjectInIE(id); + } else { + setTimeout(arguments.callee, 10); + } + })(); + } else { + obj.parentNode.removeChild(obj); + } + } + }, + removeObjectInIE: function(id) { + var obj = document.getElementById(id); + if (obj) { + for (var i in obj) { + if (typeof obj[i] == "function") { + obj[i] = null; + } + } + obj.parentNode.removeChild(obj); + } + } +}; + + +// Core detector, plugins are added below +mejs.PluginDetector = { + + // main public function to test a plug version number PluginDetector.hasPluginVersion('flash',[9,0,125]); + hasPluginVersion: function(plugin, v) { + var pv = this.plugins[plugin]; + v[1] = v[1] || 0; + v[2] = v[2] || 0; + return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false; + }, + + // cached values + nav: window.navigator, + ua: window.navigator.userAgent.toLowerCase(), + + // stored version numbers + plugins: [], + + // runs detectPlugin() and stores the version number + addPlugin: function(p, pluginName, mimeType, activeX, axDetect) { + this.plugins[p] = this.detectPlugin(pluginName, mimeType, activeX, axDetect); + }, + + // get the version number from the mimetype (all but IE) or ActiveX (IE) + detectPlugin: function(pluginName, mimeType, activeX, axDetect) { + + var version = [0,0,0], + description, + i, + ax; + + // Firefox, Webkit, Opera + if (typeof(this.nav.plugins) != 'undefined' && typeof this.nav.plugins[pluginName] == 'object') { + description = this.nav.plugins[pluginName].description; + if (description && !(typeof this.nav.mimeTypes != 'undefined' && this.nav.mimeTypes[mimeType] && !this.nav.mimeTypes[mimeType].enabledPlugin)) { + version = description.replace(pluginName, '').replace(/^\s+/,'').replace(/\sr/gi,'.').split('.'); + for (i=0; i<version.length; i++) { + version[i] = parseInt(version[i].match(/\d+/), 10); + } + } + // Internet Explorer / ActiveX + } else if (typeof(window.ActiveXObject) != 'undefined') { + try { + ax = new ActiveXObject(activeX); + if (ax) { + version = axDetect(ax); + } + } + catch (e) { } + } + return version; + } +}; + +// Add Flash detection +mejs.PluginDetector.addPlugin('flash','Shockwave Flash','application/x-shockwave-flash','ShockwaveFlash.ShockwaveFlash', function(ax) { + // adapted from SWFObject + var version = [], + d = ax.GetVariable("$version"); + if (d) { + d = d.split(" ")[1].split(","); + version = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; + } + return version; +}); + +// Add Silverlight detection +mejs.PluginDetector.addPlugin('silverlight','Silverlight Plug-In','application/x-silverlight-2','AgControl.AgControl', function (ax) { + // Silverlight cannot report its version number to IE + // but it does have a isVersionSupported function, so we have to loop through it to get a version number. + // adapted from http://www.silverlightversion.com/ + var v = [0,0,0,0], + loopMatch = function(ax, v, i, n) { + while(ax.isVersionSupported(v[0]+ "."+ v[1] + "." + v[2] + "." + v[3])){ + v[i]+=n; + } + v[i] -= n; + }; + loopMatch(ax, v, 0, 1); + loopMatch(ax, v, 1, 1); + loopMatch(ax, v, 2, 10000); // the third place in the version number is usually 5 digits (4.0.xxxxx) + loopMatch(ax, v, 2, 1000); + loopMatch(ax, v, 2, 100); + loopMatch(ax, v, 2, 10); + loopMatch(ax, v, 2, 1); + loopMatch(ax, v, 3, 1); + + return v; +}); +// add adobe acrobat +/* +PluginDetector.addPlugin('acrobat','Adobe Acrobat','application/pdf','AcroPDF.PDF', function (ax) { + var version = [], + d = ax.GetVersions().split(',')[0].split('=')[1].split('.'); + + if (d) { + version = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; + } + return version; +}); +*/ +// necessary detection (fixes for <IE9) +mejs.MediaFeatures = { + init: function() { + var + t = this, + d = document, + nav = mejs.PluginDetector.nav, + ua = mejs.PluginDetector.ua.toLowerCase(), + i, + v, + html5Elements = ['source','track','audio','video']; + + // detect browsers (only the ones that have some kind of quirk we need to work around) + t.isiPad = (ua.match(/ipad/i) !== null); + t.isiPhone = (ua.match(/iphone/i) !== null); + t.isiOS = t.isiPhone || t.isiPad; + t.isAndroid = (ua.match(/android/i) !== null); + t.isBustedAndroid = (ua.match(/android 2\.[12]/) !== null); + t.isBustedNativeHTTPS = (location.protocol === 'https:' && (ua.match(/android [12]\./) !== null || ua.match(/macintosh.* version.* safari/) !== null)); + t.isIE = (nav.appName.toLowerCase().indexOf("microsoft") != -1 || nav.appName.toLowerCase().match(/trident/gi) !== null); + t.isChrome = (ua.match(/chrome/gi) !== null); + t.isChromium = (ua.match(/chromium/gi) !== null); + t.isFirefox = (ua.match(/firefox/gi) !== null); + t.isWebkit = (ua.match(/webkit/gi) !== null); + t.isGecko = (ua.match(/gecko/gi) !== null) && !t.isWebkit && !t.isIE; + t.isOpera = (ua.match(/opera/gi) !== null); + t.hasTouch = ('ontouchstart' in window); // && window.ontouchstart != null); // this breaks iOS 7 + + // borrowed from Modernizr + t.svg = !! document.createElementNS && + !! document.createElementNS('http://www.w3.org/2000/svg','svg').createSVGRect; + + // create HTML5 media elements for IE before 9, get a <video> element for fullscreen detection + for (i=0; i<html5Elements.length; i++) { + v = document.createElement(html5Elements[i]); + } + + t.supportsMediaTag = (typeof v.canPlayType !== 'undefined' || t.isBustedAndroid); + + // Fix for IE9 on Windows 7N / Windows 7KN (Media Player not installer) + try{ + v.canPlayType("video/mp4"); + }catch(e){ + t.supportsMediaTag = false; + } + + // detect native JavaScript fullscreen (Safari/Firefox only, Chrome still fails) + + // iOS + t.hasSemiNativeFullScreen = (typeof v.webkitEnterFullscreen !== 'undefined'); + + // W3C + t.hasNativeFullscreen = (typeof v.requestFullscreen !== 'undefined'); + + // webkit/firefox/IE11+ + t.hasWebkitNativeFullScreen = (typeof v.webkitRequestFullScreen !== 'undefined'); + t.hasMozNativeFullScreen = (typeof v.mozRequestFullScreen !== 'undefined'); + t.hasMsNativeFullScreen = (typeof v.msRequestFullscreen !== 'undefined'); + + t.hasTrueNativeFullScreen = (t.hasWebkitNativeFullScreen || t.hasMozNativeFullScreen || t.hasMsNativeFullScreen); + t.nativeFullScreenEnabled = t.hasTrueNativeFullScreen; + + // Enabled? + if (t.hasMozNativeFullScreen) { + t.nativeFullScreenEnabled = document.mozFullScreenEnabled; + } else if (t.hasMsNativeFullScreen) { + t.nativeFullScreenEnabled = document.msFullscreenEnabled; + } + + if (t.isChrome) { + t.hasSemiNativeFullScreen = false; + } + + if (t.hasTrueNativeFullScreen) { + + t.fullScreenEventName = ''; + if (t.hasWebkitNativeFullScreen) { + t.fullScreenEventName = 'webkitfullscreenchange'; + + } else if (t.hasMozNativeFullScreen) { + t.fullScreenEventName = 'mozfullscreenchange'; + + } else if (t.hasMsNativeFullScreen) { + t.fullScreenEventName = 'MSFullscreenChange'; + } + + t.isFullScreen = function() { + if (t.hasMozNativeFullScreen) { + return d.mozFullScreen; + + } else if (t.hasWebkitNativeFullScreen) { + return d.webkitIsFullScreen; + + } else if (t.hasMsNativeFullScreen) { + return d.msFullscreenElement !== null; + } + } + + t.requestFullScreen = function(el) { + + if (t.hasWebkitNativeFullScreen) { + el.webkitRequestFullScreen(); + + } else if (t.hasMozNativeFullScreen) { + el.mozRequestFullScreen(); + + } else if (t.hasMsNativeFullScreen) { + el.msRequestFullscreen(); + + } + } + + t.cancelFullScreen = function() { + if (t.hasWebkitNativeFullScreen) { + document.webkitCancelFullScreen(); + + } else if (t.hasMozNativeFullScreen) { + document.mozCancelFullScreen(); + + } else if (t.hasMsNativeFullScreen) { + document.msExitFullscreen(); + + } + } + + } + + + // OS X 10.5 can't do this even if it says it can :( + if (t.hasSemiNativeFullScreen && ua.match(/mac os x 10_5/i)) { + t.hasNativeFullScreen = false; + t.hasSemiNativeFullScreen = false; + } + + } +}; +mejs.MediaFeatures.init(); + +/* +extension methods to <video> or <audio> object to bring it into parity with PluginMediaElement (see below) +*/ +mejs.HtmlMediaElement = { + pluginType: 'native', + isFullScreen: false, + + setCurrentTime: function (time) { + this.currentTime = time; + }, + + setMuted: function (muted) { + this.muted = muted; + }, + + setVolume: function (volume) { + this.volume = volume; + }, + + // for parity with the plugin versions + stop: function () { + this.pause(); + }, + + // This can be a url string + // or an array [{src:'file.mp4',type:'video/mp4'},{src:'file.webm',type:'video/webm'}] + setSrc: function (url) { + + // Fix for IE9 which can't set .src when there are <source> elements. Awesome, right? + var + existingSources = this.getElementsByTagName('source'); + while (existingSources.length > 0){ + this.removeChild(existingSources[0]); + } + + if (typeof url == 'string') { + this.src = url; + } else { + var i, media; + + for (i=0; i<url.length; i++) { + media = url[i]; + if (this.canPlayType(media.type)) { + this.src = media.src; + break; + } + } + } + }, + + setVideoSize: function (width, height) { + this.width = width; + this.height = height; + } +}; + +/* +Mimics the <video/audio> element by calling Flash's External Interface or Silverlights [ScriptableMember] +*/ +mejs.PluginMediaElement = function (pluginid, pluginType, mediaUrl) { + this.id = pluginid; + this.pluginType = pluginType; + this.src = mediaUrl; + this.events = {}; + this.attributes = {}; +}; + +// JavaScript values and ExternalInterface methods that match HTML5 video properties methods +// http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/fl/video/FLVPlayback.html +// http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html +mejs.PluginMediaElement.prototype = { + + // special + pluginElement: null, + pluginType: '', + isFullScreen: false, + + // not implemented :( + playbackRate: -1, + defaultPlaybackRate: -1, + seekable: [], + played: [], + + // HTML5 read-only properties + paused: true, + ended: false, + seeking: false, + duration: 0, + error: null, + tagName: '', + + // HTML5 get/set properties, but only set (updated by event handlers) + muted: false, + volume: 1, + currentTime: 0, + + // HTML5 methods + play: function () { + if (this.pluginApi != null) { + if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') { + this.pluginApi.playVideo(); + } else { + this.pluginApi.playMedia(); + } + this.paused = false; + } + }, + load: function () { + if (this.pluginApi != null) { + if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') { + } else { + this.pluginApi.loadMedia(); + } + + this.paused = false; + } + }, + pause: function () { + if (this.pluginApi != null) { + if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') { + this.pluginApi.pauseVideo(); + } else { + this.pluginApi.pauseMedia(); + } + + + this.paused = true; + } + }, + stop: function () { + if (this.pluginApi != null) { + if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') { + this.pluginApi.stopVideo(); + } else { + this.pluginApi.stopMedia(); + } + this.paused = true; + } + }, + canPlayType: function(type) { + var i, + j, + pluginInfo, + pluginVersions = mejs.plugins[this.pluginType]; + + for (i=0; i<pluginVersions.length; i++) { + pluginInfo = pluginVersions[i]; + + // test if user has the correct plugin version + if (mejs.PluginDetector.hasPluginVersion(this.pluginType, pluginInfo.version)) { + + // test for plugin playback types + for (j=0; j<pluginInfo.types.length; j++) { + // find plugin that can play the type + if (type == pluginInfo.types[j]) { + return 'probably'; + } + } + } + } + + return ''; + }, + + positionFullscreenButton: function(x,y,visibleAndAbove) { + if (this.pluginApi != null && this.pluginApi.positionFullscreenButton) { + this.pluginApi.positionFullscreenButton(Math.floor(x),Math.floor(y),visibleAndAbove); + } + }, + + hideFullscreenButton: function() { + if (this.pluginApi != null && this.pluginApi.hideFullscreenButton) { + this.pluginApi.hideFullscreenButton(); + } + }, + + + // custom methods since not all JavaScript implementations support get/set + + // This can be a url string + // or an array [{src:'file.mp4',type:'video/mp4'},{src:'file.webm',type:'video/webm'}] + setSrc: function (url) { + if (typeof url == 'string') { + this.pluginApi.setSrc(mejs.Utility.absolutizeUrl(url)); + this.src = mejs.Utility.absolutizeUrl(url); + } else { + var i, media; + + for (i=0; i<url.length; i++) { + media = url[i]; + if (this.canPlayType(media.type)) { + this.pluginApi.setSrc(mejs.Utility.absolutizeUrl(media.src)); + this.src = mejs.Utility.absolutizeUrl(url); + break; + } + } + } + + }, + setCurrentTime: function (time) { + if (this.pluginApi != null) { + if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') { + this.pluginApi.seekTo(time); + } else { + this.pluginApi.setCurrentTime(time); + } + + + + this.currentTime = time; + } + }, + setVolume: function (volume) { + if (this.pluginApi != null) { + // same on YouTube and MEjs + if (this.pluginType == 'youtube') { + this.pluginApi.setVolume(volume * 100); + } else { + this.pluginApi.setVolume(volume); + } + this.volume = volume; + } + }, + setMuted: function (muted) { + if (this.pluginApi != null) { + if (this.pluginType == 'youtube') { + if (muted) { + this.pluginApi.mute(); + } else { + this.pluginApi.unMute(); + } + this.muted = muted; + this.dispatchEvent('volumechange'); + } else { + this.pluginApi.setMuted(muted); + } + this.muted = muted; + } + }, + + // additional non-HTML5 methods + setVideoSize: function (width, height) { + + //if (this.pluginType == 'flash' || this.pluginType == 'silverlight') { + if (this.pluginElement && this.pluginElement.style) { + this.pluginElement.style.width = width + 'px'; + this.pluginElement.style.height = height + 'px'; + } + if (this.pluginApi != null && this.pluginApi.setVideoSize) { + this.pluginApi.setVideoSize(width, height); + } + //} + }, + + setFullscreen: function (fullscreen) { + if (this.pluginApi != null && this.pluginApi.setFullscreen) { + this.pluginApi.setFullscreen(fullscreen); + } + }, + + enterFullScreen: function() { + if (this.pluginApi != null && this.pluginApi.setFullscreen) { + this.setFullscreen(true); + } + + }, + + exitFullScreen: function() { + if (this.pluginApi != null && this.pluginApi.setFullscreen) { + this.setFullscreen(false); + } + }, + + // start: fake events + addEventListener: function (eventName, callback, bubble) { + this.events[eventName] = this.events[eventName] || []; + this.events[eventName].push(callback); + }, + removeEventListener: function (eventName, callback) { + if (!eventName) { this.events = {}; return true; } + var callbacks = this.events[eventName]; + if (!callbacks) return true; + if (!callback) { this.events[eventName] = []; return true; } + for (var i = 0; i < callbacks.length; i++) { + if (callbacks[i] === callback) { + this.events[eventName].splice(i, 1); + return true; + } + } + return false; + }, + dispatchEvent: function (eventName) { + var i, + args, + callbacks = this.events[eventName]; + + if (callbacks) { + args = Array.prototype.slice.call(arguments, 1); + for (i = 0; i < callbacks.length; i++) { + callbacks[i].apply(null, args); + } + } + }, + // end: fake events + + // fake DOM attribute methods + hasAttribute: function(name){ + return (name in this.attributes); + }, + removeAttribute: function(name){ + delete this.attributes[name]; + }, + getAttribute: function(name){ + if (this.hasAttribute(name)) { + return this.attributes[name]; + } + return ''; + }, + setAttribute: function(name, value){ + this.attributes[name] = value; + }, + + remove: function() { + mejs.Utility.removeSwf(this.pluginElement.id); + mejs.MediaPluginBridge.unregisterPluginElement(this.pluginElement.id); + } +}; + +// Handles calls from Flash/Silverlight and reports them as native <video/audio> events and properties +mejs.MediaPluginBridge = { + + pluginMediaElements:{}, + htmlMediaElements:{}, + + registerPluginElement: function (id, pluginMediaElement, htmlMediaElement) { + this.pluginMediaElements[id] = pluginMediaElement; + this.htmlMediaElements[id] = htmlMediaElement; + }, + + unregisterPluginElement: function (id) { + delete this.pluginMediaElements[id]; + delete this.htmlMediaElements[id]; + }, + + // when Flash/Silverlight is ready, it calls out to this method + initPlugin: function (id) { + + var pluginMediaElement = this.pluginMediaElements[id], + htmlMediaElement = this.htmlMediaElements[id]; + + if (pluginMediaElement) { + // find the javascript bridge + switch (pluginMediaElement.pluginType) { + case "flash": + pluginMediaElement.pluginElement = pluginMediaElement.pluginApi = document.getElementById(id); + break; + case "silverlight": + pluginMediaElement.pluginElement = document.getElementById(pluginMediaElement.id); + pluginMediaElement.pluginApi = pluginMediaElement.pluginElement.Content.MediaElementJS; + break; + } + + if (pluginMediaElement.pluginApi != null && pluginMediaElement.success) { + pluginMediaElement.success(pluginMediaElement, htmlMediaElement); + } + } + }, + + // receives events from Flash/Silverlight and sends them out as HTML5 media events + // http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html + fireEvent: function (id, eventName, values) { + + var + e, + i, + bufferedTime, + pluginMediaElement = this.pluginMediaElements[id]; + + if(!pluginMediaElement){ + return; + } + + // fake event object to mimic real HTML media event. + e = { + type: eventName, + target: pluginMediaElement + }; + + // attach all values to element and event object + for (i in values) { + pluginMediaElement[i] = values[i]; + e[i] = values[i]; + } + + // fake the newer W3C buffered TimeRange (loaded and total have been removed) + bufferedTime = values.bufferedTime || 0; + + e.target.buffered = e.buffered = { + start: function(index) { + return 0; + }, + end: function (index) { + return bufferedTime; + }, + length: 1 + }; + + pluginMediaElement.dispatchEvent(e.type, e); + } +}; + +/* +Default options +*/ +mejs.MediaElementDefaults = { + // allows testing on HTML5, flash, silverlight + // auto: attempts to detect what the browser can do + // auto_plugin: prefer plugins and then attempt native HTML5 + // native: forces HTML5 playback + // shim: disallows HTML5, will attempt either Flash or Silverlight + // none: forces fallback view + mode: 'auto', + // remove or reorder to change plugin priority and availability + plugins: ['flash','silverlight','youtube','vimeo'], + // shows debug errors on screen + enablePluginDebug: false, + // use plugin for browsers that have trouble with Basic Authentication on HTTPS sites + httpsBasicAuthSite: false, + // overrides the type specified, useful for dynamic instantiation + type: '', + // path to Flash and Silverlight plugins + pluginPath: mejs.Utility.getScriptPath(['mediaelement.js','mediaelement.min.js','mediaelement-and-player.js','mediaelement-and-player.min.js']), + // name of flash file + flashName: 'flashmediaelement.swf', + // streamer for RTMP streaming + flashStreamer: '', + // turns on the smoothing filter in Flash + enablePluginSmoothing: false, + // enabled pseudo-streaming (seek) on .mp4 files + enablePseudoStreaming: false, + // start query parameter sent to server for pseudo-streaming + pseudoStreamingStartQueryParam: 'start', + // name of silverlight file + silverlightName: 'silverlightmediaelement.xap', + // default if the <video width> is not specified + defaultVideoWidth: 480, + // default if the <video height> is not specified + defaultVideoHeight: 270, + // overrides <video width> + pluginWidth: -1, + // overrides <video height> + pluginHeight: -1, + // additional plugin variables in 'key=value' form + pluginVars: [], + // rate in milliseconds for Flash and Silverlight to fire the timeupdate event + // larger number is less accurate, but less strain on plugin->JavaScript bridge + timerRate: 250, + // initial volume for player + startVolume: 0.8, + success: function () { }, + error: function () { } +}; + +/* +Determines if a browser supports the <video> or <audio> element +and returns either the native element or a Flash/Silverlight version that +mimics HTML5 MediaElement +*/ +mejs.MediaElement = function (el, o) { + return mejs.HtmlMediaElementShim.create(el,o); +}; + +mejs.HtmlMediaElementShim = { + + create: function(el, o) { + var + options = mejs.MediaElementDefaults, + htmlMediaElement = (typeof(el) == 'string') ? document.getElementById(el) : el, + tagName = htmlMediaElement.tagName.toLowerCase(), + isMediaTag = (tagName === 'audio' || tagName === 'video'), + src = (isMediaTag) ? htmlMediaElement.getAttribute('src') : htmlMediaElement.getAttribute('href'), + poster = htmlMediaElement.getAttribute('poster'), + autoplay = htmlMediaElement.getAttribute('autoplay'), + preload = htmlMediaElement.getAttribute('preload'), + controls = htmlMediaElement.getAttribute('controls'), + playback, + prop; + + // extend options + for (prop in o) { + options[prop] = o[prop]; + } + + // clean up attributes + src = (typeof src == 'undefined' || src === null || src == '') ? null : src; + poster = (typeof poster == 'undefined' || poster === null) ? '' : poster; + preload = (typeof preload == 'undefined' || preload === null || preload === 'false') ? 'none' : preload; + autoplay = !(typeof autoplay == 'undefined' || autoplay === null || autoplay === 'false'); + controls = !(typeof controls == 'undefined' || controls === null || controls === 'false'); + + // test for HTML5 and plugin capabilities + playback = this.determinePlayback(htmlMediaElement, options, mejs.MediaFeatures.supportsMediaTag, isMediaTag, src); + playback.url = (playback.url !== null) ? mejs.Utility.absolutizeUrl(playback.url) : ''; + + if (playback.method == 'native') { + // second fix for android + if (mejs.MediaFeatures.isBustedAndroid) { + htmlMediaElement.src = playback.url; + htmlMediaElement.addEventListener('click', function() { + htmlMediaElement.play(); + }, false); + } + + // add methods to native HTMLMediaElement + return this.updateNative(playback, options, autoplay, preload); + } else if (playback.method !== '') { + // create plugin to mimic HTMLMediaElement + + return this.createPlugin( playback, options, poster, autoplay, preload, controls); + } else { + // boo, no HTML5, no Flash, no Silverlight. + this.createErrorMessage( playback, options, poster ); + + return this; + } + }, + + determinePlayback: function(htmlMediaElement, options, supportsMediaTag, isMediaTag, src) { + var + mediaFiles = [], + i, + j, + k, + l, + n, + type, + result = { method: '', url: '', htmlMediaElement: htmlMediaElement, isVideo: (htmlMediaElement.tagName.toLowerCase() != 'audio')}, + pluginName, + pluginVersions, + pluginInfo, + dummy, + media; + + // STEP 1: Get URL and type from <video src> or <source src> + + // supplied type overrides <video type> and <source type> + if (typeof options.type != 'undefined' && options.type !== '') { + + // accept either string or array of types + if (typeof options.type == 'string') { + mediaFiles.push({type:options.type, url:src}); + } else { + + for (i=0; i<options.type.length; i++) { + mediaFiles.push({type:options.type[i], url:src}); + } + } + + // test for src attribute first + } else if (src !== null) { + type = this.formatType(src, htmlMediaElement.getAttribute('type')); + mediaFiles.push({type:type, url:src}); + + // then test for <source> elements + } else { + // test <source> types to see if they are usable + for (i = 0; i < htmlMediaElement.childNodes.length; i++) { + n = htmlMediaElement.childNodes[i]; + if (n.nodeType == 1 && n.tagName.toLowerCase() == 'source') { + src = n.getAttribute('src'); + type = this.formatType(src, n.getAttribute('type')); + media = n.getAttribute('media'); + + if (!media || !window.matchMedia || (window.matchMedia && window.matchMedia(media).matches)) { + mediaFiles.push({type:type, url:src}); + } + } + } + } + + // in the case of dynamicly created players + // check for audio types + if (!isMediaTag && mediaFiles.length > 0 && mediaFiles[0].url !== null && this.getTypeFromFile(mediaFiles[0].url).indexOf('audio') > -1) { + result.isVideo = false; + } + + + // STEP 2: Test for playback method + + // special case for Android which sadly doesn't implement the canPlayType function (always returns '') + if (mejs.MediaFeatures.isBustedAndroid) { + htmlMediaElement.canPlayType = function(type) { + return (type.match(/video\/(mp4|m4v)/gi) !== null) ? 'maybe' : ''; + }; + } + + // special case for Chromium to specify natively supported video codecs (i.e. WebM and Theora) + if (mejs.MediaFeatures.isChromium) { + htmlMediaElement.canPlayType = function(type) { + return (type.match(/video\/(webm|ogv|ogg)/gi) !== null) ? 'maybe' : ''; + }; + } + + // test for native playback first + if (supportsMediaTag && (options.mode === 'auto' || options.mode === 'auto_plugin' || options.mode === 'native') && !(mejs.MediaFeatures.isBustedNativeHTTPS && options.httpsBasicAuthSite === true)) { + + if (!isMediaTag) { + + // create a real HTML5 Media Element + dummy = document.createElement( result.isVideo ? 'video' : 'audio'); + htmlMediaElement.parentNode.insertBefore(dummy, htmlMediaElement); + htmlMediaElement.style.display = 'none'; + + // use this one from now on + result.htmlMediaElement = htmlMediaElement = dummy; + } + + for (i=0; i<mediaFiles.length; i++) { + // normal check + if (mediaFiles[i].type == "video/m3u8" || htmlMediaElement.canPlayType(mediaFiles[i].type).replace(/no/, '') !== '' + // special case for Mac/Safari 5.0.3 which answers '' to canPlayType('audio/mp3') but 'maybe' to canPlayType('audio/mpeg') + || htmlMediaElement.canPlayType(mediaFiles[i].type.replace(/mp3/,'mpeg')).replace(/no/, '') !== '' + // special case for m4a supported by detecting mp4 support + || htmlMediaElement.canPlayType(mediaFiles[i].type.replace(/m4a/,'mp4')).replace(/no/, '') !== '') { + result.method = 'native'; + result.url = mediaFiles[i].url; + break; + } + } + + if (result.method === 'native') { + if (result.url !== null) { + htmlMediaElement.src = result.url; + } + + // if `auto_plugin` mode, then cache the native result but try plugins. + if (options.mode !== 'auto_plugin') { + return result; + } + } + } + + // if native playback didn't work, then test plugins + if (options.mode === 'auto' || options.mode === 'auto_plugin' || options.mode === 'shim') { + for (i=0; i<mediaFiles.length; i++) { + type = mediaFiles[i].type; + + // test all plugins in order of preference [silverlight, flash] + for (j=0; j<options.plugins.length; j++) { + + pluginName = options.plugins[j]; + + // test version of plugin (for future features) + pluginVersions = mejs.plugins[pluginName]; + + for (k=0; k<pluginVersions.length; k++) { + pluginInfo = pluginVersions[k]; + + // test if user has the correct plugin version + + // for youtube/vimeo + if (pluginInfo.version == null || + + mejs.PluginDetector.hasPluginVersion(pluginName, pluginInfo.version)) { + + // test for plugin playback types + for (l=0; l<pluginInfo.types.length; l++) { + // find plugin that can play the type + if (type == pluginInfo.types[l]) { + result.method = pluginName; + result.url = mediaFiles[i].url; + return result; + } + } + } + } + } + } + } + + // at this point, being in 'auto_plugin' mode implies that we tried plugins but failed. + // if we have native support then return that. + if (options.mode === 'auto_plugin' && result.method === 'native') { + return result; + } + + // what if there's nothing to play? just grab the first available + if (result.method === '' && mediaFiles.length > 0) { + result.url = mediaFiles[0].url; + } + + return result; + }, + + formatType: function(url, type) { + var ext; + + // if no type is supplied, fake it with the extension + if (url && !type) { + return this.getTypeFromFile(url); + } else { + // only return the mime part of the type in case the attribute contains the codec + // see http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#the-source-element + // `video/mp4; codecs="avc1.42E01E, mp4a.40.2"` becomes `video/mp4` + + if (type && ~type.indexOf(';')) { + return type.substr(0, type.indexOf(';')); + } else { + return type; + } + } + }, + + getTypeFromFile: function(url) { + url = url.split('?')[0]; + var ext = url.substring(url.lastIndexOf('.') + 1).toLowerCase(); + return (/(mp4|m4v|ogg|ogv|m3u8|webm|webmv|flv|wmv|mpeg|mov)/gi.test(ext) ? 'video' : 'audio') + '/' + this.getTypeFromExtension(ext); + }, + + getTypeFromExtension: function(ext) { + + switch (ext) { + case 'mp4': + case 'm4v': + case 'm4a': + return 'mp4'; + case 'webm': + case 'webma': + case 'webmv': + return 'webm'; + case 'ogg': + case 'oga': + case 'ogv': + return 'ogg'; + default: + return ext; + } + }, + + createErrorMessage: function(playback, options, poster) { + var + htmlMediaElement = playback.htmlMediaElement, + errorContainer = document.createElement('div'); + + errorContainer.className = 'me-cannotplay'; + + try { + errorContainer.style.width = htmlMediaElement.width + 'px'; + errorContainer.style.height = htmlMediaElement.height + 'px'; + } catch (e) {} + + if (options.customError) { + errorContainer.innerHTML = options.customError; + } else { + errorContainer.innerHTML = (poster !== '') ? + '<a href="' + playback.url + '"><img src="' + poster + '" width="100%" height="100%" /></a>' : + '<a href="' + playback.url + '"><span>' + mejs.i18n.t('Download File') + '</span></a>'; + } + + htmlMediaElement.parentNode.insertBefore(errorContainer, htmlMediaElement); + htmlMediaElement.style.display = 'none'; + + options.error(htmlMediaElement); + }, + + createPlugin:function(playback, options, poster, autoplay, preload, controls) { + var + htmlMediaElement = playback.htmlMediaElement, + width = 1, + height = 1, + pluginid = 'me_' + playback.method + '_' + (mejs.meIndex++), + pluginMediaElement = new mejs.PluginMediaElement(pluginid, playback.method, playback.url), + container = document.createElement('div'), + specialIEContainer, + node, + initVars; + + // copy tagName from html media element + pluginMediaElement.tagName = htmlMediaElement.tagName + + // copy attributes from html media element to plugin media element + for (var i = 0; i < htmlMediaElement.attributes.length; i++) { + var attribute = htmlMediaElement.attributes[i]; + if (attribute.specified == true) { + pluginMediaElement.setAttribute(attribute.name, attribute.value); + } + } + + // check for placement inside a <p> tag (sometimes WYSIWYG editors do this) + node = htmlMediaElement.parentNode; + while (node !== null && node.tagName.toLowerCase() !== 'body' && node.parentNode != null) { + if (node.parentNode.tagName.toLowerCase() === 'p') { + node.parentNode.parentNode.insertBefore(node, node.parentNode); + break; + } + node = node.parentNode; + } + + if (playback.isVideo) { + width = (options.pluginWidth > 0) ? options.pluginWidth : (options.videoWidth > 0) ? options.videoWidth : (htmlMediaElement.getAttribute('width') !== null) ? htmlMediaElement.getAttribute('width') : options.defaultVideoWidth; + height = (options.pluginHeight > 0) ? options.pluginHeight : (options.videoHeight > 0) ? options.videoHeight : (htmlMediaElement.getAttribute('height') !== null) ? htmlMediaElement.getAttribute('height') : options.defaultVideoHeight; + + // in case of '%' make sure it's encoded + width = mejs.Utility.encodeUrl(width); + height = mejs.Utility.encodeUrl(height); + + } else { + if (options.enablePluginDebug) { + width = 320; + height = 240; + } + } + + // register plugin + pluginMediaElement.success = options.success; + mejs.MediaPluginBridge.registerPluginElement(pluginid, pluginMediaElement, htmlMediaElement); + + // add container (must be added to DOM before inserting HTML for IE) + container.className = 'me-plugin'; + container.id = pluginid + '_container'; + + if (playback.isVideo) { + htmlMediaElement.parentNode.insertBefore(container, htmlMediaElement); + } else { + document.body.insertBefore(container, document.body.childNodes[0]); + } + + // flash/silverlight vars + initVars = [ + 'id=' + pluginid, + 'isvideo=' + ((playback.isVideo) ? "true" : "false"), + 'autoplay=' + ((autoplay) ? "true" : "false"), + 'preload=' + preload, + 'width=' + width, + 'startvolume=' + options.startVolume, + 'timerrate=' + options.timerRate, + 'flashstreamer=' + options.flashStreamer, + 'height=' + height, + 'pseudostreamstart=' + options.pseudoStreamingStartQueryParam]; + + if (playback.url !== null) { + if (playback.method == 'flash') { + initVars.push('file=' + mejs.Utility.encodeUrl(playback.url)); + } else { + initVars.push('file=' + playback.url); + } + } + if (options.enablePluginDebug) { + initVars.push('debug=true'); + } + if (options.enablePluginSmoothing) { + initVars.push('smoothing=true'); + } + if (options.enablePseudoStreaming) { + initVars.push('pseudostreaming=true'); + } + if (controls) { + initVars.push('controls=true'); // shows controls in the plugin if desired + } + if (options.pluginVars) { + initVars = initVars.concat(options.pluginVars); + } + + switch (playback.method) { + case 'silverlight': + container.innerHTML = +'<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" id="' + pluginid + '" name="' + pluginid + '" width="' + width + '" height="' + height + '" class="mejs-shim">' + +'<param name="initParams" value="' + initVars.join(',') + '" />' + +'<param name="windowless" value="true" />' + +'<param name="background" value="black" />' + +'<param name="minRuntimeVersion" value="3.0.0.0" />' + +'<param name="autoUpgrade" value="true" />' + +'<param name="source" value="' + options.pluginPath + options.silverlightName + '" />' + +'</object>'; + break; + + case 'flash': + + if (mejs.MediaFeatures.isIE) { + specialIEContainer = document.createElement('div'); + container.appendChild(specialIEContainer); + specialIEContainer.outerHTML = +'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" ' + +'id="' + pluginid + '" width="' + width + '" height="' + height + '" class="mejs-shim">' + +'<param name="movie" value="' + options.pluginPath + options.flashName + '?x=' + (new Date()) + '" />' + +'<param name="flashvars" value="' + initVars.join('&') + '" />' + +'<param name="quality" value="high" />' + +'<param name="bgcolor" value="#000000" />' + +'<param name="wmode" value="transparent" />' + +'<param name="allowScriptAccess" value="always" />' + +'<param name="allowFullScreen" value="true" />' + +'<param name="scale" value="default" />' + +'</object>'; + + } else { + + container.innerHTML = +'<embed id="' + pluginid + '" name="' + pluginid + '" ' + +'play="true" ' + +'loop="false" ' + +'quality="high" ' + +'bgcolor="#000000" ' + +'wmode="transparent" ' + +'allowScriptAccess="always" ' + +'allowFullScreen="true" ' + +'type="application/x-shockwave-flash" pluginspage="//www.macromedia.com/go/getflashplayer" ' + +'src="' + options.pluginPath + options.flashName + '" ' + +'flashvars="' + initVars.join('&') + '" ' + +'width="' + width + '" ' + +'height="' + height + '" ' + +'scale="default"' + +'class="mejs-shim"></embed>'; + } + break; + + case 'youtube': + + + var videoId; + // youtu.be url from share button + if (playback.url.lastIndexOf("youtu.be") != -1) { + videoId = playback.url.substr(playback.url.lastIndexOf('/')+1); + if (videoId.indexOf('?') != -1) { + videoId = videoId.substr(0, videoId.indexOf('?')); + } + } + else { + videoId = playback.url.substr(playback.url.lastIndexOf('=')+1); + } + youtubeSettings = { + container: container, + containerId: container.id, + pluginMediaElement: pluginMediaElement, + pluginId: pluginid, + videoId: videoId, + height: height, + width: width + }; + + if (mejs.PluginDetector.hasPluginVersion('flash', [10,0,0]) ) { + mejs.YouTubeApi.createFlash(youtubeSettings); + } else { + mejs.YouTubeApi.enqueueIframe(youtubeSettings); + } + + break; + + // DEMO Code. Does NOT work. + case 'vimeo': + var player_id = pluginid + "_player"; + pluginMediaElement.vimeoid = playback.url.substr(playback.url.lastIndexOf('/')+1); + + container.innerHTML ='<iframe src="//player.vimeo.com/video/' + pluginMediaElement.vimeoid + '?api=1&portrait=0&byline=0&title=0&player_id=' + player_id + '" width="' + width +'" height="' + height +'" frameborder="0" class="mejs-shim" id="' + player_id + '"></iframe>'; + if (typeof($f) == 'function') { // froogaloop available + var player = $f(container.childNodes[0]); + player.addEvent('ready', function() { + $.extend( player, { + playVideo: function() { + player.api( 'play' ); + }, + stopVideo: function() { + player.api( 'unload' ); + }, + pauseVideo: function() { + player.api( 'pause' ); + }, + seekTo: function( seconds ) { + player.api( 'seekTo', seconds ); + }, + setVolume: function( volume ) { + player.api( 'setVolume', volume ); + }, + setMuted: function( muted ) { + if( muted ) { + player.lastVolume = player.api( 'getVolume' ); + player.api( 'setVolume', 0 ); + } else { + player.api( 'setVolume', player.lastVolume ); + delete player.lastVolume; + } + } + }); + + function createEvent(player, pluginMediaElement, eventName, e) { + var obj = { + type: eventName, + target: pluginMediaElement + }; + if (eventName == 'timeupdate') { + pluginMediaElement.currentTime = obj.currentTime = e.seconds; + pluginMediaElement.duration = obj.duration = e.duration; + } + pluginMediaElement.dispatchEvent(obj.type, obj); + } + + player.addEvent('play', function() { + createEvent(player, pluginMediaElement, 'play'); + createEvent(player, pluginMediaElement, 'playing'); + }); + + player.addEvent('pause', function() { + createEvent(player, pluginMediaElement, 'pause'); + }); + + player.addEvent('finish', function() { + createEvent(player, pluginMediaElement, 'ended'); + }); + + player.addEvent('playProgress', function(e) { + createEvent(player, pluginMediaElement, 'timeupdate', e); + }); + + pluginMediaElement.pluginElement = container; + pluginMediaElement.pluginApi = player; + + // init mejs + mejs.MediaPluginBridge.initPlugin(pluginid); + }); + } + else { + console.warn("You need to include froogaloop for vimeo to work"); + } + break; + } + // hide original element + htmlMediaElement.style.display = 'none'; + // prevent browser from autoplaying when using a plugin + htmlMediaElement.removeAttribute('autoplay'); + + // FYI: options.success will be fired by the MediaPluginBridge + + return pluginMediaElement; + }, + + updateNative: function(playback, options, autoplay, preload) { + + var htmlMediaElement = playback.htmlMediaElement, + m; + + + // add methods to video object to bring it into parity with Flash Object + for (m in mejs.HtmlMediaElement) { + htmlMediaElement[m] = mejs.HtmlMediaElement[m]; + } + + /* + Chrome now supports preload="none" + if (mejs.MediaFeatures.isChrome) { + + // special case to enforce preload attribute (Chrome doesn't respect this) + if (preload === 'none' && !autoplay) { + + // forces the browser to stop loading (note: fails in IE9) + htmlMediaElement.src = ''; + htmlMediaElement.load(); + htmlMediaElement.canceledPreload = true; + + htmlMediaElement.addEventListener('play',function() { + if (htmlMediaElement.canceledPreload) { + htmlMediaElement.src = playback.url; + htmlMediaElement.load(); + htmlMediaElement.play(); + htmlMediaElement.canceledPreload = false; + } + }, false); + // for some reason Chrome forgets how to autoplay sometimes. + } else if (autoplay) { + htmlMediaElement.load(); + htmlMediaElement.play(); + } + } + */ + + // fire success code + options.success(htmlMediaElement, htmlMediaElement); + + return htmlMediaElement; + } +}; + +/* + - test on IE (object vs. embed) + - determine when to use iframe (Firefox, Safari, Mobile) vs. Flash (Chrome, IE) + - fullscreen? +*/ + +// YouTube Flash and Iframe API +mejs.YouTubeApi = { + isIframeStarted: false, + isIframeLoaded: false, + loadIframeApi: function() { + if (!this.isIframeStarted) { + var tag = document.createElement('script'); + tag.src = "//www.youtube.com/player_api"; + var firstScriptTag = document.getElementsByTagName('script')[0]; + firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); + this.isIframeStarted = true; + } + }, + iframeQueue: [], + enqueueIframe: function(yt) { + + if (this.isLoaded) { + this.createIframe(yt); + } else { + this.loadIframeApi(); + this.iframeQueue.push(yt); + } + }, + createIframe: function(settings) { + + var + pluginMediaElement = settings.pluginMediaElement, + player = new YT.Player(settings.containerId, { + height: settings.height, + width: settings.width, + videoId: settings.videoId, + playerVars: {controls:0}, + events: { + 'onReady': function() { + + // hook up iframe object to MEjs + settings.pluginMediaElement.pluginApi = player; + + // init mejs + mejs.MediaPluginBridge.initPlugin(settings.pluginId); + + // create timer + setInterval(function() { + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'timeupdate'); + }, 250); + }, + 'onStateChange': function(e) { + + mejs.YouTubeApi.handleStateChange(e.data, player, pluginMediaElement); + + } + } + }); + }, + + createEvent: function (player, pluginMediaElement, eventName) { + var obj = { + type: eventName, + target: pluginMediaElement + }; + + if (player && player.getDuration) { + + // time + pluginMediaElement.currentTime = obj.currentTime = player.getCurrentTime(); + pluginMediaElement.duration = obj.duration = player.getDuration(); + + // state + obj.paused = pluginMediaElement.paused; + obj.ended = pluginMediaElement.ended; + + // sound + obj.muted = player.isMuted(); + obj.volume = player.getVolume() / 100; + + // progress + obj.bytesTotal = player.getVideoBytesTotal(); + obj.bufferedBytes = player.getVideoBytesLoaded(); + + // fake the W3C buffered TimeRange + var bufferedTime = obj.bufferedBytes / obj.bytesTotal * obj.duration; + + obj.target.buffered = obj.buffered = { + start: function(index) { + return 0; + }, + end: function (index) { + return bufferedTime; + }, + length: 1 + }; + + } + + // send event up the chain + pluginMediaElement.dispatchEvent(obj.type, obj); + }, + + iFrameReady: function() { + + this.isLoaded = true; + this.isIframeLoaded = true; + + while (this.iframeQueue.length > 0) { + var settings = this.iframeQueue.pop(); + this.createIframe(settings); + } + }, + + // FLASH! + flashPlayers: {}, + createFlash: function(settings) { + + this.flashPlayers[settings.pluginId] = settings; + + /* + settings.container.innerHTML = + '<object type="application/x-shockwave-flash" id="' + settings.pluginId + '" data="//www.youtube.com/apiplayer?enablejsapi=1&playerapiid=' + settings.pluginId + '&version=3&autoplay=0&controls=0&modestbranding=1&loop=0" ' + + 'width="' + settings.width + '" height="' + settings.height + '" style="visibility: visible; " class="mejs-shim">' + + '<param name="allowScriptAccess" value="always">' + + '<param name="wmode" value="transparent">' + + '</object>'; + */ + + var specialIEContainer, + youtubeUrl = '//www.youtube.com/apiplayer?enablejsapi=1&playerapiid=' + settings.pluginId + '&version=3&autoplay=0&controls=0&modestbranding=1&loop=0'; + + if (mejs.MediaFeatures.isIE) { + + specialIEContainer = document.createElement('div'); + settings.container.appendChild(specialIEContainer); + specialIEContainer.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" ' + +'id="' + settings.pluginId + '" width="' + settings.width + '" height="' + settings.height + '" class="mejs-shim">' + + '<param name="movie" value="' + youtubeUrl + '" />' + + '<param name="wmode" value="transparent" />' + + '<param name="allowScriptAccess" value="always" />' + + '<param name="allowFullScreen" value="true" />' + +'</object>'; + } else { + settings.container.innerHTML = + '<object type="application/x-shockwave-flash" id="' + settings.pluginId + '" data="' + youtubeUrl + '" ' + + 'width="' + settings.width + '" height="' + settings.height + '" style="visibility: visible; " class="mejs-shim">' + + '<param name="allowScriptAccess" value="always">' + + '<param name="wmode" value="transparent">' + + '</object>'; + } + + }, + + flashReady: function(id) { + var + settings = this.flashPlayers[id], + player = document.getElementById(id), + pluginMediaElement = settings.pluginMediaElement; + + // hook up and return to MediaELementPlayer.success + pluginMediaElement.pluginApi = + pluginMediaElement.pluginElement = player; + mejs.MediaPluginBridge.initPlugin(id); + + // load the youtube video + player.cueVideoById(settings.videoId); + + var callbackName = settings.containerId + '_callback'; + + window[callbackName] = function(e) { + mejs.YouTubeApi.handleStateChange(e, player, pluginMediaElement); + } + + player.addEventListener('onStateChange', callbackName); + + setInterval(function() { + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'timeupdate'); + }, 250); + + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'canplay'); + }, + + handleStateChange: function(youTubeState, player, pluginMediaElement) { + switch (youTubeState) { + case -1: // not started + pluginMediaElement.paused = true; + pluginMediaElement.ended = true; + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'loadedmetadata'); + //createYouTubeEvent(player, pluginMediaElement, 'loadeddata'); + break; + case 0: + pluginMediaElement.paused = false; + pluginMediaElement.ended = true; + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'ended'); + break; + case 1: + pluginMediaElement.paused = false; + pluginMediaElement.ended = false; + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'play'); + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'playing'); + break; + case 2: + pluginMediaElement.paused = true; + pluginMediaElement.ended = false; + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'pause'); + break; + case 3: // buffering + mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'progress'); + break; + case 5: + // cued? + break; + + } + + } +} +// IFRAME +function onYouTubePlayerAPIReady() { + mejs.YouTubeApi.iFrameReady(); +} +// FLASH +function onYouTubePlayerReady(id) { + mejs.YouTubeApi.flashReady(id); +} + +window.mejs = mejs; +window.MediaElement = mejs.MediaElement; + +/*! + * Adds Internationalization and localization to mediaelement. + * + * This file does not contain translations, you have to add the manually. + * The schema is always the same: me-i18n-locale-[ISO_639-1 Code].js + * + * Examples are provided both for german and chinese translation. + * + * + * What is the concept beyond i18n? + * http://en.wikipedia.org/wiki/Internationalization_and_localization + * + * What langcode should i use? + * http://en.wikipedia.org/wiki/ISO_639-1 + * + * + * License? + * + * The i18n file uses methods from the Drupal project (drupal.js): + * - i18n.methods.t() (modified) + * - i18n.methods.checkPlain() (full copy) + * + * The Drupal project is (like mediaelementjs) licensed under GPLv2. + * - http://drupal.org/licensing/faq/#q1 + * - https://github.com/johndyer/mediaelement + * - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * + * + * @author + * Tim Latz (latz.tim@gmail.com) + * + * + * @params + * - context - document, iframe .. + * - exports - CommonJS, window .. + * + */ +;(function(context, exports, undefined) { + "use strict"; + var i18n = { + "locale": { + "language" : '', + "strings" : {} + }, + "methods" : {} + }; +// start i18n + + + /** + * Get language, fallback to browser's language if empty + */ + i18n.getLanguage = function () { + var language = i18n.locale.language || window.navigator.userLanguage || window.navigator.language; + // convert to iso 639-1 (2-letters, lower case) + return language.substr(0, 2).toLowerCase(); + }; + + // i18n fixes for compatibility with WordPress + if ( typeof mejsL10n != 'undefined' ) { + i18n.locale.language = mejsL10n.language; + } + + + + /** + * Encode special characters in a plain-text string for display as HTML. + */ + i18n.methods.checkPlain = function (str) { + var character, regex, + replace = { + '&': '&', + '"': '"', + '<': '<', + '>': '>' + }; + str = String(str); + for (character in replace) { + if (replace.hasOwnProperty(character)) { + regex = new RegExp(character, 'g'); + str = str.replace(regex, replace[character]); + } + } + return str; + }; + + /** + * Translate strings to the page language or a given language. + * + * + * @param str + * A string containing the English string to translate. + * + * @param options + * - 'context' (defaults to the default context): The context the source string + * belongs to. + * + * @return + * The translated string, escaped via i18n.methods.checkPlain() + */ + i18n.methods.t = function (str, options) { + + // Fetch the localized version of the string. + if (i18n.locale.strings && i18n.locale.strings[options.context] && i18n.locale.strings[options.context][str]) { + str = i18n.locale.strings[options.context][str]; + } + + return i18n.methods.checkPlain(str); + }; + + + /** + * Wrapper for i18n.methods.t() + * + * @see i18n.methods.t() + * @throws InvalidArgumentException + */ + i18n.t = function(str, options) { + + if (typeof str === 'string' && str.length > 0) { + + // check every time due language can change for + // different reasons (translation, lang switcher ..) + var language = i18n.getLanguage(); + + options = options || { + "context" : language + }; + + return i18n.methods.t(str, options); + } + else { + throw { + "name" : 'InvalidArgumentException', + "message" : 'First argument is either not a string or empty.' + }; + } + }; + +// end i18n + exports.i18n = i18n; +}(document, mejs)); + +// i18n fixes for compatibility with WordPress +;(function(exports, undefined) { + + "use strict"; + + if ( typeof mejsL10n != 'undefined' ) { + exports[mejsL10n.language] = mejsL10n.strings; + } + +}(mejs.i18n.locale.strings)); + +/*! + * This is a i18n.locale language object. + * + * German translation by Tim Latz, latz.tim@gmail.com + * + * @author + * Tim Latz (latz.tim@gmail.com) + * + * @see + * me-i18n.js + * + * @params + * - exports - CommonJS, window .. + */ +;(function(exports, undefined) { + + "use strict"; + + if (typeof exports.de === 'undefined') { + exports.de = { + "Fullscreen" : "Vollbild", + "Go Fullscreen" : "Vollbild an", + "Turn off Fullscreen" : "Vollbild aus", + "Close" : "Schließen" + }; + } + +}(mejs.i18n.locale.strings)); +/*! + * This is a i18n.locale language object. + * + * Traditional chinese translation by Tim Latz, latz.tim@gmail.com + * + * @author + * Tim Latz (latz.tim@gmail.com) + * + * @see + * me-i18n.js + * + * @params + * - exports - CommonJS, window .. + */ +;(function(exports, undefined) { + + "use strict"; + + if (typeof exports.zh === 'undefined') { + exports.zh = { + "Fullscreen" : "全螢幕", + "Go Fullscreen" : "全屏模式", + "Turn off Fullscreen" : "退出全屏模式", + "Close" : "關閉" + }; + } + +}(mejs.i18n.locale.strings)); + diff --git a/lib/mejs/mediaelement.min.js b/lib/mejs/mediaelement.min.js new file mode 100755 index 00000000..d14d65f4 --- /dev/null +++ b/lib/mejs/mediaelement.min.js @@ -0,0 +1,72 @@ +/*! +* MediaElement.js +* HTML5 <video> and <audio> shim and player +* http://mediaelementjs.com/ +* +* Creates a JavaScript object that mimics HTML5 MediaElement API +* for browsers that don't understand HTML5 or can't play the provided codec +* Can play MP4 (H.264), Ogg, WebM, FLV, WMV, WMA, ACC, and MP3 +* +* Copyright 2010-2014, John Dyer (http://j.hn) +* License: MIT +* +*/var mejs=mejs||{};mejs.version="2.15.1";mejs.meIndex=0; +mejs.plugins={silverlight:[{version:[3,0],types:["video/mp4","video/m4v","video/mov","video/wmv","audio/wma","audio/m4a","audio/mp3","audio/wav","audio/mpeg"]}],flash:[{version:[9,0,124],types:["video/mp4","video/m4v","video/mov","video/flv","video/rtmp","video/x-flv","audio/flv","audio/x-flv","audio/mp3","audio/m4a","audio/mpeg","video/youtube","video/x-youtube","application/x-mpegURL"]}],youtube:[{version:null,types:["video/youtube","video/x-youtube","audio/youtube","audio/x-youtube"]}],vimeo:[{version:null, +types:["video/vimeo","video/x-vimeo"]}]}; +mejs.Utility={encodeUrl:function(a){return encodeURIComponent(a)},escapeHTML:function(a){return a.toString().split("&").join("&").split("<").join("<").split('"').join(""")},absolutizeUrl:function(a){var b=document.createElement("div");b.innerHTML='<a href="'+this.escapeHTML(a)+'">x</a>';return b.firstChild.href},getScriptPath:function(a){for(var b=0,c,d="",e="",g,f,i=document.getElementsByTagName("script"),k=i.length,h=a.length;b<k;b++){g=i[b].src;c=g.lastIndexOf("/");if(c>-1){f=g.substring(c+ +1);g=g.substring(0,c+1)}else{f=g;g=""}for(c=0;c<h;c++){e=a[c];e=f.indexOf(e);if(e>-1){d=g;break}}if(d!=="")break}return d},secondsToTimeCode:function(a,b,c,d){if(typeof c=="undefined")c=false;else if(typeof d=="undefined")d=25;var e=Math.floor(a/3600)%24,g=Math.floor(a/60)%60,f=Math.floor(a%60);a=Math.floor((a%1*d).toFixed(3));return(b||e>0?(e<10?"0"+e:e)+":":"")+(g<10?"0"+g:g)+":"+(f<10?"0"+f:f)+(c?":"+(a<10?"0"+a:a):"")},timeCodeToSeconds:function(a,b,c,d){if(typeof c=="undefined")c=false;else if(typeof d== +"undefined")d=25;a=a.split(":");b=parseInt(a[0],10);var e=parseInt(a[1],10),g=parseInt(a[2],10),f=0,i=0;if(c)f=parseInt(a[3])/d;return i=b*3600+e*60+g+f},convertSMPTEtoSeconds:function(a){if(typeof a!="string")return false;a=a.replace(",",".");var b=0,c=a.indexOf(".")!=-1?a.split(".")[1].length:0,d=1;a=a.split(":").reverse();for(var e=0;e<a.length;e++){d=1;if(e>0)d=Math.pow(60,e);b+=Number(a[e])*d}return Number(b.toFixed(c))},removeSwf:function(a){var b=document.getElementById(a);if(b&&/object|embed/i.test(b.nodeName))if(mejs.MediaFeatures.isIE){b.style.display= +"none";(function(){b.readyState==4?mejs.Utility.removeObjectInIE(a):setTimeout(arguments.callee,10)})()}else b.parentNode.removeChild(b)},removeObjectInIE:function(a){if(a=document.getElementById(a)){for(var b in a)if(typeof a[b]=="function")a[b]=null;a.parentNode.removeChild(a)}}}; +mejs.PluginDetector={hasPluginVersion:function(a,b){var c=this.plugins[a];b[1]=b[1]||0;b[2]=b[2]||0;return c[0]>b[0]||c[0]==b[0]&&c[1]>b[1]||c[0]==b[0]&&c[1]==b[1]&&c[2]>=b[2]?true:false},nav:window.navigator,ua:window.navigator.userAgent.toLowerCase(),plugins:[],addPlugin:function(a,b,c,d,e){this.plugins[a]=this.detectPlugin(b,c,d,e)},detectPlugin:function(a,b,c,d){var e=[0,0,0],g;if(typeof this.nav.plugins!="undefined"&&typeof this.nav.plugins[a]=="object"){if((c=this.nav.plugins[a].description)&& +!(typeof this.nav.mimeTypes!="undefined"&&this.nav.mimeTypes[b]&&!this.nav.mimeTypes[b].enabledPlugin)){e=c.replace(a,"").replace(/^\s+/,"").replace(/\sr/gi,".").split(".");for(a=0;a<e.length;a++)e[a]=parseInt(e[a].match(/\d+/),10)}}else if(typeof window.ActiveXObject!="undefined")try{if(g=new ActiveXObject(c))e=d(g)}catch(f){}return e}}; +mejs.PluginDetector.addPlugin("flash","Shockwave Flash","application/x-shockwave-flash","ShockwaveFlash.ShockwaveFlash",function(a){var b=[];if(a=a.GetVariable("$version")){a=a.split(" ")[1].split(",");b=[parseInt(a[0],10),parseInt(a[1],10),parseInt(a[2],10)]}return b}); +mejs.PluginDetector.addPlugin("silverlight","Silverlight Plug-In","application/x-silverlight-2","AgControl.AgControl",function(a){var b=[0,0,0,0],c=function(d,e,g,f){for(;d.isVersionSupported(e[0]+"."+e[1]+"."+e[2]+"."+e[3]);)e[g]+=f;e[g]-=f};c(a,b,0,1);c(a,b,1,1);c(a,b,2,1E4);c(a,b,2,1E3);c(a,b,2,100);c(a,b,2,10);c(a,b,2,1);c(a,b,3,1);return b}); +mejs.MediaFeatures={init:function(){var a=this,b=document,c=mejs.PluginDetector.nav,d=mejs.PluginDetector.ua.toLowerCase(),e,g=["source","track","audio","video"];a.isiPad=d.match(/ipad/i)!==null;a.isiPhone=d.match(/iphone/i)!==null;a.isiOS=a.isiPhone||a.isiPad;a.isAndroid=d.match(/android/i)!==null;a.isBustedAndroid=d.match(/android 2\.[12]/)!==null;a.isBustedNativeHTTPS=location.protocol==="https:"&&(d.match(/android [12]\./)!==null||d.match(/macintosh.* version.* safari/)!==null);a.isIE=c.appName.toLowerCase().indexOf("microsoft")!= +-1||c.appName.toLowerCase().match(/trident/gi)!==null;a.isChrome=d.match(/chrome/gi)!==null;a.isChromium=d.match(/chromium/gi)!==null;a.isFirefox=d.match(/firefox/gi)!==null;a.isWebkit=d.match(/webkit/gi)!==null;a.isGecko=d.match(/gecko/gi)!==null&&!a.isWebkit&&!a.isIE;a.isOpera=d.match(/opera/gi)!==null;a.hasTouch="ontouchstart"in window;a.svg=!!document.createElementNS&&!!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect;for(c=0;c<g.length;c++)e=document.createElement(g[c]); +a.supportsMediaTag=typeof e.canPlayType!=="undefined"||a.isBustedAndroid;try{e.canPlayType("video/mp4")}catch(f){a.supportsMediaTag=false}a.hasSemiNativeFullScreen=typeof e.webkitEnterFullscreen!=="undefined";a.hasNativeFullscreen=typeof e.requestFullscreen!=="undefined";a.hasWebkitNativeFullScreen=typeof e.webkitRequestFullScreen!=="undefined";a.hasMozNativeFullScreen=typeof e.mozRequestFullScreen!=="undefined";a.hasMsNativeFullScreen=typeof e.msRequestFullscreen!=="undefined";a.hasTrueNativeFullScreen= +a.hasWebkitNativeFullScreen||a.hasMozNativeFullScreen||a.hasMsNativeFullScreen;a.nativeFullScreenEnabled=a.hasTrueNativeFullScreen;if(a.hasMozNativeFullScreen)a.nativeFullScreenEnabled=document.mozFullScreenEnabled;else if(a.hasMsNativeFullScreen)a.nativeFullScreenEnabled=document.msFullscreenEnabled;if(a.isChrome)a.hasSemiNativeFullScreen=false;if(a.hasTrueNativeFullScreen){a.fullScreenEventName="";if(a.hasWebkitNativeFullScreen)a.fullScreenEventName="webkitfullscreenchange";else if(a.hasMozNativeFullScreen)a.fullScreenEventName= +"mozfullscreenchange";else if(a.hasMsNativeFullScreen)a.fullScreenEventName="MSFullscreenChange";a.isFullScreen=function(){if(a.hasMozNativeFullScreen)return b.mozFullScreen;else if(a.hasWebkitNativeFullScreen)return b.webkitIsFullScreen;else if(a.hasMsNativeFullScreen)return b.msFullscreenElement!==null};a.requestFullScreen=function(i){if(a.hasWebkitNativeFullScreen)i.webkitRequestFullScreen();else if(a.hasMozNativeFullScreen)i.mozRequestFullScreen();else a.hasMsNativeFullScreen&&i.msRequestFullscreen()}; +a.cancelFullScreen=function(){if(a.hasWebkitNativeFullScreen)document.webkitCancelFullScreen();else if(a.hasMozNativeFullScreen)document.mozCancelFullScreen();else a.hasMsNativeFullScreen&&document.msExitFullscreen()}}if(a.hasSemiNativeFullScreen&&d.match(/mac os x 10_5/i)){a.hasNativeFullScreen=false;a.hasSemiNativeFullScreen=false}}};mejs.MediaFeatures.init(); +mejs.HtmlMediaElement={pluginType:"native",isFullScreen:false,setCurrentTime:function(a){this.currentTime=a},setMuted:function(a){this.muted=a},setVolume:function(a){this.volume=a},stop:function(){this.pause()},setSrc:function(a){for(var b=this.getElementsByTagName("source");b.length>0;)this.removeChild(b[0]);if(typeof a=="string")this.src=a;else{var c;for(b=0;b<a.length;b++){c=a[b];if(this.canPlayType(c.type)){this.src=c.src;break}}}},setVideoSize:function(a,b){this.width=a;this.height=b}}; +mejs.PluginMediaElement=function(a,b,c){this.id=a;this.pluginType=b;this.src=c;this.events={};this.attributes={}}; +mejs.PluginMediaElement.prototype={pluginElement:null,pluginType:"",isFullScreen:false,playbackRate:-1,defaultPlaybackRate:-1,seekable:[],played:[],paused:true,ended:false,seeking:false,duration:0,error:null,tagName:"",muted:false,volume:1,currentTime:0,play:function(){if(this.pluginApi!=null){this.pluginType=="youtube"||this.pluginType=="vimeo"?this.pluginApi.playVideo():this.pluginApi.playMedia();this.paused=false}},load:function(){if(this.pluginApi!=null){this.pluginType=="youtube"||this.pluginType== +"vimeo"||this.pluginApi.loadMedia();this.paused=false}},pause:function(){if(this.pluginApi!=null){this.pluginType=="youtube"||this.pluginType=="vimeo"?this.pluginApi.pauseVideo():this.pluginApi.pauseMedia();this.paused=true}},stop:function(){if(this.pluginApi!=null){this.pluginType=="youtube"||this.pluginType=="vimeo"?this.pluginApi.stopVideo():this.pluginApi.stopMedia();this.paused=true}},canPlayType:function(a){var b,c,d,e=mejs.plugins[this.pluginType];for(b=0;b<e.length;b++){d=e[b];if(mejs.PluginDetector.hasPluginVersion(this.pluginType, +d.version))for(c=0;c<d.types.length;c++)if(a==d.types[c])return"probably"}return""},positionFullscreenButton:function(a,b,c){this.pluginApi!=null&&this.pluginApi.positionFullscreenButton&&this.pluginApi.positionFullscreenButton(Math.floor(a),Math.floor(b),c)},hideFullscreenButton:function(){this.pluginApi!=null&&this.pluginApi.hideFullscreenButton&&this.pluginApi.hideFullscreenButton()},setSrc:function(a){if(typeof a=="string"){this.pluginApi.setSrc(mejs.Utility.absolutizeUrl(a));this.src=mejs.Utility.absolutizeUrl(a)}else{var b, +c;for(b=0;b<a.length;b++){c=a[b];if(this.canPlayType(c.type)){this.pluginApi.setSrc(mejs.Utility.absolutizeUrl(c.src));this.src=mejs.Utility.absolutizeUrl(a);break}}}},setCurrentTime:function(a){if(this.pluginApi!=null){this.pluginType=="youtube"||this.pluginType=="vimeo"?this.pluginApi.seekTo(a):this.pluginApi.setCurrentTime(a);this.currentTime=a}},setVolume:function(a){if(this.pluginApi!=null){this.pluginType=="youtube"?this.pluginApi.setVolume(a*100):this.pluginApi.setVolume(a);this.volume=a}}, +setMuted:function(a){if(this.pluginApi!=null){if(this.pluginType=="youtube"){a?this.pluginApi.mute():this.pluginApi.unMute();this.muted=a;this.dispatchEvent("volumechange")}else this.pluginApi.setMuted(a);this.muted=a}},setVideoSize:function(a,b){if(this.pluginElement&&this.pluginElement.style){this.pluginElement.style.width=a+"px";this.pluginElement.style.height=b+"px"}this.pluginApi!=null&&this.pluginApi.setVideoSize&&this.pluginApi.setVideoSize(a,b)},setFullscreen:function(a){this.pluginApi!=null&& +this.pluginApi.setFullscreen&&this.pluginApi.setFullscreen(a)},enterFullScreen:function(){this.pluginApi!=null&&this.pluginApi.setFullscreen&&this.setFullscreen(true)},exitFullScreen:function(){this.pluginApi!=null&&this.pluginApi.setFullscreen&&this.setFullscreen(false)},addEventListener:function(a,b){this.events[a]=this.events[a]||[];this.events[a].push(b)},removeEventListener:function(a,b){if(!a){this.events={};return true}var c=this.events[a];if(!c)return true;if(!b){this.events[a]=[];return true}for(var d= +0;d<c.length;d++)if(c[d]===b){this.events[a].splice(d,1);return true}return false},dispatchEvent:function(a){var b,c,d=this.events[a];if(d){c=Array.prototype.slice.call(arguments,1);for(b=0;b<d.length;b++)d[b].apply(null,c)}},hasAttribute:function(a){return a in this.attributes},removeAttribute:function(a){delete this.attributes[a]},getAttribute:function(a){if(this.hasAttribute(a))return this.attributes[a];return""},setAttribute:function(a,b){this.attributes[a]=b},remove:function(){mejs.Utility.removeSwf(this.pluginElement.id); +mejs.MediaPluginBridge.unregisterPluginElement(this.pluginElement.id)}}; +mejs.MediaPluginBridge={pluginMediaElements:{},htmlMediaElements:{},registerPluginElement:function(a,b,c){this.pluginMediaElements[a]=b;this.htmlMediaElements[a]=c},unregisterPluginElement:function(a){delete this.pluginMediaElements[a];delete this.htmlMediaElements[a]},initPlugin:function(a){var b=this.pluginMediaElements[a],c=this.htmlMediaElements[a];if(b){switch(b.pluginType){case "flash":b.pluginElement=b.pluginApi=document.getElementById(a);break;case "silverlight":b.pluginElement=document.getElementById(b.id); +b.pluginApi=b.pluginElement.Content.MediaElementJS}b.pluginApi!=null&&b.success&&b.success(b,c)}},fireEvent:function(a,b,c){var d,e;if(a=this.pluginMediaElements[a]){b={type:b,target:a};for(d in c){a[d]=c[d];b[d]=c[d]}e=c.bufferedTime||0;b.target.buffered=b.buffered={start:function(){return 0},end:function(){return e},length:1};a.dispatchEvent(b.type,b)}}}; +mejs.MediaElementDefaults={mode:"auto",plugins:["flash","silverlight","youtube","vimeo"],enablePluginDebug:false,httpsBasicAuthSite:false,type:"",pluginPath:mejs.Utility.getScriptPath(["mediaelement.js","mediaelement.min.js","mediaelement-and-player.js","mediaelement-and-player.min.js"]),flashName:"flashmediaelement.swf",flashStreamer:"",enablePluginSmoothing:false,enablePseudoStreaming:false,pseudoStreamingStartQueryParam:"start",silverlightName:"silverlightmediaelement.xap",defaultVideoWidth:480, +defaultVideoHeight:270,pluginWidth:-1,pluginHeight:-1,pluginVars:[],timerRate:250,startVolume:0.8,success:function(){},error:function(){}};mejs.MediaElement=function(a,b){return mejs.HtmlMediaElementShim.create(a,b)}; +mejs.HtmlMediaElementShim={create:function(a,b){var c=mejs.MediaElementDefaults,d=typeof a=="string"?document.getElementById(a):a,e=d.tagName.toLowerCase(),g=e==="audio"||e==="video",f=g?d.getAttribute("src"):d.getAttribute("href");e=d.getAttribute("poster");var i=d.getAttribute("autoplay"),k=d.getAttribute("preload"),h=d.getAttribute("controls"),j;for(j in b)c[j]=b[j];f=typeof f=="undefined"||f===null||f==""?null:f;e=typeof e=="undefined"||e===null?"":e;k=typeof k=="undefined"||k===null||k==="false"? +"none":k;i=!(typeof i=="undefined"||i===null||i==="false");h=!(typeof h=="undefined"||h===null||h==="false");j=this.determinePlayback(d,c,mejs.MediaFeatures.supportsMediaTag,g,f);j.url=j.url!==null?mejs.Utility.absolutizeUrl(j.url):"";if(j.method=="native"){if(mejs.MediaFeatures.isBustedAndroid){d.src=j.url;d.addEventListener("click",function(){d.play()},false)}return this.updateNative(j,c,i,k)}else if(j.method!=="")return this.createPlugin(j,c,e,i,k,h);else{this.createErrorMessage(j,c,e);return this}}, +determinePlayback:function(a,b,c,d,e){var g=[],f,i,k,h={method:"",url:"",htmlMediaElement:a,isVideo:a.tagName.toLowerCase()!="audio"},j;if(typeof b.type!="undefined"&&b.type!=="")if(typeof b.type=="string")g.push({type:b.type,url:e});else for(f=0;f<b.type.length;f++)g.push({type:b.type[f],url:e});else if(e!==null){k=this.formatType(e,a.getAttribute("type"));g.push({type:k,url:e})}else for(f=0;f<a.childNodes.length;f++){i=a.childNodes[f];if(i.nodeType==1&&i.tagName.toLowerCase()=="source"){e=i.getAttribute("src"); +k=this.formatType(e,i.getAttribute("type"));i=i.getAttribute("media");if(!i||!window.matchMedia||window.matchMedia&&window.matchMedia(i).matches)g.push({type:k,url:e})}}if(!d&&g.length>0&&g[0].url!==null&&this.getTypeFromFile(g[0].url).indexOf("audio")>-1)h.isVideo=false;if(mejs.MediaFeatures.isBustedAndroid)a.canPlayType=function(m){return m.match(/video\/(mp4|m4v)/gi)!==null?"maybe":""};if(mejs.MediaFeatures.isChromium)a.canPlayType=function(m){return m.match(/video\/(webm|ogv|ogg)/gi)!==null?"maybe": +""};if(c&&(b.mode==="auto"||b.mode==="auto_plugin"||b.mode==="native")&&!(mejs.MediaFeatures.isBustedNativeHTTPS&&b.httpsBasicAuthSite===true)){if(!d){f=document.createElement(h.isVideo?"video":"audio");a.parentNode.insertBefore(f,a);a.style.display="none";h.htmlMediaElement=a=f}for(f=0;f<g.length;f++)if(g[f].type=="video/m3u8"||a.canPlayType(g[f].type).replace(/no/,"")!==""||a.canPlayType(g[f].type.replace(/mp3/,"mpeg")).replace(/no/,"")!==""||a.canPlayType(g[f].type.replace(/m4a/,"mp4")).replace(/no/, +"")!==""){h.method="native";h.url=g[f].url;break}if(h.method==="native"){if(h.url!==null)a.src=h.url;if(b.mode!=="auto_plugin")return h}}if(b.mode==="auto"||b.mode==="auto_plugin"||b.mode==="shim")for(f=0;f<g.length;f++){k=g[f].type;for(a=0;a<b.plugins.length;a++){e=b.plugins[a];i=mejs.plugins[e];for(c=0;c<i.length;c++){j=i[c];if(j.version==null||mejs.PluginDetector.hasPluginVersion(e,j.version))for(d=0;d<j.types.length;d++)if(k==j.types[d]){h.method=e;h.url=g[f].url;return h}}}}if(b.mode==="auto_plugin"&& +h.method==="native")return h;if(h.method===""&&g.length>0)h.url=g[0].url;return h},formatType:function(a,b){return a&&!b?this.getTypeFromFile(a):b&&~b.indexOf(";")?b.substr(0,b.indexOf(";")):b},getTypeFromFile:function(a){a=a.split("?")[0];a=a.substring(a.lastIndexOf(".")+1).toLowerCase();return(/(mp4|m4v|ogg|ogv|m3u8|webm|webmv|flv|wmv|mpeg|mov)/gi.test(a)?"video":"audio")+"/"+this.getTypeFromExtension(a)},getTypeFromExtension:function(a){switch(a){case "mp4":case "m4v":case "m4a":return"mp4";case "webm":case "webma":case "webmv":return"webm"; +case "ogg":case "oga":case "ogv":return"ogg";default:return a}},createErrorMessage:function(a,b,c){var d=a.htmlMediaElement,e=document.createElement("div");e.className="me-cannotplay";try{e.style.width=d.width+"px";e.style.height=d.height+"px"}catch(g){}e.innerHTML=b.customError?b.customError:c!==""?'<a href="'+a.url+'"><img src="'+c+'" width="100%" height="100%" /></a>':'<a href="'+a.url+'"><span>'+mejs.i18n.t("Download File")+"</span></a>";d.parentNode.insertBefore(e,d);d.style.display="none";b.error(d)}, +createPlugin:function(a,b,c,d,e,g){c=a.htmlMediaElement;var f=1,i=1,k="me_"+a.method+"_"+mejs.meIndex++,h=new mejs.PluginMediaElement(k,a.method,a.url),j=document.createElement("div"),m;h.tagName=c.tagName;for(m=0;m<c.attributes.length;m++){var q=c.attributes[m];q.specified==true&&h.setAttribute(q.name,q.value)}for(m=c.parentNode;m!==null&&m.tagName.toLowerCase()!=="body"&&m.parentNode!=null;){if(m.parentNode.tagName.toLowerCase()==="p"){m.parentNode.parentNode.insertBefore(m,m.parentNode);break}m= +m.parentNode}if(a.isVideo){f=b.pluginWidth>0?b.pluginWidth:b.videoWidth>0?b.videoWidth:c.getAttribute("width")!==null?c.getAttribute("width"):b.defaultVideoWidth;i=b.pluginHeight>0?b.pluginHeight:b.videoHeight>0?b.videoHeight:c.getAttribute("height")!==null?c.getAttribute("height"):b.defaultVideoHeight;f=mejs.Utility.encodeUrl(f);i=mejs.Utility.encodeUrl(i)}else if(b.enablePluginDebug){f=320;i=240}h.success=b.success;mejs.MediaPluginBridge.registerPluginElement(k,h,c);j.className="me-plugin";j.id= +k+"_container";a.isVideo?c.parentNode.insertBefore(j,c):document.body.insertBefore(j,document.body.childNodes[0]);d=["id="+k,"isvideo="+(a.isVideo?"true":"false"),"autoplay="+(d?"true":"false"),"preload="+e,"width="+f,"startvolume="+b.startVolume,"timerrate="+b.timerRate,"flashstreamer="+b.flashStreamer,"height="+i,"pseudostreamstart="+b.pseudoStreamingStartQueryParam];if(a.url!==null)a.method=="flash"?d.push("file="+mejs.Utility.encodeUrl(a.url)):d.push("file="+a.url);b.enablePluginDebug&&d.push("debug=true"); +b.enablePluginSmoothing&&d.push("smoothing=true");b.enablePseudoStreaming&&d.push("pseudostreaming=true");g&&d.push("controls=true");if(b.pluginVars)d=d.concat(b.pluginVars);switch(a.method){case "silverlight":j.innerHTML='<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" id="'+k+'" name="'+k+'" width="'+f+'" height="'+i+'" class="mejs-shim"><param name="initParams" value="'+d.join(",")+'" /><param name="windowless" value="true" /><param name="background" value="black" /><param name="minRuntimeVersion" value="3.0.0.0" /><param name="autoUpgrade" value="true" /><param name="source" value="'+ +b.pluginPath+b.silverlightName+'" /></object>';break;case "flash":if(mejs.MediaFeatures.isIE){a=document.createElement("div");j.appendChild(a);a.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" id="'+k+'" width="'+f+'" height="'+i+'" class="mejs-shim"><param name="movie" value="'+b.pluginPath+b.flashName+"?x="+new Date+'" /><param name="flashvars" value="'+d.join("&")+'" /><param name="quality" value="high" /><param name="bgcolor" value="#000000" /><param name="wmode" value="transparent" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="scale" value="default" /></object>'}else j.innerHTML= +'<embed id="'+k+'" name="'+k+'" play="true" loop="false" quality="high" bgcolor="#000000" wmode="transparent" allowScriptAccess="always" allowFullScreen="true" type="application/x-shockwave-flash" pluginspage="//www.macromedia.com/go/getflashplayer" src="'+b.pluginPath+b.flashName+'" flashvars="'+d.join("&")+'" width="'+f+'" height="'+i+'" scale="default"class="mejs-shim"></embed>';break;case "youtube":if(a.url.lastIndexOf("youtu.be")!=-1){a=a.url.substr(a.url.lastIndexOf("/")+1);if(a.indexOf("?")!= +-1)a=a.substr(0,a.indexOf("?"))}else a=a.url.substr(a.url.lastIndexOf("=")+1);youtubeSettings={container:j,containerId:j.id,pluginMediaElement:h,pluginId:k,videoId:a,height:i,width:f};mejs.PluginDetector.hasPluginVersion("flash",[10,0,0])?mejs.YouTubeApi.createFlash(youtubeSettings):mejs.YouTubeApi.enqueueIframe(youtubeSettings);break;case "vimeo":b=k+"_player";h.vimeoid=a.url.substr(a.url.lastIndexOf("/")+1);j.innerHTML='<iframe src="//player.vimeo.com/video/'+h.vimeoid+"?api=1&portrait=0&byline=0&title=0&player_id="+ +b+'" width="'+f+'" height="'+i+'" frameborder="0" class="mejs-shim" id="'+b+'"></iframe>';if(typeof $f=="function"){var l=$f(j.childNodes[0]);l.addEvent("ready",function(){function o(n,p,r,s){n={type:r,target:p};if(r=="timeupdate"){p.currentTime=n.currentTime=s.seconds;p.duration=n.duration=s.duration}p.dispatchEvent(n.type,n)}$.extend(l,{playVideo:function(){l.api("play")},stopVideo:function(){l.api("unload")},pauseVideo:function(){l.api("pause")},seekTo:function(n){l.api("seekTo",n)},setVolume:function(n){l.api("setVolume", +n)},setMuted:function(n){if(n){l.lastVolume=l.api("getVolume");l.api("setVolume",0)}else{l.api("setVolume",l.lastVolume);delete l.lastVolume}}});l.addEvent("play",function(){o(l,h,"play");o(l,h,"playing")});l.addEvent("pause",function(){o(l,h,"pause")});l.addEvent("finish",function(){o(l,h,"ended")});l.addEvent("playProgress",function(n){o(l,h,"timeupdate",n)});h.pluginElement=j;h.pluginApi=l;mejs.MediaPluginBridge.initPlugin(k)})}else console.warn("You need to include froogaloop for vimeo to work")}c.style.display= +"none";c.removeAttribute("autoplay");return h},updateNative:function(a,b){var c=a.htmlMediaElement,d;for(d in mejs.HtmlMediaElement)c[d]=mejs.HtmlMediaElement[d];b.success(c,c);return c}}; +mejs.YouTubeApi={isIframeStarted:false,isIframeLoaded:false,loadIframeApi:function(){if(!this.isIframeStarted){var a=document.createElement("script");a.src="//www.youtube.com/player_api";var b=document.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b);this.isIframeStarted=true}},iframeQueue:[],enqueueIframe:function(a){if(this.isLoaded)this.createIframe(a);else{this.loadIframeApi();this.iframeQueue.push(a)}},createIframe:function(a){var b=a.pluginMediaElement,c=new YT.Player(a.containerId, +{height:a.height,width:a.width,videoId:a.videoId,playerVars:{controls:0},events:{onReady:function(){a.pluginMediaElement.pluginApi=c;mejs.MediaPluginBridge.initPlugin(a.pluginId);setInterval(function(){mejs.YouTubeApi.createEvent(c,b,"timeupdate")},250)},onStateChange:function(d){mejs.YouTubeApi.handleStateChange(d.data,c,b)}}})},createEvent:function(a,b,c){c={type:c,target:b};if(a&&a.getDuration){b.currentTime=c.currentTime=a.getCurrentTime();b.duration=c.duration=a.getDuration();c.paused=b.paused; +c.ended=b.ended;c.muted=a.isMuted();c.volume=a.getVolume()/100;c.bytesTotal=a.getVideoBytesTotal();c.bufferedBytes=a.getVideoBytesLoaded();var d=c.bufferedBytes/c.bytesTotal*c.duration;c.target.buffered=c.buffered={start:function(){return 0},end:function(){return d},length:1}}b.dispatchEvent(c.type,c)},iFrameReady:function(){for(this.isIframeLoaded=this.isLoaded=true;this.iframeQueue.length>0;)this.createIframe(this.iframeQueue.pop())},flashPlayers:{},createFlash:function(a){this.flashPlayers[a.pluginId]= +a;var b,c="//www.youtube.com/apiplayer?enablejsapi=1&playerapiid="+a.pluginId+"&version=3&autoplay=0&controls=0&modestbranding=1&loop=0";if(mejs.MediaFeatures.isIE){b=document.createElement("div");a.container.appendChild(b);b.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" id="'+a.pluginId+'" width="'+a.width+'" height="'+a.height+'" class="mejs-shim"><param name="movie" value="'+ +c+'" /><param name="wmode" value="transparent" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /></object>'}else a.container.innerHTML='<object type="application/x-shockwave-flash" id="'+a.pluginId+'" data="'+c+'" width="'+a.width+'" height="'+a.height+'" style="visibility: visible; " class="mejs-shim"><param name="allowScriptAccess" value="always"><param name="wmode" value="transparent"></object>'},flashReady:function(a){var b=this.flashPlayers[a],c= +document.getElementById(a),d=b.pluginMediaElement;d.pluginApi=d.pluginElement=c;mejs.MediaPluginBridge.initPlugin(a);c.cueVideoById(b.videoId);a=b.containerId+"_callback";window[a]=function(e){mejs.YouTubeApi.handleStateChange(e,c,d)};c.addEventListener("onStateChange",a);setInterval(function(){mejs.YouTubeApi.createEvent(c,d,"timeupdate")},250);mejs.YouTubeApi.createEvent(c,d,"canplay")},handleStateChange:function(a,b,c){switch(a){case -1:c.paused=true;c.ended=true;mejs.YouTubeApi.createEvent(b, +c,"loadedmetadata");break;case 0:c.paused=false;c.ended=true;mejs.YouTubeApi.createEvent(b,c,"ended");break;case 1:c.paused=false;c.ended=false;mejs.YouTubeApi.createEvent(b,c,"play");mejs.YouTubeApi.createEvent(b,c,"playing");break;case 2:c.paused=true;c.ended=false;mejs.YouTubeApi.createEvent(b,c,"pause");break;case 3:mejs.YouTubeApi.createEvent(b,c,"progress")}}};function onYouTubePlayerAPIReady(){mejs.YouTubeApi.iFrameReady()}function onYouTubePlayerReady(a){mejs.YouTubeApi.flashReady(a)} +window.mejs=mejs;window.MediaElement=mejs.MediaElement; +(function(a,b){var c={locale:{language:"",strings:{}},methods:{}};c.getLanguage=function(){return(c.locale.language||window.navigator.userLanguage||window.navigator.language).substr(0,2).toLowerCase()};if(typeof mejsL10n!="undefined")c.locale.language=mejsL10n.language;c.methods.checkPlain=function(d){var e,g,f={"&":"&",'"':""","<":"<",">":">"};d=String(d);for(e in f)if(f.hasOwnProperty(e)){g=RegExp(e,"g");d=d.replace(g,f[e])}return d};c.methods.t=function(d,e){if(c.locale.strings&& +c.locale.strings[e.context]&&c.locale.strings[e.context][d])d=c.locale.strings[e.context][d];return c.methods.checkPlain(d)};c.t=function(d,e){if(typeof d==="string"&&d.length>0){var g=c.getLanguage();e=e||{context:g};return c.methods.t(d,e)}else throw{name:"InvalidArgumentException",message:"First argument is either not a string or empty."};};b.i18n=c})(document,mejs);(function(a){if(typeof mejsL10n!="undefined")a[mejsL10n.language]=mejsL10n.strings})(mejs.i18n.locale.strings); +(function(a){if(typeof a.de==="undefined")a.de={Fullscreen:"Vollbild","Go Fullscreen":"Vollbild an","Turn off Fullscreen":"Vollbild aus",Close:"Schlie\u00dfen"}})(mejs.i18n.locale.strings);(function(a){if(typeof a.zh==="undefined")a.zh={Fullscreen:"\u5168\u87a2\u5e55","Go Fullscreen":"\u5168\u5c4f\u6a21\u5f0f","Turn off Fullscreen":"\u9000\u51fa\u5168\u5c4f\u6a21\u5f0f",Close:"\u95dc\u9589"}})(mejs.i18n.locale.strings); diff --git a/lib/mejs/mediaelementplayer.css b/lib/mejs/mediaelementplayer.css new file mode 100755 index 00000000..432ef5c4 --- /dev/null +++ b/lib/mejs/mediaelementplayer.css @@ -0,0 +1,954 @@ +.mejs-container { + position: relative; + background: #000; + font-family: Helvetica, Arial; + text-align: left; + vertical-align: top; + text-indent: 0; +} + +.me-plugin { + position: absolute; + height: auto; + width: auto; +} + +.mejs-embed, .mejs-embed body { + width: 100%; + height: 100%; + margin: 0; + padding: 0; + background: #000; + overflow: hidden; +} + +.mejs-fullscreen { + /* set it to not show scroll bars so 100% will work */ + overflow: hidden !important; +} + +.mejs-container-fullscreen { + position: fixed; + left: 0; + top: 0; + right: 0; + bottom: 0; + overflow: hidden; + z-index: 1000; +} +.mejs-container-fullscreen .mejs-mediaelement, +.mejs-container-fullscreen video { + width: 100%; + height: 100%; +} + +.mejs-clear { + clear: both; +} + +/* Start: LAYERS */ +.mejs-background { + position: absolute; + top: 0; + left: 0; +} + +.mejs-mediaelement { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.mejs-poster { + position: absolute; + top: 0; + left: 0; + background-size: contain ; + background-position: 50% 50% ; + background-repeat: no-repeat ; +} +:root .mejs-poster img { + display: none ; +} + +.mejs-poster img { + border: 0; + padding: 0; + border: 0; +} + +.mejs-overlay { + position: absolute; + top: 0; + left: 0; +} + +.mejs-overlay-play { + cursor: pointer; +} + +.mejs-overlay-button { + position: absolute; + top: 50%; + left: 50%; + width: 100px; + height: 100px; + margin: -50px 0 0 -50px; + background: url(bigplay.svg) no-repeat; +} + +.no-svg .mejs-overlay-button { + background-image: url(bigplay.png); +} + +.mejs-overlay:hover .mejs-overlay-button { + background-position: 0 -100px ; +} + +.mejs-overlay-loading { + position: absolute; + top: 50%; + left: 50%; + width: 80px; + height: 80px; + margin: -40px 0 0 -40px; + background: #333; + background: url(background.png); + background: rgba(0, 0, 0, 0.9); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(50,50,50,0.9)), to(rgba(0,0,0,0.9))); + background: -webkit-linear-gradient(top, rgba(50,50,50,0.9), rgba(0,0,0,0.9)); + background: -moz-linear-gradient(top, rgba(50,50,50,0.9), rgba(0,0,0,0.9)); + background: -o-linear-gradient(top, rgba(50,50,50,0.9), rgba(0,0,0,0.9)); + background: -ms-linear-gradient(top, rgba(50,50,50,0.9), rgba(0,0,0,0.9)); + background: linear-gradient(rgba(50,50,50,0.9), rgba(0,0,0,0.9)); +} + +.mejs-overlay-loading span { + display: block; + width: 80px; + height: 80px; + background: transparent url(loading.gif) 50% 50% no-repeat; +} + +/* End: LAYERS */ + +/* Start: CONTROL BAR */ +.mejs-container .mejs-controls { + position: absolute; + list-style-type: none; + margin: 0; + padding: 0; + bottom: 0; + left: 0; + background: url(background.png); + background: rgba(0, 0, 0, 0.7); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(50,50,50,0.7)), to(rgba(0,0,0,0.7))); + background: -webkit-linear-gradient(top, rgba(50,50,50,0.7), rgba(0,0,0,0.7)); + background: -moz-linear-gradient(top, rgba(50,50,50,0.7), rgba(0,0,0,0.7)); + background: -o-linear-gradient(top, rgba(50,50,50,0.7), rgba(0,0,0,0.7)); + background: -ms-linear-gradient(top, rgba(50,50,50,0.7), rgba(0,0,0,0.7)); + background: linear-gradient(rgba(50,50,50,0.7), rgba(0,0,0,0.7)); + height: 30px; + width: 100%; +} +.mejs-container .mejs-controls div { + list-style-type: none; + background-image: none; + display: block; + float: left; + margin: 0; + padding: 0; + width: 26px; + height: 26px; + font-size: 11px; + line-height: 11px; + font-family: Helvetica, Arial; + border: 0; +} + +.mejs-controls .mejs-button button { + cursor: pointer; + display: block; + font-size: 0; + line-height: 0; + text-decoration: none; + margin: 7px 5px; + padding: 0; + position: absolute; + height: 16px; + width: 16px; + border: 0; + background: transparent url(controls.svg) no-repeat; +} + +.no-svg .mejs-controls .mejs-button button { + background-image: url(controls.png); +} + +/* :focus for accessibility */ +.mejs-controls .mejs-button button:focus { + outline: dotted 1px #999; +} + +/* End: CONTROL BAR */ + +/* Start: Time (Current / Duration) */ +.mejs-container .mejs-controls .mejs-time { + color: #fff; + display: block; + height: 17px; + width: auto; + padding: 8px 3px 0 3px ; + overflow: hidden; + text-align: center; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} + +.mejs-container .mejs-controls .mejs-time span { + color: #fff; + font-size: 11px; + line-height: 12px; + display: block; + float: left; + margin: 1px 2px 0 0; + width: auto; +} +/* End: Time (Current / Duration) */ + +/* Start: Play/Pause/Stop */ +.mejs-controls .mejs-play button { + background-position: 0 0; +} + +.mejs-controls .mejs-pause button { + background-position: 0 -16px; +} + +.mejs-controls .mejs-stop button { + background-position: -112px 0; +} +/* Start: Play/Pause/Stop */ + +/* Start: Progress Bar */ +.mejs-controls div.mejs-time-rail { + direction: ltr; + width: 200px; + padding-top: 5px; +} + +.mejs-controls .mejs-time-rail span { + display: block; + position: absolute; + width: 180px; + height: 10px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; + cursor: pointer; +} + +.mejs-controls .mejs-time-rail .mejs-time-total { + margin: 5px; + background: #333; + background: rgba(50,50,50,0.8); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(30,30,30,0.8)), to(rgba(60,60,60,0.8))); + background: -webkit-linear-gradient(top, rgba(30,30,30,0.8), rgba(60,60,60,0.8)); + background: -moz-linear-gradient(top, rgba(30,30,30,0.8), rgba(60,60,60,0.8)); + background: -o-linear-gradient(top, rgba(30,30,30,0.8), rgba(60,60,60,0.8)); + background: -ms-linear-gradient(top, rgba(30,30,30,0.8), rgba(60,60,60,0.8)); + background: linear-gradient(rgba(30,30,30,0.8), rgba(60,60,60,0.8)); +} + +.mejs-controls .mejs-time-rail .mejs-time-buffering { + width: 100%; + background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 15px 15px; + -moz-background-size: 15px 15px; + -o-background-size: 15px 15px; + background-size: 15px 15px; + -webkit-animation: buffering-stripes 2s linear infinite; + -moz-animation: buffering-stripes 2s linear infinite; + -ms-animation: buffering-stripes 2s linear infinite; + -o-animation: buffering-stripes 2s linear infinite; + animation: buffering-stripes 2s linear infinite; +} + +@-webkit-keyframes buffering-stripes { from {background-position: 0 0;} to {background-position: 30px 0;} } +@-moz-keyframes buffering-stripes { from {background-position: 0 0;} to {background-position: 30px 0;} } +@-ms-keyframes buffering-stripes { from {background-position: 0 0;} to {background-position: 30px 0;} } +@-o-keyframes buffering-stripes { from {background-position: 0 0;} to {background-position: 30px 0;} } +@keyframes buffering-stripes { from {background-position: 0 0;} to {background-position: 30px 0;} } + +.mejs-controls .mejs-time-rail .mejs-time-loaded { + background: #3caac8; + background: rgba(60,170,200,0.8); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(44,124,145,0.8)), to(rgba(78,183,212,0.8))); + background: -webkit-linear-gradient(top, rgba(44,124,145,0.8), rgba(78,183,212,0.8)); + background: -moz-linear-gradient(top, rgba(44,124,145,0.8), rgba(78,183,212,0.8)); + background: -o-linear-gradient(top, rgba(44,124,145,0.8), rgba(78,183,212,0.8)); + background: -ms-linear-gradient(top, rgba(44,124,145,0.8), rgba(78,183,212,0.8)); + background: linear-gradient(rgba(44,124,145,0.8), rgba(78,183,212,0.8)); + width: 0; +} + +.mejs-controls .mejs-time-rail .mejs-time-current { + background: #fff; + background: rgba(255,255,255,0.8); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(255,255,255,0.9)), to(rgba(200,200,200,0.8))); + background: -webkit-linear-gradient(top, rgba(255,255,255,0.9), rgba(200,200,200,0.8)); + background: -moz-linear-gradient(top, rgba(255,255,255,0.9), rgba(200,200,200,0.8)); + background: -o-linear-gradient(top, rgba(255,255,255,0.9), rgba(200,200,200,0.8)); + background: -ms-linear-gradient(top, rgba(255,255,255,0.9), rgba(200,200,200,0.8)); + background: linear-gradient(rgba(255,255,255,0.9), rgba(200,200,200,0.8)); + width: 0; +} + +.mejs-controls .mejs-time-rail .mejs-time-handle { + display: none; + position: absolute; + margin: 0; + width: 10px; + background: #fff; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + cursor: pointer; + border: solid 2px #333; + top: -2px; + text-align: center; +} + +.mejs-controls .mejs-time-rail .mejs-time-float { + position: absolute; + display: none; + background: #eee; + width: 36px; + height: 17px; + border: solid 1px #333; + top: -26px; + margin-left: -18px; + text-align: center; + color: #111; +} + +.mejs-controls .mejs-time-rail .mejs-time-float-current { + margin: 2px; + width: 30px; + display: block; + text-align: center; + left: 0; +} + +.mejs-controls .mejs-time-rail .mejs-time-float-corner { + position: absolute; + display: block; + width: 0; + height: 0; + line-height: 0; + border: solid 5px #eee; + border-color: #eee transparent transparent transparent; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + top: 15px; + left: 13px; +} + +.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float { + width: 48px; +} + +.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float-current { + width: 44px; +} + +.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float-corner { + left: 18px; +} + +/* +.mejs-controls .mejs-time-rail:hover .mejs-time-handle { + visibility:visible; +} +*/ +/* End: Progress Bar */ + +/* Start: Fullscreen */ +.mejs-controls .mejs-fullscreen-button button { + background-position: -32px 0; +} + +.mejs-controls .mejs-unfullscreen button { + background-position: -32px -16px; +} +/* End: Fullscreen */ + + +/* Start: Mute/Volume */ +.mejs-controls .mejs-volume-button { +} + +.mejs-controls .mejs-mute button { + background-position: -16px -16px; +} + +.mejs-controls .mejs-unmute button { + background-position: -16px 0; +} + +.mejs-controls .mejs-volume-button { + position: relative; +} + +.mejs-controls .mejs-volume-button .mejs-volume-slider { + display: none; + height: 115px; + width: 25px; + background: url(background.png); + background: rgba(50, 50, 50, 0.7); + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + top: -115px; + left: 0; + z-index: 1; + position: absolute; + margin: 0; +} + +.mejs-controls .mejs-volume-button:hover { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +/* +.mejs-controls .mejs-volume-button:hover .mejs-volume-slider { + display: block; +} +*/ + +.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-total { + position: absolute; + left: 11px; + top: 8px; + width: 2px; + height: 100px; + background: #ddd; + background: rgba(255, 255, 255, 0.5); + margin: 0; +} + +.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-current { + position: absolute; + left: 11px; + top: 8px; + width: 2px; + height: 100px; + background: #ddd; + background: rgba(255, 255, 255, 0.9); + margin: 0; +} + +.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-handle { + position: absolute; + left: 4px; + top: -3px; + width: 16px; + height: 6px; + background: #ddd; + background: rgba(255, 255, 255, 0.9); + cursor: N-resize; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + margin: 0; +} + +/* horizontal version */ +.mejs-controls div.mejs-horizontal-volume-slider { + height: 26px; + width: 60px; + position: relative; +} + +.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total { + position: absolute; + left: 0; + top: 11px; + width: 50px; + height: 8px; + margin: 0; + padding: 0; + font-size: 1px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; + background: #333; + background: rgba(50,50,50,0.8); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(30,30,30,0.8)), to(rgba(60,60,60,0.8))); + background: -webkit-linear-gradient(top, rgba(30,30,30,0.8), rgba(60,60,60,0.8)); + background: -moz-linear-gradient(top, rgba(30,30,30,0.8), rgba(60,60,60,0.8)); + background: -o-linear-gradient(top, rgba(30,30,30,0.8), rgba(60,60,60,0.8)); + background: -ms-linear-gradient(top, rgba(30,30,30,0.8), rgba(60,60,60,0.8)); + background: linear-gradient(rgba(30,30,30,0.8), rgba(60,60,60,0.8)); +} + +.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current { + position: absolute; + left: 0; + top: 11px; + width: 50px; + height: 8px; + margin: 0; + padding: 0; + font-size: 1px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; + background: #fff; + background: rgba(255,255,255,0.8); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(255,255,255,0.9)), to(rgba(200,200,200,0.8))); + background: -webkit-linear-gradient(top, rgba(255,255,255,0.9), rgba(200,200,200,0.8)); + background: -moz-linear-gradient(top, rgba(255,255,255,0.9), rgba(200,200,200,0.8)); + background: -o-linear-gradient(top, rgba(255,255,255,0.9), rgba(200,200,200,0.8)); + background: -ms-linear-gradient(top, rgba(255,255,255,0.9), rgba(200,200,200,0.8)); + background: linear-gradient(rgba(255,255,255,0.9), rgba(200,200,200,0.8)); +} + +.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-handle { + display: none; +} + +/* End: Mute/Volume */ + +/* Start: Track (Captions and Chapters) */ +.mejs-controls .mejs-captions-button { + position: relative; +} + +.mejs-controls .mejs-captions-button button { + background-position: -48px 0; +} +.mejs-controls .mejs-captions-button .mejs-captions-selector { + visibility: hidden; + position: absolute; + bottom: 26px; + right: -51px; + width: 85px; + height: 100px; + background: url(background.png); + background: rgba(50,50,50,0.7); + border: solid 1px transparent; + padding: 10px 10px 0 10px; + overflow: hidden; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +/* +.mejs-controls .mejs-captions-button:hover .mejs-captions-selector { + visibility: visible; +} +*/ + +.mejs-controls .mejs-captions-button .mejs-captions-selector ul { + margin: 0; + padding: 0; + display: block; + list-style-type: none !important; + overflow: hidden; +} + +.mejs-controls .mejs-captions-button .mejs-captions-selector ul li { + margin: 0 0 6px 0; + padding: 0; + list-style-type: none !important; + display: block; + color: #fff; + overflow: hidden; +} + +.mejs-controls .mejs-captions-button .mejs-captions-selector ul li input { + clear: both; + float: left; + margin: 3px 3px 0 5px; +} + +.mejs-controls .mejs-captions-button .mejs-captions-selector ul li label { + width: 55px; + float: left; + padding: 4px 0 0 0; + line-height: 15px; + font-family: helvetica, arial; + font-size: 10px; +} + +.mejs-controls .mejs-captions-button .mejs-captions-translations { + font-size: 10px; + margin: 0 0 5px 0; +} + +.mejs-chapters { + position: absolute; + top: 0; + left: 0; + -xborder-right: solid 1px #fff; + width: 10000px; + z-index: 1; +} + +.mejs-chapters .mejs-chapter { + position: absolute; + float: left; + background: #222; + background: rgba(0, 0, 0, 0.7); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(50,50,50,0.7)), to(rgba(0,0,0,0.7))); + background: -webkit-linear-gradient(top, rgba(50,50,50,0.7), rgba(0,0,0,0.7)); + background: -moz-linear-gradient(top, rgba(50,50,50,0.7), rgba(0,0,0,0.7)); + background: -o-linear-gradient(top, rgba(50,50,50,0.7), rgba(0,0,0,0.7)); + background: -ms-linear-gradient(top, rgba(50,50,50,0.7), rgba(0,0,0,0.7)); + background: linear-gradient(rgba(50,50,50,0.7), rgba(0,0,0,0.7)); + filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, startColorstr=#323232,endColorstr=#000000); + overflow: hidden; + border: 0; +} + +.mejs-chapters .mejs-chapter .mejs-chapter-block { + font-size: 11px; + color: #fff; + padding: 5px; + display: block; + border-right: solid 1px #333; + border-bottom: solid 1px #333; + cursor: pointer; +} + +.mejs-chapters .mejs-chapter .mejs-chapter-block-last { + border-right: none; +} + +.mejs-chapters .mejs-chapter .mejs-chapter-block:hover { + background: #666; + background: rgba(102,102,102, 0.7); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(102,102,102,0.7)), to(rgba(50,50,50,0.6))); + background: -webkit-linear-gradient(top, rgba(102,102,102,0.7), rgba(50,50,50,0.6)); + background: -moz-linear-gradient(top, rgba(102,102,102,0.7), rgba(50,50,50,0.6)); + background: -o-linear-gradient(top, rgba(102,102,102,0.7), rgba(50,50,50,0.6)); + background: -ms-linear-gradient(top, rgba(102,102,102,0.7), rgba(50,50,50,0.6)); + background: linear-gradient(rgba(102,102,102,0.7), rgba(50,50,50,0.6)); + filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, startColorstr=#666666,endColorstr=#323232); +} + +.mejs-chapters .mejs-chapter .mejs-chapter-block .ch-title { + font-size: 12px; + font-weight: bold; + display: block; + white-space: nowrap; + text-overflow: ellipsis; + margin: 0 0 3px 0; + line-height: 12px; +} + +.mejs-chapters .mejs-chapter .mejs-chapter-block .ch-timespan { + font-size: 12px; + line-height: 12px; + margin: 3px 0 4px 0; + display: block; + white-space: nowrap; + text-overflow: ellipsis; +} + +.mejs-captions-layer { + position: absolute; + bottom: 0; + left: 0; + text-align:center; + line-height: 20px; + font-size: 16px; + color: #fff; +} + +.mejs-captions-layer a { + color: #fff; + text-decoration: underline; +} + +.mejs-captions-layer[lang=ar] { + font-size: 20px; + font-weight: normal; +} + +.mejs-captions-position { + position: absolute; + width: 100%; + bottom: 15px; + left: 0; +} + +.mejs-captions-position-hover { + bottom: 35px; +} + +.mejs-captions-text { + padding: 3px 5px; + background: url(background.png); + background: rgba(20, 20, 20, 0.5); + white-space: pre-wrap; +} +/* End: Track (Captions and Chapters) */ + +/* Start: Error */ +.me-cannotplay { +} + +.me-cannotplay a { + color: #fff; + font-weight: bold; +} + +.me-cannotplay span { + padding: 15px; + display: block; +} +/* End: Error */ + + +/* Start: Loop */ +.mejs-controls .mejs-loop-off button { + background-position: -64px -16px; +} + +.mejs-controls .mejs-loop-on button { + background-position: -64px 0; +} + +/* End: Loop */ + +/* Start: backlight */ +.mejs-controls .mejs-backlight-off button { + background-position: -80px -16px; +} + +.mejs-controls .mejs-backlight-on button { + background-position: -80px 0; +} +/* End: backlight */ + +/* Start: Picture Controls */ +.mejs-controls .mejs-picturecontrols-button { + background-position: -96px 0; +} +/* End: Picture Controls */ + + +/* context menu */ +.mejs-contextmenu { + position: absolute; + width: 150px; + padding: 10px; + border-radius: 4px; + top: 0; + left: 0; + background: #fff; + border: solid 1px #999; + z-index: 1001; /* make sure it shows on fullscreen */ +} +.mejs-contextmenu .mejs-contextmenu-separator { + height: 1px; + font-size: 0; + margin: 5px 6px; + background: #333; +} + +.mejs-contextmenu .mejs-contextmenu-item { + font-family: Helvetica, Arial; + font-size: 12px; + padding: 4px 6px; + cursor: pointer; + color: #333; +} +.mejs-contextmenu .mejs-contextmenu-item:hover { + background: #2C7C91; + color: #fff; +} + +/* Start: Source Chooser */ +.mejs-controls .mejs-sourcechooser-button { + position: relative; +} + +.mejs-controls .mejs-sourcechooser-button button { + background-position: -128px 0; +} + +.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector { + visibility: hidden; + position: absolute; + bottom: 26px; + right: -10px; + width: 130px; + height: 100px; + background: url(background.png); + background: rgba(50,50,50,0.7); + border: solid 1px transparent; + padding: 10px; + overflow: hidden; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul { + margin: 0; + padding: 0; + display: block; + list-style-type: none !important; + overflow: hidden; +} + +.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li { + margin: 0 0 6px 0; + padding: 0; + list-style-type: none !important; + display: block; + color: #fff; + overflow: hidden; +} + +.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li input { + clear: both; + float: left; + margin: 3px 3px 0 5px; +} + +.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li label { + width: 100px; + float: left; + padding: 4px 0 0 0; + line-height: 15px; + font-family: helvetica, arial; + font-size: 10px; +} +/* End: Source Chooser */ + +/* Start: Postroll */ +.mejs-postroll-layer { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + background: url(background.png); + background: rgba(50,50,50,0.7); + z-index: 1000; + overflow: hidden; +} +.mejs-postroll-layer-content { + width: 100%; + height: 100%; +} +.mejs-postroll-close { + position: absolute; + right: 0; + top: 0; + background: url(background.png); + background: rgba(50,50,50,0.7); + color: #fff; + padding: 4px; + z-index: 100; + cursor: pointer; +} +/* End: Postroll */ + + +/* Start: Speed */ +div.mejs-speed-button { + width: 46px !important; + position: relative; +} + +.mejs-controls .mejs-button.mejs-speed-button button { + background: transparent; + width: 36px; + font-size: 11px; + line-height: normal; + color: #ffffff; +} + +.mejs-controls .mejs-speed-button .mejs-speed-selector { + visibility: hidden; + position: absolute; + top: -100px; + left: -10px; + width: 60px; + height: 100px; + background: url(background.png); + background: rgba(50, 50, 50, 0.7); + border: solid 1px transparent; + padding: 0; + overflow: hidden; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.mejs-controls .mejs-speed-button:hover > .mejs-speed-selector { + visibility: visible; +} + +.mejs-controls .mejs-speed-button .mejs-speed-selector ul li label.mejs-speed-selected { + color: rgba(33, 248, 248, 1); +} + +.mejs-controls .mejs-speed-button .mejs-speed-selector ul { + margin: 0; + padding: 0; + display: block; + list-style-type: none !important; + overflow: hidden; +} + +.mejs-controls .mejs-speed-button .mejs-speed-selector ul li { + margin: 0 0 6px 0; + padding: 0 10px; + list-style-type: none !important; + display: block; + color: #fff; + overflow: hidden; +} + +.mejs-controls .mejs-speed-button .mejs-speed-selector ul li input { + clear: both; + float: left; + margin: 3px 3px 0 5px; + display: none; +} + +.mejs-controls .mejs-speed-button .mejs-speed-selector ul li label { + width: 60px; + float: left; + padding: 4px 0 0 0; + line-height: 15px; + font-family: helvetica, arial; + font-size: 11.5px; + color: white; + margin-left: 5px; + cursor: pointer; +} + +.mejs-controls .mejs-speed-button .mejs-speed-selector ul li:hover { + background-color: rgb(200, 200, 200) !important; + background-color: rgba(255,255,255,.4) !important; +} +/* End: Speed */ diff --git a/lib/mejs/mediaelementplayer.js b/lib/mejs/mediaelementplayer.js new file mode 100755 index 00000000..c1c1622f --- /dev/null +++ b/lib/mejs/mediaelementplayer.js @@ -0,0 +1,3328 @@ +/*! + * MediaElementPlayer + * http://mediaelementjs.com/ + * + * Creates a controller bar for HTML5 <video> add <audio> tags + * using jQuery and MediaElement.js (HTML5 Flash/Silverlight wrapper) + * + * Copyright 2010-2013, John Dyer (http://j.hn/) + * License: MIT + * + */ +if (typeof jQuery != 'undefined') { + mejs.$ = jQuery; +} else if (typeof ender != 'undefined') { + mejs.$ = ender; +} +(function ($) { + + // default player values + mejs.MepDefaults = { + // url to poster (to fix iOS 3.x) + poster: '', + // When the video is ended, we can show the poster. + showPosterWhenEnded: false, + // default if the <video width> is not specified + defaultVideoWidth: 480, + // default if the <video height> is not specified + defaultVideoHeight: 270, + // if set, overrides <video width> + videoWidth: -1, + // if set, overrides <video height> + videoHeight: -1, + // default if the user doesn't specify + defaultAudioWidth: 400, + // default if the user doesn't specify + defaultAudioHeight: 30, + + // default amount to move back when back key is pressed + defaultSeekBackwardInterval: function(media) { + return (media.duration * 0.05); + }, + // default amount to move forward when forward key is pressed + defaultSeekForwardInterval: function(media) { + return (media.duration * 0.05); + }, + + // set dimensions via JS instead of CSS + setDimensions: true, + + // width of audio player + audioWidth: -1, + // height of audio player + audioHeight: -1, + // initial volume when the player starts (overrided by user cookie) + startVolume: 0.8, + // useful for <audio> player loops + loop: false, + // rewind to beginning when media ends + autoRewind: true, + // resize to media dimensions + enableAutosize: true, + // forces the hour marker (##:00:00) + alwaysShowHours: false, + + // show framecount in timecode (##:00:00:00) + showTimecodeFrameCount: false, + // used when showTimecodeFrameCount is set to true + framesPerSecond: 25, + + // automatically calculate the width of the progress bar based on the sizes of other elements + autosizeProgress : true, + // Hide controls when playing and mouse is not over the video + alwaysShowControls: false, + // Display the video control + hideVideoControlsOnLoad: false, + // Enable click video element to toggle play/pause + clickToPlayPause: true, + // force iPad's native controls + iPadUseNativeControls: false, + // force iPhone's native controls + iPhoneUseNativeControls: false, + // force Android's native controls + AndroidUseNativeControls: false, + // features to show + features: ['playpause','current','progress','duration','tracks','volume','fullscreen'], + // only for dynamic + isVideo: true, + + // turns keyboard support on and off for this instance + enableKeyboard: true, + + // whenthis player starts, it will pause other players + pauseOtherPlayers: true, + + // array of keyboard actions such as play pause + keyActions: [ + { + keys: [ + 32, // SPACE + 179 // GOOGLE play/pause button + ], + action: function(player, media) { + if (media.paused || media.ended) { + player.play(); + } else { + player.pause(); + } + } + }, + { + keys: [38], // UP + action: function(player, media) { + player.container.find('.mejs-volume-slider').css('display','block'); + if (player.isVideo) { + player.showControls(); + player.startControlsTimer(); + } + + var newVolume = Math.min(media.volume + 0.1, 1); + media.setVolume(newVolume); + } + }, + { + keys: [40], // DOWN + action: function(player, media) { + player.container.find('.mejs-volume-slider').css('display','block'); + if (player.isVideo) { + player.showControls(); + player.startControlsTimer(); + } + + var newVolume = Math.max(media.volume - 0.1, 0); + media.setVolume(newVolume); + } + }, + { + keys: [ + 37, // LEFT + 227 // Google TV rewind + ], + action: function(player, media) { + if (!isNaN(media.duration) && media.duration > 0) { + if (player.isVideo) { + player.showControls(); + player.startControlsTimer(); + } + + // 5% + var newTime = Math.max(media.currentTime - player.options.defaultSeekBackwardInterval(media), 0); + media.setCurrentTime(newTime); + } + } + }, + { + keys: [ + 39, // RIGHT + 228 // Google TV forward + ], + action: function(player, media) { + if (!isNaN(media.duration) && media.duration > 0) { + if (player.isVideo) { + player.showControls(); + player.startControlsTimer(); + } + + // 5% + var newTime = Math.min(media.currentTime + player.options.defaultSeekForwardInterval(media), media.duration); + media.setCurrentTime(newTime); + } + } + }, + { + keys: [70], // F + action: function(player, media) { + if (typeof player.enterFullScreen != 'undefined') { + if (player.isFullScreen) { + player.exitFullScreen(); + } else { + player.enterFullScreen(); + } + } + } + }, + { + keys: [77], // M + action: function(player, media) { + player.container.find('.mejs-volume-slider').css('display','block'); + if (player.isVideo) { + player.showControls(); + player.startControlsTimer(); + } + if (player.media.muted) { + player.setMuted(false); + } else { + player.setMuted(true); + } + } + } + ] + }; + + mejs.mepIndex = 0; + + mejs.players = {}; + + // wraps a MediaElement object in player controls + mejs.MediaElementPlayer = function(node, o) { + // enforce object, even without "new" (via John Resig) + if ( !(this instanceof mejs.MediaElementPlayer) ) { + return new mejs.MediaElementPlayer(node, o); + } + + var t = this; + + // these will be reset after the MediaElement.success fires + t.$media = t.$node = $(node); + t.node = t.media = t.$media[0]; + + // check for existing player + if (typeof t.node.player != 'undefined') { + return t.node.player; + } else { + // attach player to DOM node for reference + t.node.player = t; + } + + + // try to get options from data-mejsoptions + if (typeof o == 'undefined') { + o = t.$node.data('mejsoptions'); + } + + // extend default options + t.options = $.extend({},mejs.MepDefaults,o); + + // unique ID + t.id = 'mep_' + mejs.mepIndex++; + + // add to player array (for focus events) + mejs.players[t.id] = t; + + // start up + t.init(); + + return t; + }; + + // actual player + mejs.MediaElementPlayer.prototype = { + + hasFocus: false, + + controlsAreVisible: true, + + init: function() { + + var + t = this, + mf = mejs.MediaFeatures, + // options for MediaElement (shim) + meOptions = $.extend(true, {}, t.options, { + success: function(media, domNode) { t.meReady(media, domNode); }, + error: function(e) { t.handleError(e);} + }), + tagName = t.media.tagName.toLowerCase(); + + t.isDynamic = (tagName !== 'audio' && tagName !== 'video'); + + if (t.isDynamic) { + // get video from src or href? + t.isVideo = t.options.isVideo; + } else { + t.isVideo = (tagName !== 'audio' && t.options.isVideo); + } + + // use native controls in iPad, iPhone, and Android + if ((mf.isiPad && t.options.iPadUseNativeControls) || (mf.isiPhone && t.options.iPhoneUseNativeControls)) { + + // add controls and stop + t.$media.attr('controls', 'controls'); + + // attempt to fix iOS 3 bug + //t.$media.removeAttr('poster'); + // no Issue found on iOS3 -ttroxell + + // override Apple's autoplay override for iPads + if (mf.isiPad && t.media.getAttribute('autoplay') !== null) { + t.play(); + } + + } else if (mf.isAndroid && t.options.AndroidUseNativeControls) { + + // leave default player + + } else { + + // DESKTOP: use MediaElementPlayer controls + + // remove native controls + t.$media.removeAttr('controls'); + + // build container + t.container = + $('<div id="' + t.id + '" class="mejs-container ' + (mejs.MediaFeatures.svg ? 'svg' : 'no-svg') + '">'+ + '<div class="mejs-inner">'+ + '<div class="mejs-mediaelement"></div>'+ + '<div class="mejs-layers"></div>'+ + '<div class="mejs-controls"></div>'+ + '<div class="mejs-clear"></div>'+ + '</div>' + + '</div>') + .addClass(t.$media[0].className) + .insertBefore(t.$media); + + // add classes for user and content + t.container.addClass( + (mf.isAndroid ? 'mejs-android ' : '') + + (mf.isiOS ? 'mejs-ios ' : '') + + (mf.isiPad ? 'mejs-ipad ' : '') + + (mf.isiPhone ? 'mejs-iphone ' : '') + + (t.isVideo ? 'mejs-video ' : 'mejs-audio ') + ); + + + // move the <video/video> tag into the right spot + if (mf.isiOS) { + + // sadly, you can't move nodes in iOS, so we have to destroy and recreate it! + var $newMedia = t.$media.clone(); + + t.container.find('.mejs-mediaelement').append($newMedia); + + t.$media.remove(); + t.$node = t.$media = $newMedia; + t.node = t.media = $newMedia[0] + + } else { + + // normal way of moving it into place (doesn't work on iOS) + t.container.find('.mejs-mediaelement').append(t.$media); + } + + // find parts + t.controls = t.container.find('.mejs-controls'); + t.layers = t.container.find('.mejs-layers'); + + // determine the size + + /* size priority: + (1) videoWidth (forced), + (2) style="width;height;" + (3) width attribute, + (4) defaultVideoWidth (for unspecified cases) + */ + + var tagType = (t.isVideo ? 'video' : 'audio'), + capsTagName = tagType.substring(0,1).toUpperCase() + tagType.substring(1); + + + + if (t.options[tagType + 'Width'] > 0 || t.options[tagType + 'Width'].toString().indexOf('%') > -1) { + t.width = t.options[tagType + 'Width']; + } else if (t.media.style.width !== '' && t.media.style.width !== null) { + t.width = t.media.style.width; + } else if (t.media.getAttribute('width') !== null) { + t.width = t.$media.attr('width'); + } else { + t.width = t.options['default' + capsTagName + 'Width']; + } + + if (t.options[tagType + 'Height'] > 0 || t.options[tagType + 'Height'].toString().indexOf('%') > -1) { + t.height = t.options[tagType + 'Height']; + } else if (t.media.style.height !== '' && t.media.style.height !== null) { + t.height = t.media.style.height; + } else if (t.$media[0].getAttribute('height') !== null) { + t.height = t.$media.attr('height'); + } else { + t.height = t.options['default' + capsTagName + 'Height']; + } + + // set the size, while we wait for the plugins to load below + t.setPlayerSize(t.width, t.height); + + // create MediaElementShim + meOptions.pluginWidth = t.width; + meOptions.pluginHeight = t.height; + } + + // create MediaElement shim + mejs.MediaElement(t.$media[0], meOptions); + + if (typeof(t.container) != 'undefined' && t.controlsAreVisible){ + // controls are shown when loaded + t.container.trigger('controlsshown'); + } + }, + + showControls: function(doAnimation) { + var t = this; + + doAnimation = typeof doAnimation == 'undefined' || doAnimation; + + if (t.controlsAreVisible) + return; + + if (doAnimation) { + t.controls + .css('visibility','visible') + .stop(true, true).fadeIn(200, function() { + t.controlsAreVisible = true; + t.container.trigger('controlsshown'); + }); + + // any additional controls people might add and want to hide + t.container.find('.mejs-control') + .css('visibility','visible') + .stop(true, true).fadeIn(200, function() {t.controlsAreVisible = true;}); + + } else { + t.controls + .css('visibility','visible') + .css('display','block'); + + // any additional controls people might add and want to hide + t.container.find('.mejs-control') + .css('visibility','visible') + .css('display','block'); + + t.controlsAreVisible = true; + t.container.trigger('controlsshown'); + } + + t.setControlsSize(); + + }, + + hideControls: function(doAnimation) { + var t = this; + + doAnimation = typeof doAnimation == 'undefined' || doAnimation; + + if (!t.controlsAreVisible || t.options.alwaysShowControls) + return; + + if (doAnimation) { + // fade out main controls + t.controls.stop(true, true).fadeOut(200, function() { + $(this) + .css('visibility','hidden') + .css('display','block'); + + t.controlsAreVisible = false; + t.container.trigger('controlshidden'); + }); + + // any additional controls people might add and want to hide + t.container.find('.mejs-control').stop(true, true).fadeOut(200, function() { + $(this) + .css('visibility','hidden') + .css('display','block'); + }); + } else { + + // hide main controls + t.controls + .css('visibility','hidden') + .css('display','block'); + + // hide others + t.container.find('.mejs-control') + .css('visibility','hidden') + .css('display','block'); + + t.controlsAreVisible = false; + t.container.trigger('controlshidden'); + } + }, + + controlsTimer: null, + + startControlsTimer: function(timeout) { + + var t = this; + + timeout = typeof timeout != 'undefined' ? timeout : 1500; + + t.killControlsTimer('start'); + + t.controlsTimer = setTimeout(function() { + // + t.hideControls(); + t.killControlsTimer('hide'); + }, timeout); + }, + + killControlsTimer: function(src) { + + var t = this; + + if (t.controlsTimer !== null) { + clearTimeout(t.controlsTimer); + delete t.controlsTimer; + t.controlsTimer = null; + } + }, + + controlsEnabled: true, + + disableControls: function() { + var t= this; + + t.killControlsTimer(); + t.hideControls(false); + this.controlsEnabled = false; + }, + + enableControls: function() { + var t= this; + + t.showControls(false); + + t.controlsEnabled = true; + }, + + + // Sets up all controls and events + meReady: function(media, domNode) { + + + var t = this, + mf = mejs.MediaFeatures, + autoplayAttr = domNode.getAttribute('autoplay'), + autoplay = !(typeof autoplayAttr == 'undefined' || autoplayAttr === null || autoplayAttr === 'false'), + featureIndex, + feature; + + // make sure it can't create itself again if a plugin reloads + if (t.created) { + return; + } else { + t.created = true; + } + + t.media = media; + t.domNode = domNode; + + if (!(mf.isAndroid && t.options.AndroidUseNativeControls) && !(mf.isiPad && t.options.iPadUseNativeControls) && !(mf.isiPhone && t.options.iPhoneUseNativeControls)) { + + // two built in features + t.buildposter(t, t.controls, t.layers, t.media); + t.buildkeyboard(t, t.controls, t.layers, t.media); + t.buildoverlays(t, t.controls, t.layers, t.media); + + // grab for use by features + t.findTracks(); + + // add user-defined features/controls + for (featureIndex in t.options.features) { + feature = t.options.features[featureIndex]; + if (t['build' + feature]) { + try { + t['build' + feature](t, t.controls, t.layers, t.media); + } catch (e) { + // TODO: report control error + //throw e; + + + } + } + } + + t.container.trigger('controlsready'); + + // reset all layers and controls + t.setPlayerSize(t.width, t.height); + t.setControlsSize(); + + + // controls fade + if (t.isVideo) { + + if (mejs.MediaFeatures.hasTouch) { + + // for touch devices (iOS, Android) + // show/hide without animation on touch + + t.$media.bind('touchstart', function() { + + + // toggle controls + if (t.controlsAreVisible) { + t.hideControls(false); + } else { + if (t.controlsEnabled) { + t.showControls(false); + } + } + }); + + } else { + + // create callback here since it needs access to current + // MediaElement object + t.clickToPlayPauseCallback = function() { + // + + if (t.options.clickToPlayPause) { + if (t.media.paused) { + t.play(); + } else { + t.pause(); + } + } + }; + + // click to play/pause + t.media.addEventListener('click', t.clickToPlayPauseCallback, false); + + // show/hide controls + t.container + .bind('mouseenter mouseover', function () { + if (t.controlsEnabled) { + if (!t.options.alwaysShowControls ) { + t.killControlsTimer('enter'); + t.showControls(); + t.startControlsTimer(2500); + } + } + }) + .bind('mousemove', function() { + if (t.controlsEnabled) { + if (!t.controlsAreVisible) { + t.showControls(); + } + if (!t.options.alwaysShowControls) { + t.startControlsTimer(2500); + } + } + }) + .bind('mouseleave', function () { + if (t.controlsEnabled) { + if (!t.media.paused && !t.options.alwaysShowControls) { + t.startControlsTimer(1000); + } + } + }); + } + + if(t.options.hideVideoControlsOnLoad) { + t.hideControls(false); + } + + // check for autoplay + if (autoplay && !t.options.alwaysShowControls) { + t.hideControls(); + } + + // resizer + if (t.options.enableAutosize) { + t.media.addEventListener('loadedmetadata', function(e) { + // if the <video height> was not set and the options.videoHeight was not set + // then resize to the real dimensions + if (t.options.videoHeight <= 0 && t.domNode.getAttribute('height') === null && !isNaN(e.target.videoHeight)) { + t.setPlayerSize(e.target.videoWidth, e.target.videoHeight); + t.setControlsSize(); + t.media.setVideoSize(e.target.videoWidth, e.target.videoHeight); + } + }, false); + } + } + + // EVENTS + + // FOCUS: when a video starts playing, it takes focus from other players (possibily pausing them) + media.addEventListener('play', function() { + var playerIndex; + + // go through all other players + for (playerIndex in mejs.players) { + var p = mejs.players[playerIndex]; + if (p.id != t.id && t.options.pauseOtherPlayers && !p.paused && !p.ended) { + p.pause(); + } + p.hasFocus = false; + } + + t.hasFocus = true; + },false); + + + // ended for all + t.media.addEventListener('ended', function (e) { + if(t.options.autoRewind) { + try{ + t.media.setCurrentTime(0); + } catch (exp) { + + } + } + t.media.pause(); + + if (t.setProgressRail) { + t.setProgressRail(); + } + if (t.setCurrentRail) { + t.setCurrentRail(); + } + + if (t.options.loop) { + t.play(); + } else if (!t.options.alwaysShowControls && t.controlsEnabled) { + t.showControls(); + } + }, false); + + // resize on the first play + t.media.addEventListener('loadedmetadata', function(e) { + if (t.updateDuration) { + t.updateDuration(); + } + if (t.updateCurrent) { + t.updateCurrent(); + } + + if (!t.isFullScreen) { + t.setPlayerSize(t.width, t.height); + t.setControlsSize(); + } + }, false); + + + // webkit has trouble doing this without a delay + setTimeout(function () { + t.setPlayerSize(t.width, t.height); + t.setControlsSize(); + }, 50); + + // adjust controls whenever window sizes (used to be in fullscreen only) + t.globalBind('resize', function() { + + // don't resize for fullscreen mode + if ( !(t.isFullScreen || (mejs.MediaFeatures.hasTrueNativeFullScreen && document.webkitIsFullScreen)) ) { + t.setPlayerSize(t.width, t.height); + } + + // always adjust controls + t.setControlsSize(); + }); + + // TEMP: needs to be moved somewhere else + if (t.media.pluginType == 'youtube' && t.options.autoplay) { + //LOK-Soft: added t.options.autoplay to if -- I can only guess this is for hiding play button when autoplaying youtube, general hiding play button layer causes missing button on player load + t.container.find('.mejs-overlay-play').hide(); + } + } + + // force autoplay for HTML5 + if (autoplay && media.pluginType == 'native') { + t.play(); + } + + + if (t.options.success) { + + if (typeof t.options.success == 'string') { + window[t.options.success](t.media, t.domNode, t); + } else { + t.options.success(t.media, t.domNode, t); + } + } + }, + + handleError: function(e) { + var t = this; + + t.controls.hide(); + + // Tell user that the file cannot be played + if (t.options.error) { + t.options.error(e); + } + }, + + setPlayerSize: function(width,height) { + var t = this; + + if( !t.options.setDimensions ) { + return false; + } + + if (typeof width != 'undefined') { + t.width = width; + } + + if (typeof height != 'undefined') { + t.height = height; + } + + // detect 100% mode - use currentStyle for IE since css() doesn't return percentages + if (t.height.toString().indexOf('%') > 0 || t.$node.css('max-width') === '100%' || (t.$node[0].currentStyle && t.$node[0].currentStyle.maxWidth === '100%')) { + + // do we have the native dimensions yet? + var nativeWidth = (function() { + if (t.isVideo) { + if (t.media.videoWidth && t.media.videoWidth > 0) { + return t.media.videoWidth; + } else if (t.media.getAttribute('width') !== null) { + return t.media.getAttribute('width'); + } else { + return t.options.defaultVideoWidth; + } + } else { + return t.options.defaultAudioWidth; + } + })(); + + var nativeHeight = (function() { + if (t.isVideo) { + if (t.media.videoHeight && t.media.videoHeight > 0) { + return t.media.videoHeight; + } else if (t.media.getAttribute('height') !== null) { + return t.media.getAttribute('height'); + } else { + return t.options.defaultVideoHeight; + } + } else { + return t.options.defaultAudioHeight; + } + })(); + + var + parentWidth = t.container.parent().closest(':visible').width(), + parentHeight = t.container.parent().closest(':visible').height(), + newHeight = t.isVideo || !t.options.autosizeProgress ? parseInt(parentWidth * nativeHeight/nativeWidth, 10) : nativeHeight; + + // When we use percent, the newHeight can't be calculated so we get the container height + if(isNaN(newHeight) || ( parentHeight != 0 && newHeight > parentHeight )) { + newHeight = parentHeight; + } + + if (t.container.parent()[0].tagName.toLowerCase() === 'body') { // && t.container.siblings().count == 0) { + parentWidth = $(window).width(); + newHeight = $(window).height(); + } + + if ( newHeight != 0 && parentWidth != 0 ) { + // set outer container size + t.container + .width(parentWidth) + .height(newHeight); + + // set native <video> or <audio> and shims + t.$media.add(t.container.find('.mejs-shim')) + .width('100%') + .height('100%'); + + // if shim is ready, send the size to the embeded plugin + if (t.isVideo) { + if (t.media.setVideoSize) { + t.media.setVideoSize(parentWidth, newHeight); + } + } + + // set the layers + t.layers.children('.mejs-layer') + .width('100%') + .height('100%'); + } + + + } else { + + t.container + .width(t.width) + .height(t.height); + + t.layers.children('.mejs-layer') + .width(t.width) + .height(t.height); + + } + + // special case for big play button so it doesn't go over the controls area + var playLayer = t.layers.find('.mejs-overlay-play'), + playButton = playLayer.find('.mejs-overlay-button'); + + playLayer.height(t.container.height() - t.controls.height()); + playButton.css('margin-top', '-' + (playButton.height()/2 - t.controls.height()/2).toString() + 'px' ); + + }, + + setControlsSize: function() { + var t = this, + usedWidth = 0, + railWidth = 0, + rail = t.controls.find('.mejs-time-rail'), + total = t.controls.find('.mejs-time-total'), + current = t.controls.find('.mejs-time-current'), + loaded = t.controls.find('.mejs-time-loaded'), + others = rail.siblings(), + lastControl = others.last(), + lastControlPosition = null; + + // skip calculation if hidden + if (!t.container.is(':visible') || !rail.length || !rail.is(':visible')) { + return; + } + + + // allow the size to come from custom CSS + if (t.options && !t.options.autosizeProgress) { + // Also, frontends devs can be more flexible + // due the opportunity of absolute positioning. + railWidth = parseInt(rail.css('width')); + } + + // attempt to autosize + if (railWidth === 0 || !railWidth) { + + // find the size of all the other controls besides the rail + others.each(function() { + var $this = $(this); + if ($this.css('position') != 'absolute' && $this.is(':visible')) { + usedWidth += $(this).outerWidth(true); + } + }); + + // fit the rail into the remaining space + railWidth = t.controls.width() - usedWidth - (rail.outerWidth(true) - rail.width()); + } + + // resize the rail, + // but then check if the last control (say, the fullscreen button) got pushed down + // this often happens when zoomed + do { + // outer area + rail.width(railWidth); + // dark space + total.width(railWidth - (total.outerWidth(true) - total.width())); + + if (lastControl.css('position') != 'absolute') { + lastControlPosition = lastControl.position(); + railWidth--; + } + } while (lastControlPosition != null && lastControlPosition.top > 0 && railWidth > 0); + + if (t.setProgressRail) + t.setProgressRail(); + if (t.setCurrentRail) + t.setCurrentRail(); + }, + + + buildposter: function(player, controls, layers, media) { + var t = this, + poster = + $('<div class="mejs-poster mejs-layer">' + + '</div>') + .appendTo(layers), + posterUrl = player.$media.attr('poster'); + + // prioriy goes to option (this is useful if you need to support iOS 3.x (iOS completely fails with poster) + if (player.options.poster !== '') { + posterUrl = player.options.poster; + } + + // second, try the real poster + if (posterUrl !== '' && posterUrl != null) { + t.setPoster(posterUrl); + } else { + poster.hide(); + } + + media.addEventListener('play',function() { + poster.hide(); + }, false); + + if(player.options.showPosterWhenEnded && player.options.autoRewind){ + media.addEventListener('ended',function() { + poster.show(); + }, false); + } + }, + + setPoster: function(url) { + var t = this, + posterDiv = t.container.find('.mejs-poster'), + posterImg = posterDiv.find('img'); + + if (posterImg.length == 0) { + posterImg = $('<img width="100%" height="100%" />').appendTo(posterDiv); + } + + posterImg.attr('src', url); + posterDiv.css({'background-image' : 'url(' + url + ')'}); + }, + + buildoverlays: function(player, controls, layers, media) { + var t = this; + if (!player.isVideo) + return; + + var + loading = + $('<div class="mejs-overlay mejs-layer">'+ + '<div class="mejs-overlay-loading"><span></span></div>'+ + '</div>') + .hide() // start out hidden + .appendTo(layers), + error = + $('<div class="mejs-overlay mejs-layer">'+ + '<div class="mejs-overlay-error"></div>'+ + '</div>') + .hide() // start out hidden + .appendTo(layers), + // this needs to come last so it's on top + bigPlay = + $('<div class="mejs-overlay mejs-layer mejs-overlay-play">'+ + '<div class="mejs-overlay-button"></div>'+ + '</div>') + .appendTo(layers) + .bind('click', function() { // Removed 'touchstart' due issues on Samsung Android devices where a tap on bigPlay started and immediately stopped the video + if (t.options.clickToPlayPause) { + if (media.paused) { + media.play(); + } + } + }); + + /* + if (mejs.MediaFeatures.isiOS || mejs.MediaFeatures.isAndroid) { + bigPlay.remove(); + loading.remove(); + } + */ + + + // show/hide big play button + media.addEventListener('play',function() { + bigPlay.hide(); + loading.hide(); + controls.find('.mejs-time-buffering').hide(); + error.hide(); + }, false); + + media.addEventListener('playing', function() { + bigPlay.hide(); + loading.hide(); + controls.find('.mejs-time-buffering').hide(); + error.hide(); + }, false); + + media.addEventListener('seeking', function() { + loading.show(); + controls.find('.mejs-time-buffering').show(); + }, false); + + media.addEventListener('seeked', function() { + loading.hide(); + controls.find('.mejs-time-buffering').hide(); + }, false); + + media.addEventListener('pause',function() { + if (!mejs.MediaFeatures.isiPhone) { + bigPlay.show(); + } + }, false); + + media.addEventListener('waiting', function() { + loading.show(); + controls.find('.mejs-time-buffering').show(); + }, false); + + + // show/hide loading + media.addEventListener('loadeddata',function() { + // for some reason Chrome is firing this event + //if (mejs.MediaFeatures.isChrome && media.getAttribute && media.getAttribute('preload') === 'none') + // return; + + loading.show(); + controls.find('.mejs-time-buffering').show(); + }, false); + media.addEventListener('canplay',function() { + loading.hide(); + controls.find('.mejs-time-buffering').hide(); + }, false); + + // error handling + media.addEventListener('error',function() { + loading.hide(); + controls.find('.mejs-time-buffering').hide(); + error.show(); + error.find('mejs-overlay-error').html("Error loading this resource"); + }, false); + + media.addEventListener('keydown', function(e) { + t.onkeydown(player, media, e); + }, false); + }, + + buildkeyboard: function(player, controls, layers, media) { + + var t = this; + + // listen for key presses + t.globalBind('keydown', function(e) { + return t.onkeydown(player, media, e); + }); + + // check if someone clicked outside a player region, then kill its focus + t.globalBind('click', function(event) { + player.hasFocus = $(event.target).closest('.mejs-container').length != 0; + }); + + }, + onkeydown: function(player, media, e) { + if (player.hasFocus && player.options.enableKeyboard) { + // find a matching key + for (var i = 0, il = player.options.keyActions.length; i < il; i++) { + var keyAction = player.options.keyActions[i]; + + for (var j = 0, jl = keyAction.keys.length; j < jl; j++) { + if (e.keyCode == keyAction.keys[j]) { + if (typeof(e.preventDefault) == "function") e.preventDefault(); + keyAction.action(player, media, e.keyCode); + return false; + } + } + } + } + + return true; + }, + + findTracks: function() { + var t = this, + tracktags = t.$media.find('track'); + + // store for use by plugins + t.tracks = []; + tracktags.each(function(index, track) { + + track = $(track); + + t.tracks.push({ + srclang: (track.attr('srclang')) ? track.attr('srclang').toLowerCase() : '', + src: track.attr('src'), + kind: track.attr('kind'), + label: track.attr('label') || '', + entries: [], + isLoaded: false + }); + }); + }, + changeSkin: function(className) { + this.container[0].className = 'mejs-container ' + className; + this.setPlayerSize(this.width, this.height); + this.setControlsSize(); + }, + play: function() { + this.load(); + this.media.play(); + }, + pause: function() { + try { + this.media.pause(); + } catch (e) {} + }, + load: function() { + if (!this.isLoaded) { + this.media.load(); + } + + this.isLoaded = true; + }, + setMuted: function(muted) { + this.media.setMuted(muted); + }, + setCurrentTime: function(time) { + this.media.setCurrentTime(time); + }, + getCurrentTime: function() { + return this.media.currentTime; + }, + setVolume: function(volume) { + this.media.setVolume(volume); + }, + getVolume: function() { + return this.media.volume; + }, + setSrc: function(src) { + this.media.setSrc(src); + }, + remove: function() { + var t = this, featureIndex, feature; + + // invoke features cleanup + for (featureIndex in t.options.features) { + feature = t.options.features[featureIndex]; + if (t['clean' + feature]) { + try { + t['clean' + feature](t); + } catch (e) { + // TODO: report control error + //throw e; + // + // + } + } + } + + // grab video and put it back in place + if (!t.isDynamic) { + t.$media.prop('controls', true); + // detach events from the video + // TODO: detach event listeners better than this; + // also detach ONLY the events attached by this plugin! + t.$node.clone().insertBefore(t.container).show(); + t.$node.remove(); + } else { + t.$node.insertBefore(t.container); + } + + if (t.media.pluginType !== 'native') { + t.media.remove(); + } + + // Remove the player from the mejs.players object so that pauseOtherPlayers doesn't blow up when trying to pause a non existance flash api. + delete mejs.players[t.id]; + + if (typeof t.container == 'object') { + t.container.remove(); + } + t.globalUnbind(); + delete t.node.player; + } + }; + + (function(){ + var rwindow = /^((after|before)print|(before)?unload|hashchange|message|o(ff|n)line|page(hide|show)|popstate|resize|storage)\b/; + + function splitEvents(events, id) { + // add player ID as an event namespace so it's easier to unbind them all later + var ret = {d: [], w: []}; + $.each((events || '').split(' '), function(k, v){ + var eventname = v + '.' + id; + if (eventname.indexOf('.') === 0) { + ret.d.push(eventname); + ret.w.push(eventname); + } + else { + ret[rwindow.test(v) ? 'w' : 'd'].push(eventname); + } + }); + ret.d = ret.d.join(' '); + ret.w = ret.w.join(' '); + return ret; + } + + mejs.MediaElementPlayer.prototype.globalBind = function(events, data, callback) { + var t = this; + events = splitEvents(events, t.id); + if (events.d) $(document).bind(events.d, data, callback); + if (events.w) $(window).bind(events.w, data, callback); + }; + + mejs.MediaElementPlayer.prototype.globalUnbind = function(events, callback) { + var t = this; + events = splitEvents(events, t.id); + if (events.d) $(document).unbind(events.d, callback); + if (events.w) $(window).unbind(events.w, callback); + }; + })(); + + // turn into jQuery plugin + if (typeof $ != 'undefined') { + $.fn.mediaelementplayer = function (options) { + if (options === false) { + this.each(function () { + var player = $(this).data('mediaelementplayer'); + if (player) { + player.remove(); + } + $(this).removeData('mediaelementplayer'); + }); + } + else { + this.each(function () { + $(this).data('mediaelementplayer', new mejs.MediaElementPlayer(this, options)); + }); + } + return this; + }; + + + $(document).ready(function() { + // auto enable using JSON attribute + $('.mejs-player').mediaelementplayer(); + }); + } + + // push out to window + window.MediaElementPlayer = mejs.MediaElementPlayer; + +})(mejs.$); + +(function($) { + + $.extend(mejs.MepDefaults, { + playpauseText: mejs.i18n.t('Play/Pause') + }); + + // PLAY/pause BUTTON + $.extend(MediaElementPlayer.prototype, { + buildplaypause: function(player, controls, layers, media) { + var + t = this, + play = + $('<div class="mejs-button mejs-playpause-button mejs-play" >' + + '<button type="button" aria-controls="' + t.id + '" title="' + t.options.playpauseText + '" aria-label="' + t.options.playpauseText + '"></button>' + + '</div>') + .appendTo(controls) + .click(function(e) { + e.preventDefault(); + + if (media.paused) { + media.play(); + } else { + media.pause(); + } + + return false; + }); + + media.addEventListener('play',function() { + play.removeClass('mejs-play').addClass('mejs-pause'); + }, false); + media.addEventListener('playing',function() { + play.removeClass('mejs-play').addClass('mejs-pause'); + }, false); + + + media.addEventListener('pause',function() { + play.removeClass('mejs-pause').addClass('mejs-play'); + }, false); + media.addEventListener('paused',function() { + play.removeClass('mejs-pause').addClass('mejs-play'); + }, false); + } + }); + +})(mejs.$); + +(function($) { + + $.extend(mejs.MepDefaults, { + stopText: 'Stop' + }); + + // STOP BUTTON + $.extend(MediaElementPlayer.prototype, { + buildstop: function(player, controls, layers, media) { + var t = this, + stop = + $('<div class="mejs-button mejs-stop-button mejs-stop">' + + '<button type="button" aria-controls="' + t.id + '" title="' + t.options.stopText + '" aria-label="' + t.options.stopText + '"></button>' + + '</div>') + .appendTo(controls) + .click(function() { + if (!media.paused) { + media.pause(); + } + if (media.currentTime > 0) { + media.setCurrentTime(0); + media.pause(); + controls.find('.mejs-time-current').width('0px'); + controls.find('.mejs-time-handle').css('left', '0px'); + controls.find('.mejs-time-float-current').html( mejs.Utility.secondsToTimeCode(0) ); + controls.find('.mejs-currenttime').html( mejs.Utility.secondsToTimeCode(0) ); + layers.find('.mejs-poster').show(); + } + }); + } + }); + +})(mejs.$); + +(function($) { + // progress/loaded bar + $.extend(MediaElementPlayer.prototype, { + buildprogress: function(player, controls, layers, media) { + + $('<div class="mejs-time-rail">'+ + '<span class="mejs-time-total">'+ + '<span class="mejs-time-buffering"></span>'+ + '<span class="mejs-time-loaded"></span>'+ + '<span class="mejs-time-current"></span>'+ + '<span class="mejs-time-handle"></span>'+ + '<span class="mejs-time-float">' + + '<span class="mejs-time-float-current">00:00</span>' + + '<span class="mejs-time-float-corner"></span>' + + '</span>'+ + '</span>'+ + '</div>') + .appendTo(controls); + controls.find('.mejs-time-buffering').hide(); + + var + t = this, + total = controls.find('.mejs-time-total'), + loaded = controls.find('.mejs-time-loaded'), + current = controls.find('.mejs-time-current'), + handle = controls.find('.mejs-time-handle'), + timefloat = controls.find('.mejs-time-float'), + timefloatcurrent = controls.find('.mejs-time-float-current'), + handleMouseMove = function (e) { + // mouse or touch position relative to the object + if (e.originalEvent.changedTouches) { + var x = e.originalEvent.changedTouches[0].pageX; + }else{ + var x = e.pageX; + } + + var offset = total.offset(), + width = total.outerWidth(true), + percentage = 0, + newTime = 0, + pos = 0; + + + if (media.duration) { + if (x < offset.left) { + x = offset.left; + } else if (x > width + offset.left) { + x = width + offset.left; + } + + pos = x - offset.left; + percentage = (pos / width); + newTime = (percentage <= 0.02) ? 0 : percentage * media.duration; + + // seek to where the mouse is + if (mouseIsDown && newTime !== media.currentTime) { + media.setCurrentTime(newTime); + } + + // position floating time box + if (!mejs.MediaFeatures.hasTouch) { + timefloat.css('left', pos); + timefloatcurrent.html( mejs.Utility.secondsToTimeCode(newTime) ); + timefloat.show(); + } + } + }, + mouseIsDown = false, + mouseIsOver = false; + + // handle clicks + //controls.find('.mejs-time-rail').delegate('span', 'click', handleMouseMove); + total + .bind('mousedown touchstart', function (e) { + // only handle left clicks or touch + if (e.which === 1 || e.which === 0) { + mouseIsDown = true; + handleMouseMove(e); + t.globalBind('mousemove.dur touchmove.dur', function(e) { + handleMouseMove(e); + }); + t.globalBind('mouseup.dur touchend.dur', function (e) { + mouseIsDown = false; + timefloat.hide(); + t.globalUnbind('.dur'); + }); + return false; + } + }) + .bind('mouseenter', function(e) { + mouseIsOver = true; + t.globalBind('mousemove.dur', function(e) { + handleMouseMove(e); + }); + if (!mejs.MediaFeatures.hasTouch) { + timefloat.show(); + } + }) + .bind('mouseleave',function(e) { + mouseIsOver = false; + if (!mouseIsDown) { + t.globalUnbind('.dur'); + timefloat.hide(); + } + }); + + // loading + media.addEventListener('progress', function (e) { + player.setProgressRail(e); + player.setCurrentRail(e); + }, false); + + // current time + media.addEventListener('timeupdate', function(e) { + player.setProgressRail(e); + player.setCurrentRail(e); + }, false); + + + // store for later use + t.loaded = loaded; + t.total = total; + t.current = current; + t.handle = handle; + }, + setProgressRail: function(e) { + + var + t = this, + target = (e != undefined) ? e.target : t.media, + percent = null; + + // newest HTML5 spec has buffered array (FF4, Webkit) + if (target && target.buffered && target.buffered.length > 0 && target.buffered.end && target.duration) { + // TODO: account for a real array with multiple values (only Firefox 4 has this so far) + percent = target.buffered.end(0) / target.duration; + } + // Some browsers (e.g., FF3.6 and Safari 5) cannot calculate target.bufferered.end() + // to be anything other than 0. If the byte count is available we use this instead. + // Browsers that support the else if do not seem to have the bufferedBytes value and + // should skip to there. Tested in Safari 5, Webkit head, FF3.6, Chrome 6, IE 7/8. + else if (target && target.bytesTotal != undefined && target.bytesTotal > 0 && target.bufferedBytes != undefined) { + percent = target.bufferedBytes / target.bytesTotal; + } + // Firefox 3 with an Ogg file seems to go this way + else if (e && e.lengthComputable && e.total != 0) { + percent = e.loaded/e.total; + } + + // finally update the progress bar + if (percent !== null) { + percent = Math.min(1, Math.max(0, percent)); + // update loaded bar + if (t.loaded && t.total) { + t.loaded.width(t.total.width() * percent); + } + } + }, + setCurrentRail: function() { + + var t = this; + + if (t.media.currentTime != undefined && t.media.duration) { + + // update bar and handle + if (t.total && t.handle) { + var + newWidth = Math.round(t.total.width() * t.media.currentTime / t.media.duration), + handlePos = newWidth - Math.round(t.handle.outerWidth(true) / 2); + + t.current.width(newWidth); + t.handle.css('left', handlePos); + } + } + + } + }); +})(mejs.$); + +(function($) { + + // options + $.extend(mejs.MepDefaults, { + duration: -1, + timeAndDurationSeparator: '<span> | </span>' + }); + + + // current and duration 00:00 / 00:00 + $.extend(MediaElementPlayer.prototype, { + buildcurrent: function(player, controls, layers, media) { + var t = this; + + $('<div class="mejs-time">'+ + '<span class="mejs-currenttime">' + (player.options.alwaysShowHours ? '00:' : '') + + (player.options.showTimecodeFrameCount? '00:00:00':'00:00')+ '</span>'+ + '</div>') + .appendTo(controls); + + t.currenttime = t.controls.find('.mejs-currenttime'); + + media.addEventListener('timeupdate',function() { + player.updateCurrent(); + }, false); + }, + + + buildduration: function(player, controls, layers, media) { + var t = this; + + if (controls.children().last().find('.mejs-currenttime').length > 0) { + $(t.options.timeAndDurationSeparator + + '<span class="mejs-duration">' + + (t.options.duration > 0 ? + mejs.Utility.secondsToTimeCode(t.options.duration, t.options.alwaysShowHours || t.media.duration > 3600, t.options.showTimecodeFrameCount, t.options.framesPerSecond || 25) : + ((player.options.alwaysShowHours ? '00:' : '') + (player.options.showTimecodeFrameCount? '00:00:00':'00:00')) + ) + + '</span>') + .appendTo(controls.find('.mejs-time')); + } else { + + // add class to current time + controls.find('.mejs-currenttime').parent().addClass('mejs-currenttime-container'); + + $('<div class="mejs-time mejs-duration-container">'+ + '<span class="mejs-duration">' + + (t.options.duration > 0 ? + mejs.Utility.secondsToTimeCode(t.options.duration, t.options.alwaysShowHours || t.media.duration > 3600, t.options.showTimecodeFrameCount, t.options.framesPerSecond || 25) : + ((player.options.alwaysShowHours ? '00:' : '') + (player.options.showTimecodeFrameCount? '00:00:00':'00:00')) + ) + + '</span>' + + '</div>') + .appendTo(controls); + } + + t.durationD = t.controls.find('.mejs-duration'); + + media.addEventListener('timeupdate',function() { + player.updateDuration(); + }, false); + }, + + updateCurrent: function() { + var t = this; + + if (t.currenttime) { + t.currenttime.html(mejs.Utility.secondsToTimeCode(t.media.currentTime, t.options.alwaysShowHours || t.media.duration > 3600, t.options.showTimecodeFrameCount, t.options.framesPerSecond || 25)); + } + }, + + updateDuration: function() { + var t = this; + + //Toggle the long video class if the video is longer than an hour. + t.container.toggleClass("mejs-long-video", t.media.duration > 3600); + + if (t.durationD && (t.options.duration > 0 || t.media.duration)) { + t.durationD.html(mejs.Utility.secondsToTimeCode(t.options.duration > 0 ? t.options.duration : t.media.duration, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond || 25)); + } + } + }); + +})(mejs.$); + +(function($) { + + $.extend(mejs.MepDefaults, { + muteText: mejs.i18n.t('Mute Toggle'), + hideVolumeOnTouchDevices: true, + + audioVolume: 'horizontal', + videoVolume: 'vertical' + }); + + $.extend(MediaElementPlayer.prototype, { + buildvolume: function(player, controls, layers, media) { + + // Android and iOS don't support volume controls + if ((mejs.MediaFeatures.isAndroid || mejs.MediaFeatures.isiOS) && this.options.hideVolumeOnTouchDevices) + return; + + var t = this, + mode = (t.isVideo) ? t.options.videoVolume : t.options.audioVolume, + mute = (mode == 'horizontal') ? + + // horizontal version + $('<div class="mejs-button mejs-volume-button mejs-mute">'+ + '<button type="button" aria-controls="' + t.id + '" title="' + t.options.muteText + '" aria-label="' + t.options.muteText + '"></button>'+ + '</div>' + + '<div class="mejs-horizontal-volume-slider">'+ // outer background + '<div class="mejs-horizontal-volume-total"></div>'+ // line background + '<div class="mejs-horizontal-volume-current"></div>'+ // current volume + '<div class="mejs-horizontal-volume-handle"></div>'+ // handle + '</div>' + ) + .appendTo(controls) : + + // vertical version + $('<div class="mejs-button mejs-volume-button mejs-mute">'+ + '<button type="button" aria-controls="' + t.id + '" title="' + t.options.muteText + '" aria-label="' + t.options.muteText + '"></button>'+ + '<div class="mejs-volume-slider">'+ // outer background + '<div class="mejs-volume-total"></div>'+ // line background + '<div class="mejs-volume-current"></div>'+ // current volume + '<div class="mejs-volume-handle"></div>'+ // handle + '</div>'+ + '</div>') + .appendTo(controls), + volumeSlider = t.container.find('.mejs-volume-slider, .mejs-horizontal-volume-slider'), + volumeTotal = t.container.find('.mejs-volume-total, .mejs-horizontal-volume-total'), + volumeCurrent = t.container.find('.mejs-volume-current, .mejs-horizontal-volume-current'), + volumeHandle = t.container.find('.mejs-volume-handle, .mejs-horizontal-volume-handle'), + + positionVolumeHandle = function(volume, secondTry) { + + if (!volumeSlider.is(':visible') && typeof secondTry == 'undefined') { + volumeSlider.show(); + positionVolumeHandle(volume, true); + volumeSlider.hide() + return; + } + + // correct to 0-1 + volume = Math.max(0,volume); + volume = Math.min(volume,1); + + // ajust mute button style + if (volume == 0) { + mute.removeClass('mejs-mute').addClass('mejs-unmute'); + } else { + mute.removeClass('mejs-unmute').addClass('mejs-mute'); + } + + // position slider + if (mode == 'vertical') { + var + + // height of the full size volume slider background + totalHeight = volumeTotal.height(), + + // top/left of full size volume slider background + totalPosition = volumeTotal.position(), + + // the new top position based on the current volume + // 70% volume on 100px height == top:30px + newTop = totalHeight - (totalHeight * volume); + + // handle + volumeHandle.css('top', Math.round(totalPosition.top + newTop - (volumeHandle.height() / 2))); + + // show the current visibility + volumeCurrent.height(totalHeight - newTop ); + volumeCurrent.css('top', totalPosition.top + newTop); + } else { + var + + // height of the full size volume slider background + totalWidth = volumeTotal.width(), + + // top/left of full size volume slider background + totalPosition = volumeTotal.position(), + + // the new left position based on the current volume + newLeft = totalWidth * volume; + + // handle + volumeHandle.css('left', Math.round(totalPosition.left + newLeft - (volumeHandle.width() / 2))); + + // rezize the current part of the volume bar + volumeCurrent.width( Math.round(newLeft) ); + } + }, + handleVolumeMove = function(e) { + + var volume = null, + totalOffset = volumeTotal.offset(); + + // calculate the new volume based on the moust position + if (mode == 'vertical') { + + var + railHeight = volumeTotal.height(), + totalTop = parseInt(volumeTotal.css('top').replace(/px/,''),10), + newY = e.pageY - totalOffset.top; + + volume = (railHeight - newY) / railHeight; + + // the controls just hide themselves (usually when mouse moves too far up) + if (totalOffset.top == 0 || totalOffset.left == 0) + return; + + } else { + var + railWidth = volumeTotal.width(), + newX = e.pageX - totalOffset.left; + + volume = newX / railWidth; + } + + // ensure the volume isn't outside 0-1 + volume = Math.max(0,volume); + volume = Math.min(volume,1); + + // position the slider and handle + positionVolumeHandle(volume); + + // set the media object (this will trigger the volumechanged event) + if (volume == 0) { + media.setMuted(true); + } else { + media.setMuted(false); + } + media.setVolume(volume); + }, + mouseIsDown = false, + mouseIsOver = false; + + // SLIDER + + mute + .hover(function() { + volumeSlider.show(); + mouseIsOver = true; + }, function() { + mouseIsOver = false; + + if (!mouseIsDown && mode == 'vertical') { + volumeSlider.hide(); + } + }); + + volumeSlider + .bind('mouseover', function() { + mouseIsOver = true; + }) + .bind('mousedown', function (e) { + handleVolumeMove(e); + t.globalBind('mousemove.vol', function(e) { + handleVolumeMove(e); + }); + t.globalBind('mouseup.vol', function () { + mouseIsDown = false; + t.globalUnbind('.vol'); + + if (!mouseIsOver && mode == 'vertical') { + volumeSlider.hide(); + } + }); + mouseIsDown = true; + + return false; + }); + + + // MUTE button + mute.find('button').click(function() { + media.setMuted( !media.muted ); + }); + + // listen for volume change events from other sources + media.addEventListener('volumechange', function(e) { + if (!mouseIsDown) { + if (media.muted) { + positionVolumeHandle(0); + mute.removeClass('mejs-mute').addClass('mejs-unmute'); + } else { + positionVolumeHandle(media.volume); + mute.removeClass('mejs-unmute').addClass('mejs-mute'); + } + } + }, false); + + if (t.container.is(':visible')) { + // set initial volume + positionVolumeHandle(player.options.startVolume); + + // mutes the media and sets the volume icon muted if the initial volume is set to 0 + if (player.options.startVolume === 0) { + media.setMuted(true); + } + + // shim gets the startvolume as a parameter, but we have to set it on the native <video> and <audio> elements + if (media.pluginType === 'native') { + media.setVolume(player.options.startVolume); + } + } + } + }); + +})(mejs.$); + +(function($) { + + $.extend(mejs.MepDefaults, { + usePluginFullScreen: true, + newWindowCallback: function() { return '';}, + fullscreenText: mejs.i18n.t('Fullscreen') + }); + + $.extend(MediaElementPlayer.prototype, { + + isFullScreen: false, + + isNativeFullScreen: false, + + isInIframe: false, + + buildfullscreen: function(player, controls, layers, media) { + + if (!player.isVideo) + return; + + player.isInIframe = (window.location != window.parent.location); + + // native events + if (mejs.MediaFeatures.hasTrueNativeFullScreen) { + + // chrome doesn't alays fire this in an iframe + var func = function(e) { + if (player.isFullScreen) { + if (mejs.MediaFeatures.isFullScreen()) { + player.isNativeFullScreen = true; + // reset the controls once we are fully in full screen + player.setControlsSize(); + } else { + player.isNativeFullScreen = false; + // when a user presses ESC + // make sure to put the player back into place + player.exitFullScreen(); + } + } + }; + + player.globalBind(mejs.MediaFeatures.fullScreenEventName, func); + } + + var t = this, + normalHeight = 0, + normalWidth = 0, + container = player.container, + fullscreenBtn = + $('<div class="mejs-button mejs-fullscreen-button">' + + '<button type="button" aria-controls="' + t.id + '" title="' + t.options.fullscreenText + '" aria-label="' + t.options.fullscreenText + '"></button>' + + '</div>') + .appendTo(controls); + + if (t.media.pluginType === 'native' || (!t.options.usePluginFullScreen && !mejs.MediaFeatures.isFirefox)) { + + fullscreenBtn.click(function() { + var isFullScreen = (mejs.MediaFeatures.hasTrueNativeFullScreen && mejs.MediaFeatures.isFullScreen()) || player.isFullScreen; + + if (isFullScreen) { + player.exitFullScreen(); + } else { + player.enterFullScreen(); + } + }); + + } else { + + var hideTimeout = null, + supportsPointerEvents = (function() { + // TAKEN FROM MODERNIZR + var element = document.createElement('x'), + documentElement = document.documentElement, + getComputedStyle = window.getComputedStyle, + supports; + if(!('pointerEvents' in element.style)){ + return false; + } + element.style.pointerEvents = 'auto'; + element.style.pointerEvents = 'x'; + documentElement.appendChild(element); + supports = getComputedStyle && + getComputedStyle(element, '').pointerEvents === 'auto'; + documentElement.removeChild(element); + return !!supports; + })(); + + // + + if (supportsPointerEvents && !mejs.MediaFeatures.isOpera) { // opera doesn't allow this :( + + // allows clicking through the fullscreen button and controls down directly to Flash + + /* + When a user puts his mouse over the fullscreen button, the controls are disabled + So we put a div over the video and another one on iether side of the fullscreen button + that caputre mouse movement + and restore the controls once the mouse moves outside of the fullscreen button + */ + + var fullscreenIsDisabled = false, + restoreControls = function() { + if (fullscreenIsDisabled) { + // hide the hovers + for (var i in hoverDivs) { + hoverDivs[i].hide(); + } + + // restore the control bar + fullscreenBtn.css('pointer-events', ''); + t.controls.css('pointer-events', ''); + + // prevent clicks from pausing video + t.media.removeEventListener('click', t.clickToPlayPauseCallback); + + // store for later + fullscreenIsDisabled = false; + } + }, + hoverDivs = {}, + hoverDivNames = ['top', 'left', 'right', 'bottom'], + i, len, + positionHoverDivs = function() { + var fullScreenBtnOffsetLeft = fullscreenBtn.offset().left - t.container.offset().left, + fullScreenBtnOffsetTop = fullscreenBtn.offset().top - t.container.offset().top, + fullScreenBtnWidth = fullscreenBtn.outerWidth(true), + fullScreenBtnHeight = fullscreenBtn.outerHeight(true), + containerWidth = t.container.width(), + containerHeight = t.container.height(); + + for (i in hoverDivs) { + hoverDivs[i].css({position: 'absolute', top: 0, left: 0}); //, backgroundColor: '#f00'}); + } + + // over video, but not controls + hoverDivs['top'] + .width( containerWidth ) + .height( fullScreenBtnOffsetTop ); + + // over controls, but not the fullscreen button + hoverDivs['left'] + .width( fullScreenBtnOffsetLeft ) + .height( fullScreenBtnHeight ) + .css({top: fullScreenBtnOffsetTop}); + + // after the fullscreen button + hoverDivs['right'] + .width( containerWidth - fullScreenBtnOffsetLeft - fullScreenBtnWidth ) + .height( fullScreenBtnHeight ) + .css({top: fullScreenBtnOffsetTop, + left: fullScreenBtnOffsetLeft + fullScreenBtnWidth}); + + // under the fullscreen button + hoverDivs['bottom'] + .width( containerWidth ) + .height( containerHeight - fullScreenBtnHeight - fullScreenBtnOffsetTop ) + .css({top: fullScreenBtnOffsetTop + fullScreenBtnHeight}); + }; + + t.globalBind('resize', function() { + positionHoverDivs(); + }); + + for (i = 0, len = hoverDivNames.length; i < len; i++) { + hoverDivs[hoverDivNames[i]] = $('<div class="mejs-fullscreen-hover" />').appendTo(t.container).mouseover(restoreControls).hide(); + } + + // on hover, kill the fullscreen button's HTML handling, allowing clicks down to Flash + fullscreenBtn.on('mouseover',function() { + + if (!t.isFullScreen) { + + var buttonPos = fullscreenBtn.offset(), + containerPos = player.container.offset(); + + // move the button in Flash into place + media.positionFullscreenButton(buttonPos.left - containerPos.left, buttonPos.top - containerPos.top, false); + + // allows click through + fullscreenBtn.css('pointer-events', 'none'); + t.controls.css('pointer-events', 'none'); + + // restore click-to-play + t.media.addEventListener('click', t.clickToPlayPauseCallback); + + // show the divs that will restore things + for (i in hoverDivs) { + hoverDivs[i].show(); + } + + positionHoverDivs(); + + fullscreenIsDisabled = true; + } + + }); + + // restore controls anytime the user enters or leaves fullscreen + media.addEventListener('fullscreenchange', function(e) { + t.isFullScreen = !t.isFullScreen; + // don't allow plugin click to pause video - messes with + // plugin's controls + if (t.isFullScreen) { + t.media.removeEventListener('click', t.clickToPlayPauseCallback); + } else { + t.media.addEventListener('click', t.clickToPlayPauseCallback); + } + restoreControls(); + }); + + + // the mouseout event doesn't work on the fullscren button, because we already killed the pointer-events + // so we use the document.mousemove event to restore controls when the mouse moves outside the fullscreen button + + t.globalBind('mousemove', function(e) { + + // if the mouse is anywhere but the fullsceen button, then restore it all + if (fullscreenIsDisabled) { + + var fullscreenBtnPos = fullscreenBtn.offset(); + + + if (e.pageY < fullscreenBtnPos.top || e.pageY > fullscreenBtnPos.top + fullscreenBtn.outerHeight(true) || + e.pageX < fullscreenBtnPos.left || e.pageX > fullscreenBtnPos.left + fullscreenBtn.outerWidth(true) + ) { + + fullscreenBtn.css('pointer-events', ''); + t.controls.css('pointer-events', ''); + + fullscreenIsDisabled = false; + } + } + }); + + + + } else { + + // the hover state will show the fullscreen button in Flash to hover up and click + + fullscreenBtn + .on('mouseover', function() { + + if (hideTimeout !== null) { + clearTimeout(hideTimeout); + delete hideTimeout; + } + + var buttonPos = fullscreenBtn.offset(), + containerPos = player.container.offset(); + + media.positionFullscreenButton(buttonPos.left - containerPos.left, buttonPos.top - containerPos.top, true); + + }) + .on('mouseout', function() { + + if (hideTimeout !== null) { + clearTimeout(hideTimeout); + delete hideTimeout; + } + + hideTimeout = setTimeout(function() { + media.hideFullscreenButton(); + }, 1500); + + + }); + } + } + + player.fullscreenBtn = fullscreenBtn; + + t.globalBind('keydown',function (e) { + if (((mejs.MediaFeatures.hasTrueNativeFullScreen && mejs.MediaFeatures.isFullScreen()) || t.isFullScreen) && e.keyCode == 27) { + player.exitFullScreen(); + } + }); + + }, + + cleanfullscreen: function(player) { + player.exitFullScreen(); + }, + + containerSizeTimeout: null, + + enterFullScreen: function() { + + var t = this; + + // firefox+flash can't adjust plugin sizes without resetting :( + if (t.media.pluginType !== 'native' && (mejs.MediaFeatures.isFirefox || t.options.usePluginFullScreen)) { + //t.media.setFullscreen(true); + //player.isFullScreen = true; + return; + } + + // set it to not show scroll bars so 100% will work + $(document.documentElement).addClass('mejs-fullscreen'); + + // store sizing + normalHeight = t.container.height(); + normalWidth = t.container.width(); + + // attempt to do true fullscreen (Safari 5.1 and Firefox Nightly only for now) + if (t.media.pluginType === 'native') { + if (mejs.MediaFeatures.hasTrueNativeFullScreen) { + + mejs.MediaFeatures.requestFullScreen(t.container[0]); + //return; + + if (t.isInIframe) { + // sometimes exiting from fullscreen doesn't work + // notably in Chrome <iframe>. Fixed in version 17 + setTimeout(function checkFullscreen() { + + if (t.isNativeFullScreen) { + var zoomMultiplier = window["devicePixelRatio"] || 1; + // Use a percent error margin since devicePixelRatio is a float and not exact. + var percentErrorMargin = 0.002; // 0.2% + var windowWidth = zoomMultiplier * $(window).width(); + var screenWidth = screen.width; + var absDiff = Math.abs(screenWidth - windowWidth); + var marginError = screenWidth * percentErrorMargin; + + // check if the video is suddenly not really fullscreen + if (absDiff > marginError) { + // manually exit + t.exitFullScreen(); + } else { + // test again + setTimeout(checkFullscreen, 500); + } + } + + + }, 500); + } + + } else if (mejs.MediaFeatures.hasSemiNativeFullScreen) { + t.media.webkitEnterFullscreen(); + return; + } + } + + // check for iframe launch + if (t.isInIframe) { + var url = t.options.newWindowCallback(this); + + + if (url !== '') { + + // launch immediately + if (!mejs.MediaFeatures.hasTrueNativeFullScreen) { + t.pause(); + window.open(url, t.id, 'top=0,left=0,width=' + screen.availWidth + ',height=' + screen.availHeight + ',resizable=yes,scrollbars=no,status=no,toolbar=no'); + return; + } else { + setTimeout(function() { + if (!t.isNativeFullScreen) { + t.pause(); + window.open(url, t.id, 'top=0,left=0,width=' + screen.availWidth + ',height=' + screen.availHeight + ',resizable=yes,scrollbars=no,status=no,toolbar=no'); + } + }, 250); + } + } + + } + + // full window code + + + + // make full size + t.container + .addClass('mejs-container-fullscreen') + .width('100%') + .height('100%'); + //.css({position: 'fixed', left: 0, top: 0, right: 0, bottom: 0, overflow: 'hidden', width: '100%', height: '100%', 'z-index': 1000}); + + // Only needed for safari 5.1 native full screen, can cause display issues elsewhere + // Actually, it seems to be needed for IE8, too + //if (mejs.MediaFeatures.hasTrueNativeFullScreen) { + t.containerSizeTimeout = setTimeout(function() { + t.container.css({width: '100%', height: '100%'}); + t.setControlsSize(); + }, 500); + //} + + if (t.media.pluginType === 'native') { + t.$media + .width('100%') + .height('100%'); + } else { + t.container.find('.mejs-shim') + .width('100%') + .height('100%'); + + //if (!mejs.MediaFeatures.hasTrueNativeFullScreen) { + t.media.setVideoSize($(window).width(),$(window).height()); + //} + } + + t.layers.children('div') + .width('100%') + .height('100%'); + + if (t.fullscreenBtn) { + t.fullscreenBtn + .removeClass('mejs-fullscreen') + .addClass('mejs-unfullscreen'); + } + + t.setControlsSize(); + t.isFullScreen = true; + + t.container.find('.mejs-captions-text').css('font-size', screen.width / t.width * 1.00 * 100 + '%'); + t.container.find('.mejs-captions-position').css('bottom', '45px'); + }, + + exitFullScreen: function() { + + var t = this; + + // Prevent container from attempting to stretch a second time + clearTimeout(t.containerSizeTimeout); + + // firefox can't adjust plugins + if (t.media.pluginType !== 'native' && mejs.MediaFeatures.isFirefox) { + t.media.setFullscreen(false); + //player.isFullScreen = false; + return; + } + + // come outo of native fullscreen + if (mejs.MediaFeatures.hasTrueNativeFullScreen && (mejs.MediaFeatures.isFullScreen() || t.isFullScreen)) { + mejs.MediaFeatures.cancelFullScreen(); + } + + // restore scroll bars to document + $(document.documentElement).removeClass('mejs-fullscreen'); + + t.container + .removeClass('mejs-container-fullscreen') + .width(normalWidth) + .height(normalHeight); + //.css({position: '', left: '', top: '', right: '', bottom: '', overflow: 'inherit', width: normalWidth + 'px', height: normalHeight + 'px', 'z-index': 1}); + + if (t.media.pluginType === 'native') { + t.$media + .width(normalWidth) + .height(normalHeight); + } else { + t.container.find('.mejs-shim') + .width(normalWidth) + .height(normalHeight); + + t.media.setVideoSize(normalWidth, normalHeight); + } + + t.layers.children('div') + .width(normalWidth) + .height(normalHeight); + + t.fullscreenBtn + .removeClass('mejs-unfullscreen') + .addClass('mejs-fullscreen'); + + t.setControlsSize(); + t.isFullScreen = false; + + t.container.find('.mejs-captions-text').css('font-size',''); + t.container.find('.mejs-captions-position').css('bottom', ''); + } + }); + +})(mejs.$); + +(function($) { + + // Speed + $.extend(mejs.MepDefaults, { + + speeds: ['1.50', '1.25', '1.00', '0.75'], + + defaultSpeed: '1.00' + + }); + + $.extend(MediaElementPlayer.prototype, { + + buildspeed: function(player, controls, layers, media) { + var t = this; + + if (t.media.pluginType == 'native') { + var s = '<div class="mejs-button mejs-speed-button"><button type="button">'+t.options.defaultSpeed+'x</button><div class="mejs-speed-selector"><ul>'; + var i, ss; + + if ($.inArray(t.options.defaultSpeed, t.options.speeds) === -1) { + t.options.speeds.push(t.options.defaultSpeed); + } + + t.options.speeds.sort(function(a, b) { + return parseFloat(b) - parseFloat(a); + }); + + for (i = 0; i < t.options.speeds.length; i++) { + s += '<li><input type="radio" name="speed" value="' + t.options.speeds[i] + '" id="' + t.options.speeds[i] + '" '; + if (t.options.speeds[i] == t.options.defaultSpeed) { + s += 'checked=true '; + s += '/><label for="' + t.options.speeds[i] + '" class="mejs-speed-selected">'+ t.options.speeds[i] + 'x</label></li>'; + } else { + s += '/><label for="' + t.options.speeds[i] + '">'+ t.options.speeds[i] + 'x</label></li>'; + } + } + s += '</ul></div></div>'; + + player.speedButton = $(s).appendTo(controls); + + player.playbackspeed = t.options.defaultSpeed; + + player.speedButton + .on('click', 'input[type=radio]', function() { + player.playbackspeed = $(this).attr('value'); + media.playbackRate = parseFloat(player.playbackspeed); + player.speedButton.find('button').text(player.playbackspeed + 'x'); + player.speedButton.find('.mejs-speed-selected').removeClass('mejs-speed-selected'); + player.speedButton.find('input[type=radio]:checked').next().addClass('mejs-speed-selected'); + }); + + ss = player.speedButton.find('.mejs-speed-selector'); + ss.height(this.speedButton.find('.mejs-speed-selector ul').outerHeight(true) + player.speedButton.find('.mejs-speed-translations').outerHeight(true)); + ss.css('top', (-1 * ss.height()) + 'px'); + } + } + }); + +})(mejs.$); + +(function($) { + + // add extra default options + $.extend(mejs.MepDefaults, { + // this will automatically turn on a <track> + startLanguage: '', + + tracksText: mejs.i18n.t('Captions/Subtitles'), + + // option to remove the [cc] button when no <track kind="subtitles"> are present + hideCaptionsButtonWhenEmpty: true, + + // If true and we only have one track, change captions to popup + toggleCaptionsButtonWhenOnlyOne: false, + + // #id or .class + slidesSelector: '' + }); + + $.extend(MediaElementPlayer.prototype, { + + hasChapters: false, + + buildtracks: function(player, controls, layers, media) { + if (player.tracks.length === 0) + return; + + var t = this, + i, + options = ''; + + if (t.domNode.textTracks) { // if browser will do native captions, prefer mejs captions, loop through tracks and hide + for (i = t.domNode.textTracks.length - 1; i >= 0; i--) { + t.domNode.textTracks[i].mode = "hidden"; + } + } + player.chapters = + $('<div class="mejs-chapters mejs-layer"></div>') + .prependTo(layers).hide(); + player.captions = + $('<div class="mejs-captions-layer mejs-layer"><div class="mejs-captions-position mejs-captions-position-hover"><span class="mejs-captions-text"></span></div></div>') + .prependTo(layers).hide(); + player.captionsText = player.captions.find('.mejs-captions-text'); + player.captionsButton = + $('<div class="mejs-button mejs-captions-button">'+ + '<button type="button" aria-controls="' + t.id + '" title="' + t.options.tracksText + '" aria-label="' + t.options.tracksText + '"></button>'+ + '<div class="mejs-captions-selector">'+ + '<ul>'+ + '<li>'+ + '<input type="radio" name="' + player.id + '_captions" id="' + player.id + '_captions_none" value="none" checked="checked" />' + + '<label for="' + player.id + '_captions_none">' + mejs.i18n.t('None') +'</label>'+ + '</li>' + + '</ul>'+ + '</div>'+ + '</div>') + .appendTo(controls); + + + var subtitleCount = 0; + for (i=0; i<player.tracks.length; i++) { + if (player.tracks[i].kind == 'subtitles') { + subtitleCount++; + } + } + + // if only one language then just make the button a toggle + if (t.options.toggleCaptionsButtonWhenOnlyOne && subtitleCount == 1){ + // click + player.captionsButton.on('click',function() { + if (player.selectedTrack === null) { + lang = player.tracks[0].srclang; + } else { + lang = 'none'; + } + player.setTrack(lang); + }); + } else { + // hover or keyboard focus + player.captionsButton.on( 'mouseenter focusin', function() { + $(this).find('.mejs-captions-selector').css('visibility','visible'); + }) + + // handle clicks to the language radio buttons + .on('click','input[type=radio]',function() { + lang = this.value; + player.setTrack(lang); + }); + + player.captionsButton.on( 'mouseleave focusout', function() { + $(this).find(".mejs-captions-selector").css("visibility","hidden"); + }); + + } + + if (!player.options.alwaysShowControls) { + // move with controls + player.container + .bind('controlsshown', function () { + // push captions above controls + player.container.find('.mejs-captions-position').addClass('mejs-captions-position-hover'); + + }) + .bind('controlshidden', function () { + if (!media.paused) { + // move back to normal place + player.container.find('.mejs-captions-position').removeClass('mejs-captions-position-hover'); + } + }); + } else { + player.container.find('.mejs-captions-position').addClass('mejs-captions-position-hover'); + } + + player.trackToLoad = -1; + player.selectedTrack = null; + player.isLoadingTrack = false; + + // add to list + for (i=0; i<player.tracks.length; i++) { + if (player.tracks[i].kind == 'subtitles') { + player.addTrackButton(player.tracks[i].srclang, player.tracks[i].label); + } + } + + // start loading tracks + player.loadNextTrack(); + + media.addEventListener('timeupdate',function(e) { + player.displayCaptions(); + }, false); + + if (player.options.slidesSelector !== '') { + player.slidesContainer = $(player.options.slidesSelector); + + media.addEventListener('timeupdate',function(e) { + player.displaySlides(); + }, false); + + } + + media.addEventListener('loadedmetadata', function(e) { + player.displayChapters(); + }, false); + + player.container.hover( + function () { + // chapters + if (player.hasChapters) { + player.chapters.css('visibility','visible'); + player.chapters.fadeIn(200).height(player.chapters.find('.mejs-chapter').outerHeight()); + } + }, + function () { + if (player.hasChapters && !media.paused) { + player.chapters.fadeOut(200, function() { + $(this).css('visibility','hidden'); + $(this).css('display','block'); + }); + } + }); + + // check for autoplay + if (player.node.getAttribute('autoplay') !== null) { + player.chapters.css('visibility','hidden'); + } + }, + + setTrack: function(lang){ + + var t = this, + i; + + if (lang == 'none') { + t.selectedTrack = null; + t.captionsButton.removeClass('mejs-captions-enabled'); + } else { + for (i=0; i<t.tracks.length; i++) { + if (t.tracks[i].srclang == lang) { + if (t.selectedTrack === null) + t.captionsButton.addClass('mejs-captions-enabled'); + t.selectedTrack = t.tracks[i]; + t.captions.attr('lang', t.selectedTrack.srclang); + t.displayCaptions(); + break; + } + } + } + }, + + loadNextTrack: function() { + var t = this; + + t.trackToLoad++; + if (t.trackToLoad < t.tracks.length) { + t.isLoadingTrack = true; + t.loadTrack(t.trackToLoad); + } else { + // add done? + t.isLoadingTrack = false; + + t.checkForTracks(); + } + }, + + loadTrack: function(index){ + var + t = this, + track = t.tracks[index], + after = function() { + + track.isLoaded = true; + + // create button + //t.addTrackButton(track.srclang); + t.enableTrackButton(track.srclang, track.label); + + t.loadNextTrack(); + + }; + + + $.ajax({ + url: track.src, + dataType: "text", + success: function(d) { + + // parse the loaded file + if (typeof d == "string" && (/<tt\s+xml/ig).exec(d)) { + track.entries = mejs.TrackFormatParser.dfxp.parse(d); + } else { + track.entries = mejs.TrackFormatParser.webvtt.parse(d); + } + + after(); + + if (track.kind == 'chapters') { + t.media.addEventListener('play', function(e) { + if (t.media.duration > 0) { + t.displayChapters(track); + } + }, false); + } + + if (track.kind == 'slides') { + t.setupSlides(track); + } + }, + error: function() { + t.loadNextTrack(); + } + }); + }, + + enableTrackButton: function(lang, label) { + var t = this; + + if (label === '') { + label = mejs.language.codes[lang] || lang; + } + + t.captionsButton + .find('input[value=' + lang + ']') + .prop('disabled',false) + .siblings('label') + .html( label ); + + // auto select + if (t.options.startLanguage == lang) { + $('#' + t.id + '_captions_' + lang).prop('checked', true).trigger('click'); + } + + t.adjustLanguageBox(); + }, + + addTrackButton: function(lang, label) { + var t = this; + if (label === '') { + label = mejs.language.codes[lang] || lang; + } + + t.captionsButton.find('ul').append( + $('<li>'+ + '<input type="radio" name="' + t.id + '_captions" id="' + t.id + '_captions_' + lang + '" value="' + lang + '" disabled="disabled" />' + + '<label for="' + t.id + '_captions_' + lang + '">' + label + ' (loading)' + '</label>'+ + '</li>') + ); + + t.adjustLanguageBox(); + + // remove this from the dropdownlist (if it exists) + t.container.find('.mejs-captions-translations option[value=' + lang + ']').remove(); + }, + + adjustLanguageBox:function() { + var t = this; + // adjust the size of the outer box + t.captionsButton.find('.mejs-captions-selector').height( + t.captionsButton.find('.mejs-captions-selector ul').outerHeight(true) + + t.captionsButton.find('.mejs-captions-translations').outerHeight(true) + ); + }, + + checkForTracks: function() { + var + t = this, + hasSubtitles = false; + + // check if any subtitles + if (t.options.hideCaptionsButtonWhenEmpty) { + for (i=0; i<t.tracks.length; i++) { + if (t.tracks[i].kind == 'subtitles') { + hasSubtitles = true; + break; + } + } + + if (!hasSubtitles) { + t.captionsButton.hide(); + t.setControlsSize(); + } + } + }, + + displayCaptions: function() { + + if (typeof this.tracks == 'undefined') + return; + + var + t = this, + i, + track = t.selectedTrack; + + if (track !== null && track.isLoaded) { + for (i=0; i<track.entries.times.length; i++) { + if (t.media.currentTime >= track.entries.times[i].start && t.media.currentTime <= track.entries.times[i].stop) { + // Set the line before the timecode as a class so the cue can be targeted if needed + t.captionsText.html(track.entries.text[i]).attr('class', 'mejs-captions-text ' + (track.entries.times[i].identifier || '')); + t.captions.show().height(0); + return; // exit out if one is visible; + } + } + t.captions.hide(); + } else { + t.captions.hide(); + } + }, + + setupSlides: function(track) { + var t = this; + + t.slides = track; + t.slides.entries.imgs = [t.slides.entries.text.length]; + t.showSlide(0); + + }, + + showSlide: function(index) { + if (typeof this.tracks == 'undefined' || typeof this.slidesContainer == 'undefined') { + return; + } + + var t = this, + url = t.slides.entries.text[index], + img = t.slides.entries.imgs[index]; + + if (typeof img == 'undefined' || typeof img.fadeIn == 'undefined') { + + t.slides.entries.imgs[index] = img = $('<img src="' + url + '">') + .on('load', function() { + img.appendTo(t.slidesContainer) + .hide() + .fadeIn() + .siblings(':visible') + .fadeOut(); + + }); + + } else { + + if (!img.is(':visible') && !img.is(':animated')) { + + // + + img.fadeIn() + .siblings(':visible') + .fadeOut(); + } + } + + }, + + displaySlides: function() { + + if (typeof this.slides == 'undefined') + return; + + var + t = this, + slides = t.slides, + i; + + for (i=0; i<slides.entries.times.length; i++) { + if (t.media.currentTime >= slides.entries.times[i].start && t.media.currentTime <= slides.entries.times[i].stop){ + + t.showSlide(i); + + return; // exit out if one is visible; + } + } + }, + + displayChapters: function() { + var + t = this, + i; + + for (i=0; i<t.tracks.length; i++) { + if (t.tracks[i].kind == 'chapters' && t.tracks[i].isLoaded) { + t.drawChapters(t.tracks[i]); + t.hasChapters = true; + break; + } + } + }, + + drawChapters: function(chapters) { + var + t = this, + i, + dur, + //width, + //left, + percent = 0, + usedPercent = 0; + + t.chapters.empty(); + + for (i=0; i<chapters.entries.times.length; i++) { + dur = chapters.entries.times[i].stop - chapters.entries.times[i].start; + percent = Math.floor(dur / t.media.duration * 100); + if (percent + usedPercent > 100 || // too large + i == chapters.entries.times.length-1 && percent + usedPercent < 100) // not going to fill it in + { + percent = 100 - usedPercent; + } + //width = Math.floor(t.width * dur / t.media.duration); + //left = Math.floor(t.width * chapters.entries.times[i].start / t.media.duration); + //if (left + width > t.width) { + // width = t.width - left; + //} + + t.chapters.append( $( + '<div class="mejs-chapter" rel="' + chapters.entries.times[i].start + '" style="left: ' + usedPercent.toString() + '%;width: ' + percent.toString() + '%;">' + + '<div class="mejs-chapter-block' + ((i==chapters.entries.times.length-1) ? ' mejs-chapter-block-last' : '') + '">' + + '<span class="ch-title">' + chapters.entries.text[i] + '</span>' + + '<span class="ch-time">' + mejs.Utility.secondsToTimeCode(chapters.entries.times[i].start) + '–' + mejs.Utility.secondsToTimeCode(chapters.entries.times[i].stop) + '</span>' + + '</div>' + + '</div>')); + usedPercent += percent; + } + + t.chapters.find('div.mejs-chapter').click(function() { + t.media.setCurrentTime( parseFloat( $(this).attr('rel') ) ); + if (t.media.paused) { + t.media.play(); + } + }); + + t.chapters.show(); + } + }); + + + + mejs.language = { + codes: { + af:'Afrikaans', + sq:'Albanian', + ar:'Arabic', + be:'Belarusian', + bg:'Bulgarian', + ca:'Catalan', + zh:'Chinese', + 'zh-cn':'Chinese Simplified', + 'zh-tw':'Chinese Traditional', + hr:'Croatian', + cs:'Czech', + da:'Danish', + nl:'Dutch', + en:'English', + et:'Estonian', + fl:'Filipino', + fi:'Finnish', + fr:'French', + gl:'Galician', + de:'German', + el:'Greek', + ht:'Haitian Creole', + iw:'Hebrew', + hi:'Hindi', + hu:'Hungarian', + is:'Icelandic', + id:'Indonesian', + ga:'Irish', + it:'Italian', + ja:'Japanese', + ko:'Korean', + lv:'Latvian', + lt:'Lithuanian', + mk:'Macedonian', + ms:'Malay', + mt:'Maltese', + no:'Norwegian', + fa:'Persian', + pl:'Polish', + pt:'Portuguese', + // 'pt-pt':'Portuguese (Portugal)', + ro:'Romanian', + ru:'Russian', + sr:'Serbian', + sk:'Slovak', + sl:'Slovenian', + es:'Spanish', + sw:'Swahili', + sv:'Swedish', + tl:'Tagalog', + th:'Thai', + tr:'Turkish', + uk:'Ukrainian', + vi:'Vietnamese', + cy:'Welsh', + yi:'Yiddish' + } + }; + + /* + Parses WebVTT format which should be formatted as + ================================ + WEBVTT + + 1 + 00:00:01,1 --> 00:00:05,000 + A line of text + + 2 + 00:01:15,1 --> 00:02:05,000 + A second line of text + + =============================== + + Adapted from: http://www.delphiki.com/html5/playr + */ + mejs.TrackFormatParser = { + webvtt: { + pattern_timecode: /^((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{1,3})?) --\> ((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{3})?)(.*)$/, + + parse: function(trackText) { + var + i = 0, + lines = mejs.TrackFormatParser.split2(trackText, /\r?\n/), + entries = {text:[], times:[]}, + timecode, + text, + identifier; + for(; i<lines.length; i++) { + timecode = this.pattern_timecode.exec(lines[i]); + + if (timecode && i<lines.length) { + if ((i - 1) >= 0 && lines[i - 1] !== '') { + identifier = lines[i - 1]; + } + i++; + // grab all the (possibly multi-line) text that follows + text = lines[i]; + i++; + while(lines[i] !== '' && i<lines.length){ + text = text + '\n' + lines[i]; + i++; + } + text = $.trim(text).replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, "<a href='$1' target='_blank'>$1</a>"); + // Text is in a different array so I can use .join + entries.text.push(text); + entries.times.push( + { + identifier: identifier, + start: (mejs.Utility.convertSMPTEtoSeconds(timecode[1]) === 0) ? 0.200 : mejs.Utility.convertSMPTEtoSeconds(timecode[1]), + stop: mejs.Utility.convertSMPTEtoSeconds(timecode[3]), + settings: timecode[5] + }); + } + identifier = ''; + } + return entries; + } + }, + // Thanks to Justin Capella: https://github.com/johndyer/mediaelement/pull/420 + dfxp: { + parse: function(trackText) { + trackText = $(trackText).filter("tt"); + var + i = 0, + container = trackText.children("div").eq(0), + lines = container.find("p"), + styleNode = trackText.find("#" + container.attr("style")), + styles, + begin, + end, + text, + entries = {text:[], times:[]}; + + + if (styleNode.length) { + var attributes = styleNode.removeAttr("id").get(0).attributes; + if (attributes.length) { + styles = {}; + for (i = 0; i < attributes.length; i++) { + styles[attributes[i].name.split(":")[1]] = attributes[i].value; + } + } + } + + for(i = 0; i<lines.length; i++) { + var style; + var _temp_times = { + start: null, + stop: null, + style: null + }; + if (lines.eq(i).attr("begin")) _temp_times.start = mejs.Utility.convertSMPTEtoSeconds(lines.eq(i).attr("begin")); + if (!_temp_times.start && lines.eq(i-1).attr("end")) _temp_times.start = mejs.Utility.convertSMPTEtoSeconds(lines.eq(i-1).attr("end")); + if (lines.eq(i).attr("end")) _temp_times.stop = mejs.Utility.convertSMPTEtoSeconds(lines.eq(i).attr("end")); + if (!_temp_times.stop && lines.eq(i+1).attr("begin")) _temp_times.stop = mejs.Utility.convertSMPTEtoSeconds(lines.eq(i+1).attr("begin")); + if (styles) { + style = ""; + for (var _style in styles) { + style += _style + ":" + styles[_style] + ";"; + } + } + if (style) _temp_times.style = style; + if (_temp_times.start === 0) _temp_times.start = 0.200; + entries.times.push(_temp_times); + text = $.trim(lines.eq(i).html()).replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, "<a href='$1' target='_blank'>$1</a>"); + entries.text.push(text); + if (entries.times.start === 0) entries.times.start = 2; + } + return entries; + } + }, + split2: function (text, regex) { + // normal version for compliant browsers + // see below for IE fix + return text.split(regex); + } + }; + + // test for browsers with bad String.split method. + if ('x\n\ny'.split(/\n/gi).length != 3) { + // add super slow IE8 and below version + mejs.TrackFormatParser.split2 = function(text, regex) { + var + parts = [], + chunk = '', + i; + + for (i=0; i<text.length; i++) { + chunk += text.substring(i,i+1); + if (regex.test(chunk)) { + parts.push(chunk.replace(regex, '')); + chunk = ''; + } + } + parts.push(chunk); + return parts; + }; + } + +})(mejs.$); + +/* +* ContextMenu Plugin +* +* +*/ + +(function($) { + +$.extend(mejs.MepDefaults, + { 'contextMenuItems': [ + // demo of a fullscreen option + { + render: function(player) { + + // check for fullscreen plugin + if (typeof player.enterFullScreen == 'undefined') + return null; + + if (player.isFullScreen) { + return mejs.i18n.t('Turn off Fullscreen'); + } else { + return mejs.i18n.t('Go Fullscreen'); + } + }, + click: function(player) { + if (player.isFullScreen) { + player.exitFullScreen(); + } else { + player.enterFullScreen(); + } + } + } + , + // demo of a mute/unmute button + { + render: function(player) { + if (player.media.muted) { + return mejs.i18n.t('Unmute'); + } else { + return mejs.i18n.t('Mute'); + } + }, + click: function(player) { + if (player.media.muted) { + player.setMuted(false); + } else { + player.setMuted(true); + } + } + }, + // separator + { + isSeparator: true + } + , + // demo of simple download video + { + render: function(player) { + return mejs.i18n.t('Download Video'); + }, + click: function(player) { + window.location.href = player.media.currentSrc; + } + } + ]} +); + + + $.extend(MediaElementPlayer.prototype, { + buildcontextmenu: function(player, controls, layers, media) { + + // create context menu + player.contextMenu = $('<div class="mejs-contextmenu"></div>') + .appendTo($('body')) + .hide(); + + // create events for showing context menu + player.container.bind('contextmenu', function(e) { + if (player.isContextMenuEnabled) { + e.preventDefault(); + player.renderContextMenu(e.clientX-1, e.clientY-1); + return false; + } + }); + player.container.bind('click', function() { + player.contextMenu.hide(); + }); + player.contextMenu.bind('mouseleave', function() { + + // + player.startContextMenuTimer(); + + }); + }, + + cleancontextmenu: function(player) { + player.contextMenu.remove(); + }, + + isContextMenuEnabled: true, + enableContextMenu: function() { + this.isContextMenuEnabled = true; + }, + disableContextMenu: function() { + this.isContextMenuEnabled = false; + }, + + contextMenuTimeout: null, + startContextMenuTimer: function() { + // + + var t = this; + + t.killContextMenuTimer(); + + t.contextMenuTimer = setTimeout(function() { + t.hideContextMenu(); + t.killContextMenuTimer(); + }, 750); + }, + killContextMenuTimer: function() { + var timer = this.contextMenuTimer; + + // + + if (timer != null) { + clearTimeout(timer); + delete timer; + timer = null; + } + }, + + hideContextMenu: function() { + this.contextMenu.hide(); + }, + + renderContextMenu: function(x,y) { + + // alway re-render the items so that things like "turn fullscreen on" and "turn fullscreen off" are always written correctly + var t = this, + html = '', + items = t.options.contextMenuItems; + + for (var i=0, il=items.length; i<il; i++) { + + if (items[i].isSeparator) { + html += '<div class="mejs-contextmenu-separator"></div>'; + } else { + + var rendered = items[i].render(t); + + // render can return null if the item doesn't need to be used at the moment + if (rendered != null) { + html += '<div class="mejs-contextmenu-item" data-itemindex="' + i + '" id="element-' + (Math.random()*1000000) + '">' + rendered + '</div>'; + } + } + } + + // position and show the context menu + t.contextMenu + .empty() + .append($(html)) + .css({top:y, left:x}) + .show(); + + // bind events + t.contextMenu.find('.mejs-contextmenu-item').each(function() { + + // which one is this? + var $dom = $(this), + itemIndex = parseInt( $dom.data('itemindex'), 10 ), + item = t.options.contextMenuItems[itemIndex]; + + // bind extra functionality? + if (typeof item.show != 'undefined') + item.show( $dom , t); + + // bind click action + $dom.click(function() { + // perform click action + if (typeof item.click != 'undefined') + item.click(t); + + // close + t.contextMenu.hide(); + }); + }); + + // stop the controls from hiding + setTimeout(function() { + t.killControlsTimer('rev3'); + }, 100); + + } + }); + +})(mejs.$); +/** + * Postroll plugin + */ +(function($) { + + $.extend(mejs.MepDefaults, { + postrollCloseText: mejs.i18n.t('Close') + }); + + // Postroll + $.extend(MediaElementPlayer.prototype, { + buildpostroll: function(player, controls, layers, media) { + var + t = this, + postrollLink = t.container.find('link[rel="postroll"]').attr('href'); + + if (typeof postrollLink !== 'undefined') { + player.postroll = + $('<div class="mejs-postroll-layer mejs-layer"><a class="mejs-postroll-close" onclick="$(this).parent().hide();return false;">' + t.options.postrollCloseText + '</a><div class="mejs-postroll-layer-content"></div></div>').prependTo(layers).hide(); + + t.media.addEventListener('ended', function (e) { + $.ajax({ + dataType: 'html', + url: postrollLink, + success: function (data, textStatus) { + layers.find('.mejs-postroll-layer-content').html(data); + } + }); + player.postroll.show(); + }, false); + } + } + }); + +})(mejs.$); diff --git a/lib/mejs/mediaelementplayer.min.css b/lib/mejs/mediaelementplayer.min.css new file mode 100755 index 00000000..ca859f38 --- /dev/null +++ b/lib/mejs/mediaelementplayer.min.css @@ -0,0 +1 @@ +.mejs-container{position:relative;background:#000;font-family:Helvetica,Arial;text-align:left;vertical-align:top;text-indent:0;}.me-plugin{position:absolute;height:auto;width:auto;}.mejs-embed,.mejs-embed body{width:100%;height:100%;margin:0;padding:0;background:#000;overflow:hidden;}.mejs-fullscreen{overflow:hidden!important;}.mejs-container-fullscreen{position:fixed;left:0;top:0;right:0;bottom:0;overflow:hidden;z-index:1000;}.mejs-container-fullscreen .mejs-mediaelement,.mejs-container-fullscreen video{width:100%;height:100%;}.mejs-clear{clear:both;}.mejs-background{position:absolute;top:0;left:0;}.mejs-mediaelement{position:absolute;top:0;left:0;width:100%;height:100%;}.mejs-poster{position:absolute;top:0;left:0;background-size:contain;background-position:50% 50%;background-repeat:no-repeat;}:root .mejs-poster img{display:none;}.mejs-poster img{border:0;padding:0;border:0;}.mejs-overlay{position:absolute;top:0;left:0;}.mejs-overlay-play{cursor:pointer;}.mejs-overlay-button{position:absolute;top:50%;left:50%;width:100px;height:100px;margin:-50px 0 0 -50px;background:url(bigplay.svg) no-repeat;}.no-svg .mejs-overlay-button{background-image:url(bigplay.png);}.mejs-overlay:hover .mejs-overlay-button{background-position:0 -100px;}.mejs-overlay-loading{position:absolute;top:50%;left:50%;width:80px;height:80px;margin:-40px 0 0 -40px;background:#333;background:url(background.png);background:rgba(0,0,0,0.9);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(50,50,50,0.9)),to(rgba(0,0,0,0.9)));background:-webkit-linear-gradient(top,rgba(50,50,50,0.9),rgba(0,0,0,0.9));background:-moz-linear-gradient(top,rgba(50,50,50,0.9),rgba(0,0,0,0.9));background:-o-linear-gradient(top,rgba(50,50,50,0.9),rgba(0,0,0,0.9));background:-ms-linear-gradient(top,rgba(50,50,50,0.9),rgba(0,0,0,0.9));background:linear-gradient(rgba(50,50,50,0.9),rgba(0,0,0,0.9));}.mejs-overlay-loading span{display:block;width:80px;height:80px;background:transparent url(loading.gif) 50% 50% no-repeat;}.mejs-container .mejs-controls{position:absolute;list-style-type:none;margin:0;padding:0;bottom:0;left:0;background:url(background.png);background:rgba(0,0,0,0.7);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(50,50,50,0.7)),to(rgba(0,0,0,0.7)));background:-webkit-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-moz-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-o-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-ms-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:linear-gradient(rgba(50,50,50,0.7),rgba(0,0,0,0.7));height:30px;width:100%;}.mejs-container .mejs-controls div{list-style-type:none;background-image:none;display:block;float:left;margin:0;padding:0;width:26px;height:26px;font-size:11px;line-height:11px;font-family:Helvetica,Arial;border:0;}.mejs-controls .mejs-button button{cursor:pointer;display:block;font-size:0;line-height:0;text-decoration:none;margin:7px 5px;padding:0;position:absolute;height:16px;width:16px;border:0;background:transparent url(controls.svg) no-repeat;}.no-svg .mejs-controls .mejs-button button{background-image:url(controls.png);}.mejs-controls .mejs-button button:focus{outline:dotted 1px #999;}.mejs-container .mejs-controls .mejs-time{color:#fff;display:block;height:17px;width:auto;padding:8px 3px 0 3px;overflow:hidden;text-align:center;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;}.mejs-container .mejs-controls .mejs-time span{color:#fff;font-size:11px;line-height:12px;display:block;float:left;margin:1px 2px 0 0;width:auto;}.mejs-controls .mejs-play button{background-position:0 0;}.mejs-controls .mejs-pause button{background-position:0 -16px;}.mejs-controls .mejs-stop button{background-position:-112px 0;}.mejs-controls div.mejs-time-rail{direction:ltr;width:200px;padding-top:5px;}.mejs-controls .mejs-time-rail span{display:block;position:absolute;width:180px;height:10px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;cursor:pointer;}.mejs-controls .mejs-time-rail .mejs-time-total{margin:5px;background:#333;background:rgba(50,50,50,0.8);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(30,30,30,0.8)),to(rgba(60,60,60,0.8)));background:-webkit-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-moz-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-o-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-ms-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:linear-gradient(rgba(30,30,30,0.8),rgba(60,60,60,0.8));}.mejs-controls .mejs-time-rail .mejs-time-buffering{width:100%;background-image:-o-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:15px 15px;-moz-background-size:15px 15px;-o-background-size:15px 15px;background-size:15px 15px;-webkit-animation:buffering-stripes 2s linear infinite;-moz-animation:buffering-stripes 2s linear infinite;-ms-animation:buffering-stripes 2s linear infinite;-o-animation:buffering-stripes 2s linear infinite;animation:buffering-stripes 2s linear infinite;}@-webkit-keyframes buffering-stripes{from{background-position:0 0;}to{background-position:30px 0;}}@-moz-keyframes buffering-stripes{from{background-position:0 0;}to{background-position:30px 0;}}@-ms-keyframes buffering-stripes{from{background-position:0 0;}to{background-position:30px 0;}}@-o-keyframes buffering-stripes{from{background-position:0 0;}to{background-position:30px 0;}}@keyframes buffering-stripes{from{background-position:0 0;}to{background-position:30px 0;}}.mejs-controls .mejs-time-rail .mejs-time-loaded{background:#3caac8;background:rgba(60,170,200,0.8);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(44,124,145,0.8)),to(rgba(78,183,212,0.8)));background:-webkit-linear-gradient(top,rgba(44,124,145,0.8),rgba(78,183,212,0.8));background:-moz-linear-gradient(top,rgba(44,124,145,0.8),rgba(78,183,212,0.8));background:-o-linear-gradient(top,rgba(44,124,145,0.8),rgba(78,183,212,0.8));background:-ms-linear-gradient(top,rgba(44,124,145,0.8),rgba(78,183,212,0.8));background:linear-gradient(rgba(44,124,145,0.8),rgba(78,183,212,0.8));width:0;}.mejs-controls .mejs-time-rail .mejs-time-current{background:#fff;background:rgba(255,255,255,0.8);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(255,255,255,0.9)),to(rgba(200,200,200,0.8)));background:-webkit-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-moz-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-o-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-ms-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:linear-gradient(rgba(255,255,255,0.9),rgba(200,200,200,0.8));width:0;}.mejs-controls .mejs-time-rail .mejs-time-handle{display:none;position:absolute;margin:0;width:10px;background:#fff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;cursor:pointer;border:solid 2px #333;top:-2px;text-align:center;}.mejs-controls .mejs-time-rail .mejs-time-float{position:absolute;display:none;background:#eee;width:36px;height:17px;border:solid 1px #333;top:-26px;margin-left:-18px;text-align:center;color:#111;}.mejs-controls .mejs-time-rail .mejs-time-float-current{margin:2px;width:30px;display:block;text-align:center;left:0;}.mejs-controls .mejs-time-rail .mejs-time-float-corner{position:absolute;display:block;width:0;height:0;line-height:0;border:solid 5px #eee;border-color:#eee transparent transparent transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;top:15px;left:13px;}.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float{width:48px;}.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float-current{width:44px;}.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float-corner{left:18px;}.mejs-controls .mejs-fullscreen-button button{background-position:-32px 0;}.mejs-controls .mejs-unfullscreen button{background-position:-32px -16px;}.mejs-controls .mejs-mute button{background-position:-16px -16px;}.mejs-controls .mejs-unmute button{background-position:-16px 0;}.mejs-controls .mejs-volume-button{position:relative;}.mejs-controls .mejs-volume-button .mejs-volume-slider{display:none;height:115px;width:25px;background:url(background.png);background:rgba(50,50,50,0.7);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;top:-115px;left:0;z-index:1;position:absolute;margin:0;}.mejs-controls .mejs-volume-button:hover{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-total{position:absolute;left:11px;top:8px;width:2px;height:100px;background:#ddd;background:rgba(255,255,255,0.5);margin:0;}.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-current{position:absolute;left:11px;top:8px;width:2px;height:100px;background:#ddd;background:rgba(255,255,255,0.9);margin:0;}.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-handle{position:absolute;left:4px;top:-3px;width:16px;height:6px;background:#ddd;background:rgba(255,255,255,0.9);cursor:N-resize;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;margin:0;}.mejs-controls div.mejs-horizontal-volume-slider{height:26px;width:60px;position:relative;}.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total{position:absolute;left:0;top:11px;width:50px;height:8px;margin:0;padding:0;font-size:1px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background:#333;background:rgba(50,50,50,0.8);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(30,30,30,0.8)),to(rgba(60,60,60,0.8)));background:-webkit-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-moz-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-o-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-ms-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:linear-gradient(rgba(30,30,30,0.8),rgba(60,60,60,0.8));}.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current{position:absolute;left:0;top:11px;width:50px;height:8px;margin:0;padding:0;font-size:1px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background:#fff;background:rgba(255,255,255,0.8);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(255,255,255,0.9)),to(rgba(200,200,200,0.8)));background:-webkit-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-moz-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-o-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-ms-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:linear-gradient(rgba(255,255,255,0.9),rgba(200,200,200,0.8));}.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-handle{display:none;}.mejs-controls .mejs-captions-button{position:relative;}.mejs-controls .mejs-captions-button button{background-position:-48px 0;}.mejs-controls .mejs-captions-button .mejs-captions-selector{visibility:hidden;position:absolute;bottom:26px;right:-51px;width:85px;height:100px;background:url(background.png);background:rgba(50,50,50,0.7);border:solid 1px transparent;padding:10px 10px 0 10px;overflow:hidden;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}.mejs-controls .mejs-captions-button .mejs-captions-selector ul{margin:0;padding:0;display:block;list-style-type:none!important;overflow:hidden;}.mejs-controls .mejs-captions-button .mejs-captions-selector ul li{margin:0 0 6px 0;padding:0;list-style-type:none!important;display:block;color:#fff;overflow:hidden;}.mejs-controls .mejs-captions-button .mejs-captions-selector ul li input{clear:both;float:left;margin:3px 3px 0 5px;}.mejs-controls .mejs-captions-button .mejs-captions-selector ul li label{width:55px;float:left;padding:4px 0 0 0;line-height:15px;font-family:helvetica,arial;font-size:10px;}.mejs-controls .mejs-captions-button .mejs-captions-translations{font-size:10px;margin:0 0 5px 0;}.mejs-chapters{position:absolute;top:0;left:0;-xborder-right:solid 1px #fff;width:10000px;z-index:1;}.mejs-chapters .mejs-chapter{position:absolute;float:left;background:#222;background:rgba(0,0,0,0.7);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(50,50,50,0.7)),to(rgba(0,0,0,0.7)));background:-webkit-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-moz-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-o-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-ms-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:linear-gradient(rgba(50,50,50,0.7),rgba(0,0,0,0.7));filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,startColorstr=#323232,endColorstr=#000000);overflow:hidden;border:0;}.mejs-chapters .mejs-chapter .mejs-chapter-block{font-size:11px;color:#fff;padding:5px;display:block;border-right:solid 1px #333;border-bottom:solid 1px #333;cursor:pointer;}.mejs-chapters .mejs-chapter .mejs-chapter-block-last{border-right:none;}.mejs-chapters .mejs-chapter .mejs-chapter-block:hover{background:#666;background:rgba(102,102,102,0.7);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(102,102,102,0.7)),to(rgba(50,50,50,0.6)));background:-webkit-linear-gradient(top,rgba(102,102,102,0.7),rgba(50,50,50,0.6));background:-moz-linear-gradient(top,rgba(102,102,102,0.7),rgba(50,50,50,0.6));background:-o-linear-gradient(top,rgba(102,102,102,0.7),rgba(50,50,50,0.6));background:-ms-linear-gradient(top,rgba(102,102,102,0.7),rgba(50,50,50,0.6));background:linear-gradient(rgba(102,102,102,0.7),rgba(50,50,50,0.6));filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,startColorstr=#666666,endColorstr=#323232);}.mejs-chapters .mejs-chapter .mejs-chapter-block .ch-title{font-size:12px;font-weight:bold;display:block;white-space:nowrap;text-overflow:ellipsis;margin:0 0 3px 0;line-height:12px;}.mejs-chapters .mejs-chapter .mejs-chapter-block .ch-timespan{font-size:12px;line-height:12px;margin:3px 0 4px 0;display:block;white-space:nowrap;text-overflow:ellipsis;}.mejs-captions-layer{position:absolute;bottom:0;left:0;text-align:center;line-height:20px;font-size:16px;color:#fff;}.mejs-captions-layer a{color:#fff;text-decoration:underline;}.mejs-captions-layer[lang=ar]{font-size:20px;font-weight:normal;}.mejs-captions-position{position:absolute;width:100%;bottom:15px;left:0;}.mejs-captions-position-hover{bottom:35px;}.mejs-captions-text{padding:3px 5px;background:url(background.png);background:rgba(20,20,20,0.5);white-space:pre-wrap;}.me-cannotplay a{color:#fff;font-weight:bold;}.me-cannotplay span{padding:15px;display:block;}.mejs-controls .mejs-loop-off button{background-position:-64px -16px;}.mejs-controls .mejs-loop-on button{background-position:-64px 0;}.mejs-controls .mejs-backlight-off button{background-position:-80px -16px;}.mejs-controls .mejs-backlight-on button{background-position:-80px 0;}.mejs-controls .mejs-picturecontrols-button{background-position:-96px 0;}.mejs-contextmenu{position:absolute;width:150px;padding:10px;border-radius:4px;top:0;left:0;background:#fff;border:solid 1px #999;z-index:1001;}.mejs-contextmenu .mejs-contextmenu-separator{height:1px;font-size:0;margin:5px 6px;background:#333;}.mejs-contextmenu .mejs-contextmenu-item{font-family:Helvetica,Arial;font-size:12px;padding:4px 6px;cursor:pointer;color:#333;}.mejs-contextmenu .mejs-contextmenu-item:hover{background:#2C7C91;color:#fff;}.mejs-controls .mejs-sourcechooser-button{position:relative;}.mejs-controls .mejs-sourcechooser-button button{background-position:-128px 0;}.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector{visibility:hidden;position:absolute;bottom:26px;right:-10px;width:130px;height:100px;background:url(background.png);background:rgba(50,50,50,0.7);border:solid 1px transparent;padding:10px;overflow:hidden;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul{margin:0;padding:0;display:block;list-style-type:none!important;overflow:hidden;}.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li{margin:0 0 6px 0;padding:0;list-style-type:none!important;display:block;color:#fff;overflow:hidden;}.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li input{clear:both;float:left;margin:3px 3px 0 5px;}.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li label{width:100px;float:left;padding:4px 0 0 0;line-height:15px;font-family:helvetica,arial;font-size:10px;}.mejs-postroll-layer{position:absolute;bottom:0;left:0;width:100%;height:100%;background:url(background.png);background:rgba(50,50,50,0.7);z-index:1000;overflow:hidden;}.mejs-postroll-layer-content{width:100%;height:100%;}.mejs-postroll-close{position:absolute;right:0;top:0;background:url(background.png);background:rgba(50,50,50,0.7);color:#fff;padding:4px;z-index:100;cursor:pointer;}div.mejs-speed-button{width:46px!important;position:relative;}.mejs-controls .mejs-button.mejs-speed-button button{background:transparent;width:36px;font-size:11px;line-height:normal;color:#fff;}.mejs-controls .mejs-speed-button .mejs-speed-selector{visibility:hidden;position:absolute;top:-100px;left:-10px;width:60px;height:100px;background:url(background.png);background:rgba(50,50,50,0.7);border:solid 1px transparent;padding:0;overflow:hidden;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}.mejs-controls .mejs-speed-button:hover>.mejs-speed-selector{visibility:visible;}.mejs-controls .mejs-speed-button .mejs-speed-selector ul li label.mejs-speed-selected{color:rgba(33,248,248,1);}.mejs-controls .mejs-speed-button .mejs-speed-selector ul{margin:0;padding:0;display:block;list-style-type:none!important;overflow:hidden;}.mejs-controls .mejs-speed-button .mejs-speed-selector ul li{margin:0 0 6px 0;padding:0 10px;list-style-type:none!important;display:block;color:#fff;overflow:hidden;}.mejs-controls .mejs-speed-button .mejs-speed-selector ul li input{clear:both;float:left;margin:3px 3px 0 5px;display:none;}.mejs-controls .mejs-speed-button .mejs-speed-selector ul li label{width:60px;float:left;padding:4px 0 0 0;line-height:15px;font-family:helvetica,arial;font-size:11.5px;color:white;margin-left:5px;cursor:pointer;}.mejs-controls .mejs-speed-button .mejs-speed-selector ul li:hover{background-color:#c8c8c8!important;background-color:rgba(255,255,255,.4)!important;} \ No newline at end of file diff --git a/lib/mejs/mediaelementplayer.min.js b/lib/mejs/mediaelementplayer.min.js new file mode 100755 index 00000000..e96ae83b --- /dev/null +++ b/lib/mejs/mediaelementplayer.min.js @@ -0,0 +1,109 @@ +/*! + * MediaElementPlayer + * http://mediaelementjs.com/ + * + * Creates a controller bar for HTML5 <video> add <audio> tags + * using jQuery and MediaElement.js (HTML5 Flash/Silverlight wrapper) + * + * Copyright 2010-2013, John Dyer (http://j.hn/) + * License: MIT + * + */if(typeof jQuery!="undefined")mejs.$=jQuery;else if(typeof ender!="undefined")mejs.$=ender; +(function(f){mejs.MepDefaults={poster:"",showPosterWhenEnded:false,defaultVideoWidth:480,defaultVideoHeight:270,videoWidth:-1,videoHeight:-1,defaultAudioWidth:400,defaultAudioHeight:30,defaultSeekBackwardInterval:function(a){return a.duration*0.05},defaultSeekForwardInterval:function(a){return a.duration*0.05},setDimensions:true,audioWidth:-1,audioHeight:-1,startVolume:0.8,loop:false,autoRewind:true,enableAutosize:true,alwaysShowHours:false,showTimecodeFrameCount:false,framesPerSecond:25,autosizeProgress:true, +alwaysShowControls:false,hideVideoControlsOnLoad:false,clickToPlayPause:true,iPadUseNativeControls:false,iPhoneUseNativeControls:false,AndroidUseNativeControls:false,features:["playpause","current","progress","duration","tracks","volume","fullscreen"],isVideo:true,enableKeyboard:true,pauseOtherPlayers:true,keyActions:[{keys:[32,179],action:function(a,b){b.paused||b.ended?a.play():a.pause()}},{keys:[38],action:function(a,b){a.container.find(".mejs-volume-slider").css("display","block");if(a.isVideo){a.showControls(); +a.startControlsTimer()}b.setVolume(Math.min(b.volume+0.1,1))}},{keys:[40],action:function(a,b){a.container.find(".mejs-volume-slider").css("display","block");if(a.isVideo){a.showControls();a.startControlsTimer()}b.setVolume(Math.max(b.volume-0.1,0))}},{keys:[37,227],action:function(a,b){if(!isNaN(b.duration)&&b.duration>0){if(a.isVideo){a.showControls();a.startControlsTimer()}var c=Math.max(b.currentTime-a.options.defaultSeekBackwardInterval(b),0);b.setCurrentTime(c)}}},{keys:[39,228],action:function(a, +b){if(!isNaN(b.duration)&&b.duration>0){if(a.isVideo){a.showControls();a.startControlsTimer()}var c=Math.min(b.currentTime+a.options.defaultSeekForwardInterval(b),b.duration);b.setCurrentTime(c)}}},{keys:[70],action:function(a){if(typeof a.enterFullScreen!="undefined")a.isFullScreen?a.exitFullScreen():a.enterFullScreen()}},{keys:[77],action:function(a){a.container.find(".mejs-volume-slider").css("display","block");if(a.isVideo){a.showControls();a.startControlsTimer()}a.media.muted?a.setMuted(false): +a.setMuted(true)}}]};mejs.mepIndex=0;mejs.players={};mejs.MediaElementPlayer=function(a,b){if(!(this instanceof mejs.MediaElementPlayer))return new mejs.MediaElementPlayer(a,b);this.$media=this.$node=f(a);this.node=this.media=this.$media[0];if(typeof this.node.player!="undefined")return this.node.player;else this.node.player=this;if(typeof b=="undefined")b=this.$node.data("mejsoptions");this.options=f.extend({},mejs.MepDefaults,b);this.id="mep_"+mejs.mepIndex++;mejs.players[this.id]=this;this.init(); +return this};mejs.MediaElementPlayer.prototype={hasFocus:false,controlsAreVisible:true,init:function(){var a=this,b=mejs.MediaFeatures,c=f.extend(true,{},a.options,{success:function(d,g){a.meReady(d,g)},error:function(d){a.handleError(d)}}),e=a.media.tagName.toLowerCase();a.isDynamic=e!=="audio"&&e!=="video";a.isVideo=a.isDynamic?a.options.isVideo:e!=="audio"&&a.options.isVideo;if(b.isiPad&&a.options.iPadUseNativeControls||b.isiPhone&&a.options.iPhoneUseNativeControls){a.$media.attr("controls","controls"); +b.isiPad&&a.media.getAttribute("autoplay")!==null&&a.play()}else if(!(b.isAndroid&&a.options.AndroidUseNativeControls)){a.$media.removeAttr("controls");a.container=f('<div id="'+a.id+'" class="mejs-container '+(mejs.MediaFeatures.svg?"svg":"no-svg")+'"><div class="mejs-inner"><div class="mejs-mediaelement"></div><div class="mejs-layers"></div><div class="mejs-controls"></div><div class="mejs-clear"></div></div></div>').addClass(a.$media[0].className).insertBefore(a.$media);a.container.addClass((b.isAndroid? +"mejs-android ":"")+(b.isiOS?"mejs-ios ":"")+(b.isiPad?"mejs-ipad ":"")+(b.isiPhone?"mejs-iphone ":"")+(a.isVideo?"mejs-video ":"mejs-audio "));if(b.isiOS){b=a.$media.clone();a.container.find(".mejs-mediaelement").append(b);a.$media.remove();a.$node=a.$media=b;a.node=a.media=b[0]}else a.container.find(".mejs-mediaelement").append(a.$media);a.controls=a.container.find(".mejs-controls");a.layers=a.container.find(".mejs-layers");b=a.isVideo?"video":"audio";e=b.substring(0,1).toUpperCase()+b.substring(1); +a.width=a.options[b+"Width"]>0||a.options[b+"Width"].toString().indexOf("%")>-1?a.options[b+"Width"]:a.media.style.width!==""&&a.media.style.width!==null?a.media.style.width:a.media.getAttribute("width")!==null?a.$media.attr("width"):a.options["default"+e+"Width"];a.height=a.options[b+"Height"]>0||a.options[b+"Height"].toString().indexOf("%")>-1?a.options[b+"Height"]:a.media.style.height!==""&&a.media.style.height!==null?a.media.style.height:a.$media[0].getAttribute("height")!==null?a.$media.attr("height"): +a.options["default"+e+"Height"];a.setPlayerSize(a.width,a.height);c.pluginWidth=a.width;c.pluginHeight=a.height}mejs.MediaElement(a.$media[0],c);typeof a.container!="undefined"&&a.controlsAreVisible&&a.container.trigger("controlsshown")},showControls:function(a){var b=this;a=typeof a=="undefined"||a;if(!b.controlsAreVisible){if(a){b.controls.css("visibility","visible").stop(true,true).fadeIn(200,function(){b.controlsAreVisible=true;b.container.trigger("controlsshown")});b.container.find(".mejs-control").css("visibility", +"visible").stop(true,true).fadeIn(200,function(){b.controlsAreVisible=true})}else{b.controls.css("visibility","visible").css("display","block");b.container.find(".mejs-control").css("visibility","visible").css("display","block");b.controlsAreVisible=true;b.container.trigger("controlsshown")}b.setControlsSize()}},hideControls:function(a){var b=this;a=typeof a=="undefined"||a;if(!(!b.controlsAreVisible||b.options.alwaysShowControls))if(a){b.controls.stop(true,true).fadeOut(200,function(){f(this).css("visibility", +"hidden").css("display","block");b.controlsAreVisible=false;b.container.trigger("controlshidden")});b.container.find(".mejs-control").stop(true,true).fadeOut(200,function(){f(this).css("visibility","hidden").css("display","block")})}else{b.controls.css("visibility","hidden").css("display","block");b.container.find(".mejs-control").css("visibility","hidden").css("display","block");b.controlsAreVisible=false;b.container.trigger("controlshidden")}},controlsTimer:null,startControlsTimer:function(a){var b= +this;a=typeof a!="undefined"?a:1500;b.killControlsTimer("start");b.controlsTimer=setTimeout(function(){b.hideControls();b.killControlsTimer("hide")},a)},killControlsTimer:function(){if(this.controlsTimer!==null){clearTimeout(this.controlsTimer);delete this.controlsTimer;this.controlsTimer=null}},controlsEnabled:true,disableControls:function(){this.killControlsTimer();this.hideControls(false);this.controlsEnabled=false},enableControls:function(){this.showControls(false);this.controlsEnabled=true}, +meReady:function(a,b){var c=this,e=mejs.MediaFeatures,d=b.getAttribute("autoplay");d=!(typeof d=="undefined"||d===null||d==="false");var g;if(!c.created){c.created=true;c.media=a;c.domNode=b;if(!(e.isAndroid&&c.options.AndroidUseNativeControls)&&!(e.isiPad&&c.options.iPadUseNativeControls)&&!(e.isiPhone&&c.options.iPhoneUseNativeControls)){c.buildposter(c,c.controls,c.layers,c.media);c.buildkeyboard(c,c.controls,c.layers,c.media);c.buildoverlays(c,c.controls,c.layers,c.media);c.findTracks();for(g in c.options.features){e= +c.options.features[g];if(c["build"+e])try{c["build"+e](c,c.controls,c.layers,c.media)}catch(k){}}c.container.trigger("controlsready");c.setPlayerSize(c.width,c.height);c.setControlsSize();if(c.isVideo){if(mejs.MediaFeatures.hasTouch)c.$media.bind("touchstart",function(){if(c.controlsAreVisible)c.hideControls(false);else c.controlsEnabled&&c.showControls(false)});else{c.clickToPlayPauseCallback=function(){if(c.options.clickToPlayPause)c.media.paused?c.play():c.pause()};c.media.addEventListener("click", +c.clickToPlayPauseCallback,false);c.container.bind("mouseenter mouseover",function(){if(c.controlsEnabled)if(!c.options.alwaysShowControls){c.killControlsTimer("enter");c.showControls();c.startControlsTimer(2500)}}).bind("mousemove",function(){if(c.controlsEnabled){c.controlsAreVisible||c.showControls();c.options.alwaysShowControls||c.startControlsTimer(2500)}}).bind("mouseleave",function(){c.controlsEnabled&&!c.media.paused&&!c.options.alwaysShowControls&&c.startControlsTimer(1E3)})}c.options.hideVideoControlsOnLoad&& +c.hideControls(false);d&&!c.options.alwaysShowControls&&c.hideControls();c.options.enableAutosize&&c.media.addEventListener("loadedmetadata",function(j){if(c.options.videoHeight<=0&&c.domNode.getAttribute("height")===null&&!isNaN(j.target.videoHeight)){c.setPlayerSize(j.target.videoWidth,j.target.videoHeight);c.setControlsSize();c.media.setVideoSize(j.target.videoWidth,j.target.videoHeight)}},false)}a.addEventListener("play",function(){for(var j in mejs.players){var m=mejs.players[j];m.id!=c.id&& +c.options.pauseOtherPlayers&&!m.paused&&!m.ended&&m.pause();m.hasFocus=false}c.hasFocus=true},false);c.media.addEventListener("ended",function(){if(c.options.autoRewind)try{c.media.setCurrentTime(0)}catch(j){}c.media.pause();c.setProgressRail&&c.setProgressRail();c.setCurrentRail&&c.setCurrentRail();if(c.options.loop)c.play();else!c.options.alwaysShowControls&&c.controlsEnabled&&c.showControls()},false);c.media.addEventListener("loadedmetadata",function(){c.updateDuration&&c.updateDuration();c.updateCurrent&& +c.updateCurrent();if(!c.isFullScreen){c.setPlayerSize(c.width,c.height);c.setControlsSize()}},false);setTimeout(function(){c.setPlayerSize(c.width,c.height);c.setControlsSize()},50);c.globalBind("resize",function(){c.isFullScreen||mejs.MediaFeatures.hasTrueNativeFullScreen&&document.webkitIsFullScreen||c.setPlayerSize(c.width,c.height);c.setControlsSize()});c.media.pluginType=="youtube"&&c.options.autoplay&&c.container.find(".mejs-overlay-play").hide()}d&&a.pluginType=="native"&&c.play();if(c.options.success)typeof c.options.success== +"string"?window[c.options.success](c.media,c.domNode,c):c.options.success(c.media,c.domNode,c)}},handleError:function(a){this.controls.hide();this.options.error&&this.options.error(a)},setPlayerSize:function(a,b){if(!this.options.setDimensions)return false;if(typeof a!="undefined")this.width=a;if(typeof b!="undefined")this.height=b;if(this.height.toString().indexOf("%")>0||this.$node.css("max-width")==="100%"||this.$node[0].currentStyle&&this.$node[0].currentStyle.maxWidth==="100%"){var c=this.isVideo? +this.media.videoWidth&&this.media.videoWidth>0?this.media.videoWidth:this.media.getAttribute("width")!==null?this.media.getAttribute("width"):this.options.defaultVideoWidth:this.options.defaultAudioWidth,e=this.isVideo?this.media.videoHeight&&this.media.videoHeight>0?this.media.videoHeight:this.media.getAttribute("height")!==null?this.media.getAttribute("height"):this.options.defaultVideoHeight:this.options.defaultAudioHeight,d=this.container.parent().closest(":visible").width(),g=this.container.parent().closest(":visible").height(); +c=this.isVideo||!this.options.autosizeProgress?parseInt(d*e/c,10):e;if(isNaN(c)||g!=0&&c>g)c=g;if(this.container.parent()[0].tagName.toLowerCase()==="body"){d=f(window).width();c=f(window).height()}if(c!=0&&d!=0){this.container.width(d).height(c);this.$media.add(this.container.find(".mejs-shim")).width("100%").height("100%");this.isVideo&&this.media.setVideoSize&&this.media.setVideoSize(d,c);this.layers.children(".mejs-layer").width("100%").height("100%")}}else{this.container.width(this.width).height(this.height); +this.layers.children(".mejs-layer").width(this.width).height(this.height)}d=this.layers.find(".mejs-overlay-play");g=d.find(".mejs-overlay-button");d.height(this.container.height()-this.controls.height());g.css("margin-top","-"+(g.height()/2-this.controls.height()/2).toString()+"px")},setControlsSize:function(){var a=0,b=0,c=this.controls.find(".mejs-time-rail"),e=this.controls.find(".mejs-time-total");this.controls.find(".mejs-time-current");this.controls.find(".mejs-time-loaded");var d=c.siblings(), +g=d.last(),k=null;if(!(!this.container.is(":visible")||!c.length||!c.is(":visible"))){if(this.options&&!this.options.autosizeProgress)b=parseInt(c.css("width"));if(b===0||!b){d.each(function(){var j=f(this);if(j.css("position")!="absolute"&&j.is(":visible"))a+=f(this).outerWidth(true)});b=this.controls.width()-a-(c.outerWidth(true)-c.width())}do{c.width(b);e.width(b-(e.outerWidth(true)-e.width()));if(g.css("position")!="absolute"){k=g.position();b--}}while(k!=null&&k.top>0&&b>0);this.setProgressRail&& +this.setProgressRail();this.setCurrentRail&&this.setCurrentRail()}},buildposter:function(a,b,c,e){var d=f('<div class="mejs-poster mejs-layer"></div>').appendTo(c);b=a.$media.attr("poster");if(a.options.poster!=="")b=a.options.poster;b!==""&&b!=null?this.setPoster(b):d.hide();e.addEventListener("play",function(){d.hide()},false);a.options.showPosterWhenEnded&&a.options.autoRewind&&e.addEventListener("ended",function(){d.show()},false)},setPoster:function(a){var b=this.container.find(".mejs-poster"), +c=b.find("img");if(c.length==0)c=f('<img width="100%" height="100%" />').appendTo(b);c.attr("src",a);b.css({"background-image":"url("+a+")"})},buildoverlays:function(a,b,c,e){var d=this;if(a.isVideo){var g=f('<div class="mejs-overlay mejs-layer"><div class="mejs-overlay-loading"><span></span></div></div>').hide().appendTo(c),k=f('<div class="mejs-overlay mejs-layer"><div class="mejs-overlay-error"></div></div>').hide().appendTo(c),j=f('<div class="mejs-overlay mejs-layer mejs-overlay-play"><div class="mejs-overlay-button"></div></div>').appendTo(c).bind("click", +function(){d.options.clickToPlayPause&&e.paused&&e.play()});e.addEventListener("play",function(){j.hide();g.hide();b.find(".mejs-time-buffering").hide();k.hide()},false);e.addEventListener("playing",function(){j.hide();g.hide();b.find(".mejs-time-buffering").hide();k.hide()},false);e.addEventListener("seeking",function(){g.show();b.find(".mejs-time-buffering").show()},false);e.addEventListener("seeked",function(){g.hide();b.find(".mejs-time-buffering").hide()},false);e.addEventListener("pause",function(){mejs.MediaFeatures.isiPhone|| +j.show()},false);e.addEventListener("waiting",function(){g.show();b.find(".mejs-time-buffering").show()},false);e.addEventListener("loadeddata",function(){g.show();b.find(".mejs-time-buffering").show()},false);e.addEventListener("canplay",function(){g.hide();b.find(".mejs-time-buffering").hide()},false);e.addEventListener("error",function(){g.hide();b.find(".mejs-time-buffering").hide();k.show();k.find("mejs-overlay-error").html("Error loading this resource")},false);e.addEventListener("keydown", +function(m){d.onkeydown(a,e,m)},false)}},buildkeyboard:function(a,b,c,e){var d=this;d.globalBind("keydown",function(g){return d.onkeydown(a,e,g)});d.globalBind("click",function(g){a.hasFocus=f(g.target).closest(".mejs-container").length!=0})},onkeydown:function(a,b,c){if(a.hasFocus&&a.options.enableKeyboard)for(var e=0,d=a.options.keyActions.length;e<d;e++)for(var g=a.options.keyActions[e],k=0,j=g.keys.length;k<j;k++)if(c.keyCode==g.keys[k]){typeof c.preventDefault=="function"&&c.preventDefault(); +g.action(a,b,c.keyCode);return false}return true},findTracks:function(){var a=this,b=a.$media.find("track");a.tracks=[];b.each(function(c,e){e=f(e);a.tracks.push({srclang:e.attr("srclang")?e.attr("srclang").toLowerCase():"",src:e.attr("src"),kind:e.attr("kind"),label:e.attr("label")||"",entries:[],isLoaded:false})})},changeSkin:function(a){this.container[0].className="mejs-container "+a;this.setPlayerSize(this.width,this.height);this.setControlsSize()},play:function(){this.load();this.media.play()}, +pause:function(){try{this.media.pause()}catch(a){}},load:function(){this.isLoaded||this.media.load();this.isLoaded=true},setMuted:function(a){this.media.setMuted(a)},setCurrentTime:function(a){this.media.setCurrentTime(a)},getCurrentTime:function(){return this.media.currentTime},setVolume:function(a){this.media.setVolume(a)},getVolume:function(){return this.media.volume},setSrc:function(a){this.media.setSrc(a)},remove:function(){var a,b;for(a in this.options.features){b=this.options.features[a];if(this["clean"+ +b])try{this["clean"+b](this)}catch(c){}}if(this.isDynamic)this.$node.insertBefore(this.container);else{this.$media.prop("controls",true);this.$node.clone().insertBefore(this.container).show();this.$node.remove()}this.media.pluginType!=="native"&&this.media.remove();delete mejs.players[this.id];typeof this.container=="object"&&this.container.remove();this.globalUnbind();delete this.node.player}};(function(){function a(c,e){var d={d:[],w:[]};f.each((c||"").split(" "),function(g,k){var j=k+"."+e;if(j.indexOf(".")=== +0){d.d.push(j);d.w.push(j)}else d[b.test(k)?"w":"d"].push(j)});d.d=d.d.join(" ");d.w=d.w.join(" ");return d}var b=/^((after|before)print|(before)?unload|hashchange|message|o(ff|n)line|page(hide|show)|popstate|resize|storage)\b/;mejs.MediaElementPlayer.prototype.globalBind=function(c,e,d){c=a(c,this.id);c.d&&f(document).bind(c.d,e,d);c.w&&f(window).bind(c.w,e,d)};mejs.MediaElementPlayer.prototype.globalUnbind=function(c,e){c=a(c,this.id);c.d&&f(document).unbind(c.d,e);c.w&&f(window).unbind(c.w,e)}})(); +if(typeof f!="undefined"){f.fn.mediaelementplayer=function(a){a===false?this.each(function(){var b=f(this).data("mediaelementplayer");b&&b.remove();f(this).removeData("mediaelementplayer")}):this.each(function(){f(this).data("mediaelementplayer",new mejs.MediaElementPlayer(this,a))});return this};f(document).ready(function(){f(".mejs-player").mediaelementplayer()})}window.MediaElementPlayer=mejs.MediaElementPlayer})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{playpauseText:mejs.i18n.t("Play/Pause")});f.extend(MediaElementPlayer.prototype,{buildplaypause:function(a,b,c,e){var d=f('<div class="mejs-button mejs-playpause-button mejs-play" ><button type="button" aria-controls="'+this.id+'" title="'+this.options.playpauseText+'" aria-label="'+this.options.playpauseText+'"></button></div>').appendTo(b).click(function(g){g.preventDefault();e.paused?e.play():e.pause();return false});e.addEventListener("play",function(){d.removeClass("mejs-play").addClass("mejs-pause")}, +false);e.addEventListener("playing",function(){d.removeClass("mejs-play").addClass("mejs-pause")},false);e.addEventListener("pause",function(){d.removeClass("mejs-pause").addClass("mejs-play")},false);e.addEventListener("paused",function(){d.removeClass("mejs-pause").addClass("mejs-play")},false)}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{stopText:"Stop"});f.extend(MediaElementPlayer.prototype,{buildstop:function(a,b,c,e){f('<div class="mejs-button mejs-stop-button mejs-stop"><button type="button" aria-controls="'+this.id+'" title="'+this.options.stopText+'" aria-label="'+this.options.stopText+'"></button></div>').appendTo(b).click(function(){e.paused||e.pause();if(e.currentTime>0){e.setCurrentTime(0);e.pause();b.find(".mejs-time-current").width("0px");b.find(".mejs-time-handle").css("left", +"0px");b.find(".mejs-time-float-current").html(mejs.Utility.secondsToTimeCode(0));b.find(".mejs-currenttime").html(mejs.Utility.secondsToTimeCode(0));c.find(".mejs-poster").show()}})}})})(mejs.$); +(function(f){f.extend(MediaElementPlayer.prototype,{buildprogress:function(a,b,c,e){f('<div class="mejs-time-rail"><span class="mejs-time-total"><span class="mejs-time-buffering"></span><span class="mejs-time-loaded"></span><span class="mejs-time-current"></span><span class="mejs-time-handle"></span><span class="mejs-time-float"><span class="mejs-time-float-current">00:00</span><span class="mejs-time-float-corner"></span></span></span></div>').appendTo(b);b.find(".mejs-time-buffering").hide();var d= +this,g=b.find(".mejs-time-total");c=b.find(".mejs-time-loaded");var k=b.find(".mejs-time-current"),j=b.find(".mejs-time-handle"),m=b.find(".mejs-time-float"),q=b.find(".mejs-time-float-current"),p=function(h){h=h.originalEvent.changedTouches?h.originalEvent.changedTouches[0].pageX:h.pageX;var l=g.offset(),r=g.outerWidth(true),n=0,o=n=0;if(e.duration){if(h<l.left)h=l.left;else if(h>r+l.left)h=r+l.left;o=h-l.left;n=o/r;n=n<=0.02?0:n*e.duration;t&&n!==e.currentTime&&e.setCurrentTime(n);if(!mejs.MediaFeatures.hasTouch){m.css("left", +o);q.html(mejs.Utility.secondsToTimeCode(n));m.show()}}},t=false;g.bind("mousedown touchstart",function(h){if(h.which===1||h.which===0){t=true;p(h);d.globalBind("mousemove.dur touchmove.dur",function(l){p(l)});d.globalBind("mouseup.dur touchend.dur",function(){t=false;m.hide();d.globalUnbind(".dur")});return false}}).bind("mouseenter",function(){d.globalBind("mousemove.dur",function(h){p(h)});mejs.MediaFeatures.hasTouch||m.show()}).bind("mouseleave",function(){if(!t){d.globalUnbind(".dur");m.hide()}}); +e.addEventListener("progress",function(h){a.setProgressRail(h);a.setCurrentRail(h)},false);e.addEventListener("timeupdate",function(h){a.setProgressRail(h);a.setCurrentRail(h)},false);d.loaded=c;d.total=g;d.current=k;d.handle=j},setProgressRail:function(a){var b=a!=undefined?a.target:this.media,c=null;if(b&&b.buffered&&b.buffered.length>0&&b.buffered.end&&b.duration)c=b.buffered.end(0)/b.duration;else if(b&&b.bytesTotal!=undefined&&b.bytesTotal>0&&b.bufferedBytes!=undefined)c=b.bufferedBytes/b.bytesTotal; +else if(a&&a.lengthComputable&&a.total!=0)c=a.loaded/a.total;if(c!==null){c=Math.min(1,Math.max(0,c));this.loaded&&this.total&&this.loaded.width(this.total.width()*c)}},setCurrentRail:function(){if(this.media.currentTime!=undefined&&this.media.duration)if(this.total&&this.handle){var a=Math.round(this.total.width()*this.media.currentTime/this.media.duration),b=a-Math.round(this.handle.outerWidth(true)/2);this.current.width(a);this.handle.css("left",b)}}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{duration:-1,timeAndDurationSeparator:"<span> | </span>"});f.extend(MediaElementPlayer.prototype,{buildcurrent:function(a,b,c,e){f('<div class="mejs-time"><span class="mejs-currenttime">'+(a.options.alwaysShowHours?"00:":"")+(a.options.showTimecodeFrameCount?"00:00:00":"00:00")+"</span></div>").appendTo(b);this.currenttime=this.controls.find(".mejs-currenttime");e.addEventListener("timeupdate",function(){a.updateCurrent()},false)},buildduration:function(a,b, +c,e){if(b.children().last().find(".mejs-currenttime").length>0)f(this.options.timeAndDurationSeparator+'<span class="mejs-duration">'+(this.options.duration>0?mejs.Utility.secondsToTimeCode(this.options.duration,this.options.alwaysShowHours||this.media.duration>3600,this.options.showTimecodeFrameCount,this.options.framesPerSecond||25):(a.options.alwaysShowHours?"00:":"")+(a.options.showTimecodeFrameCount?"00:00:00":"00:00"))+"</span>").appendTo(b.find(".mejs-time"));else{b.find(".mejs-currenttime").parent().addClass("mejs-currenttime-container"); +f('<div class="mejs-time mejs-duration-container"><span class="mejs-duration">'+(this.options.duration>0?mejs.Utility.secondsToTimeCode(this.options.duration,this.options.alwaysShowHours||this.media.duration>3600,this.options.showTimecodeFrameCount,this.options.framesPerSecond||25):(a.options.alwaysShowHours?"00:":"")+(a.options.showTimecodeFrameCount?"00:00:00":"00:00"))+"</span></div>").appendTo(b)}this.durationD=this.controls.find(".mejs-duration");e.addEventListener("timeupdate",function(){a.updateDuration()}, +false)},updateCurrent:function(){if(this.currenttime)this.currenttime.html(mejs.Utility.secondsToTimeCode(this.media.currentTime,this.options.alwaysShowHours||this.media.duration>3600,this.options.showTimecodeFrameCount,this.options.framesPerSecond||25))},updateDuration:function(){this.container.toggleClass("mejs-long-video",this.media.duration>3600);if(this.durationD&&(this.options.duration>0||this.media.duration))this.durationD.html(mejs.Utility.secondsToTimeCode(this.options.duration>0?this.options.duration: +this.media.duration,this.options.alwaysShowHours,this.options.showTimecodeFrameCount,this.options.framesPerSecond||25))}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{muteText:mejs.i18n.t("Mute Toggle"),hideVolumeOnTouchDevices:true,audioVolume:"horizontal",videoVolume:"vertical"});f.extend(MediaElementPlayer.prototype,{buildvolume:function(a,b,c,e){if(!((mejs.MediaFeatures.isAndroid||mejs.MediaFeatures.isiOS)&&this.options.hideVolumeOnTouchDevices)){var d=this,g=d.isVideo?d.options.videoVolume:d.options.audioVolume,k=g=="horizontal"?f('<div class="mejs-button mejs-volume-button mejs-mute"><button type="button" aria-controls="'+ +d.id+'" title="'+d.options.muteText+'" aria-label="'+d.options.muteText+'"></button></div><div class="mejs-horizontal-volume-slider"><div class="mejs-horizontal-volume-total"></div><div class="mejs-horizontal-volume-current"></div><div class="mejs-horizontal-volume-handle"></div></div>').appendTo(b):f('<div class="mejs-button mejs-volume-button mejs-mute"><button type="button" aria-controls="'+d.id+'" title="'+d.options.muteText+'" aria-label="'+d.options.muteText+'"></button><div class="mejs-volume-slider"><div class="mejs-volume-total"></div><div class="mejs-volume-current"></div><div class="mejs-volume-handle"></div></div></div>').appendTo(b), +j=d.container.find(".mejs-volume-slider, .mejs-horizontal-volume-slider"),m=d.container.find(".mejs-volume-total, .mejs-horizontal-volume-total"),q=d.container.find(".mejs-volume-current, .mejs-horizontal-volume-current"),p=d.container.find(".mejs-volume-handle, .mejs-horizontal-volume-handle"),t=function(n,o){if(!j.is(":visible")&&typeof o=="undefined"){j.show();t(n,true);j.hide()}else{n=Math.max(0,n);n=Math.min(n,1);n==0?k.removeClass("mejs-mute").addClass("mejs-unmute"):k.removeClass("mejs-unmute").addClass("mejs-mute"); +if(g=="vertical"){var s=m.height(),u=m.position(),v=s-s*n;p.css("top",Math.round(u.top+v-p.height()/2));q.height(s-v);q.css("top",u.top+v)}else{s=m.width();u=m.position();s=s*n;p.css("left",Math.round(u.left+s-p.width()/2));q.width(Math.round(s))}}},h=function(n){var o=null,s=m.offset();if(g=="vertical"){o=m.height();parseInt(m.css("top").replace(/px/,""),10);o=(o-(n.pageY-s.top))/o;if(s.top==0||s.left==0)return}else{o=m.width();o=(n.pageX-s.left)/o}o=Math.max(0,o);o=Math.min(o,1);t(o);o==0?e.setMuted(true): +e.setMuted(false);e.setVolume(o)},l=false,r=false;k.hover(function(){j.show();r=true},function(){r=false;!l&&g=="vertical"&&j.hide()});j.bind("mouseover",function(){r=true}).bind("mousedown",function(n){h(n);d.globalBind("mousemove.vol",function(o){h(o)});d.globalBind("mouseup.vol",function(){l=false;d.globalUnbind(".vol");!r&&g=="vertical"&&j.hide()});l=true;return false});k.find("button").click(function(){e.setMuted(!e.muted)});e.addEventListener("volumechange",function(){if(!l)if(e.muted){t(0); +k.removeClass("mejs-mute").addClass("mejs-unmute")}else{t(e.volume);k.removeClass("mejs-unmute").addClass("mejs-mute")}},false);if(d.container.is(":visible")){t(a.options.startVolume);a.options.startVolume===0&&e.setMuted(true);e.pluginType==="native"&&e.setVolume(a.options.startVolume)}}}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{usePluginFullScreen:true,newWindowCallback:function(){return""},fullscreenText:mejs.i18n.t("Fullscreen")});f.extend(MediaElementPlayer.prototype,{isFullScreen:false,isNativeFullScreen:false,isInIframe:false,buildfullscreen:function(a,b,c,e){if(a.isVideo){a.isInIframe=window.location!=window.parent.location;mejs.MediaFeatures.hasTrueNativeFullScreen&&a.globalBind(mejs.MediaFeatures.fullScreenEventName,function(){if(a.isFullScreen)if(mejs.MediaFeatures.isFullScreen()){a.isNativeFullScreen= +true;a.setControlsSize()}else{a.isNativeFullScreen=false;a.exitFullScreen()}});var d=this,g=f('<div class="mejs-button mejs-fullscreen-button"><button type="button" aria-controls="'+d.id+'" title="'+d.options.fullscreenText+'" aria-label="'+d.options.fullscreenText+'"></button></div>').appendTo(b);if(d.media.pluginType==="native"||!d.options.usePluginFullScreen&&!mejs.MediaFeatures.isFirefox)g.click(function(){mejs.MediaFeatures.hasTrueNativeFullScreen&&mejs.MediaFeatures.isFullScreen()||a.isFullScreen? +a.exitFullScreen():a.enterFullScreen()});else{var k=null;if(function(){var h=document.createElement("x"),l=document.documentElement,r=window.getComputedStyle;if(!("pointerEvents"in h.style))return false;h.style.pointerEvents="auto";h.style.pointerEvents="x";l.appendChild(h);r=r&&r(h,"").pointerEvents==="auto";l.removeChild(h);return!!r}()&&!mejs.MediaFeatures.isOpera){var j=false,m=function(){if(j){for(var h in q)q[h].hide();g.css("pointer-events","");d.controls.css("pointer-events","");d.media.removeEventListener("click", +d.clickToPlayPauseCallback);j=false}},q={};b=["top","left","right","bottom"];var p,t=function(){var h=g.offset().left-d.container.offset().left,l=g.offset().top-d.container.offset().top,r=g.outerWidth(true),n=g.outerHeight(true),o=d.container.width(),s=d.container.height();for(p in q)q[p].css({position:"absolute",top:0,left:0});q.top.width(o).height(l);q.left.width(h).height(n).css({top:l});q.right.width(o-h-r).height(n).css({top:l,left:h+r});q.bottom.width(o).height(s-n-l).css({top:l+n})};d.globalBind("resize", +function(){t()});p=0;for(c=b.length;p<c;p++)q[b[p]]=f('<div class="mejs-fullscreen-hover" />').appendTo(d.container).mouseover(m).hide();g.on("mouseover",function(){if(!d.isFullScreen){var h=g.offset(),l=a.container.offset();e.positionFullscreenButton(h.left-l.left,h.top-l.top,false);g.css("pointer-events","none");d.controls.css("pointer-events","none");d.media.addEventListener("click",d.clickToPlayPauseCallback);for(p in q)q[p].show();t();j=true}});e.addEventListener("fullscreenchange",function(){d.isFullScreen= +!d.isFullScreen;d.isFullScreen?d.media.removeEventListener("click",d.clickToPlayPauseCallback):d.media.addEventListener("click",d.clickToPlayPauseCallback);m()});d.globalBind("mousemove",function(h){if(j){var l=g.offset();if(h.pageY<l.top||h.pageY>l.top+g.outerHeight(true)||h.pageX<l.left||h.pageX>l.left+g.outerWidth(true)){g.css("pointer-events","");d.controls.css("pointer-events","");j=false}}})}else g.on("mouseover",function(){if(k!==null){clearTimeout(k);delete k}var h=g.offset(),l=a.container.offset(); +e.positionFullscreenButton(h.left-l.left,h.top-l.top,true)}).on("mouseout",function(){if(k!==null){clearTimeout(k);delete k}k=setTimeout(function(){e.hideFullscreenButton()},1500)})}a.fullscreenBtn=g;d.globalBind("keydown",function(h){if((mejs.MediaFeatures.hasTrueNativeFullScreen&&mejs.MediaFeatures.isFullScreen()||d.isFullScreen)&&h.keyCode==27)a.exitFullScreen()})}},cleanfullscreen:function(a){a.exitFullScreen()},containerSizeTimeout:null,enterFullScreen:function(){var a=this;if(!(a.media.pluginType!== +"native"&&(mejs.MediaFeatures.isFirefox||a.options.usePluginFullScreen))){f(document.documentElement).addClass("mejs-fullscreen");normalHeight=a.container.height();normalWidth=a.container.width();if(a.media.pluginType==="native")if(mejs.MediaFeatures.hasTrueNativeFullScreen){mejs.MediaFeatures.requestFullScreen(a.container[0]);a.isInIframe&&setTimeout(function c(){if(a.isNativeFullScreen){var e=(window.devicePixelRatio||1)*f(window).width(),d=screen.width;Math.abs(d-e)>d*0.0020?a.exitFullScreen(): +setTimeout(c,500)}},500)}else if(mejs.MediaFeatures.hasSemiNativeFullScreen){a.media.webkitEnterFullscreen();return}if(a.isInIframe){var b=a.options.newWindowCallback(this);if(b!=="")if(mejs.MediaFeatures.hasTrueNativeFullScreen)setTimeout(function(){if(!a.isNativeFullScreen){a.pause();window.open(b,a.id,"top=0,left=0,width="+screen.availWidth+",height="+screen.availHeight+",resizable=yes,scrollbars=no,status=no,toolbar=no")}},250);else{a.pause();window.open(b,a.id,"top=0,left=0,width="+screen.availWidth+ +",height="+screen.availHeight+",resizable=yes,scrollbars=no,status=no,toolbar=no");return}}a.container.addClass("mejs-container-fullscreen").width("100%").height("100%");a.containerSizeTimeout=setTimeout(function(){a.container.css({width:"100%",height:"100%"});a.setControlsSize()},500);if(a.media.pluginType==="native")a.$media.width("100%").height("100%");else{a.container.find(".mejs-shim").width("100%").height("100%");a.media.setVideoSize(f(window).width(),f(window).height())}a.layers.children("div").width("100%").height("100%"); +a.fullscreenBtn&&a.fullscreenBtn.removeClass("mejs-fullscreen").addClass("mejs-unfullscreen");a.setControlsSize();a.isFullScreen=true;a.container.find(".mejs-captions-text").css("font-size",screen.width/a.width*1*100+"%");a.container.find(".mejs-captions-position").css("bottom","45px")}},exitFullScreen:function(){clearTimeout(this.containerSizeTimeout);if(this.media.pluginType!=="native"&&mejs.MediaFeatures.isFirefox)this.media.setFullscreen(false);else{if(mejs.MediaFeatures.hasTrueNativeFullScreen&& +(mejs.MediaFeatures.isFullScreen()||this.isFullScreen))mejs.MediaFeatures.cancelFullScreen();f(document.documentElement).removeClass("mejs-fullscreen");this.container.removeClass("mejs-container-fullscreen").width(normalWidth).height(normalHeight);if(this.media.pluginType==="native")this.$media.width(normalWidth).height(normalHeight);else{this.container.find(".mejs-shim").width(normalWidth).height(normalHeight);this.media.setVideoSize(normalWidth,normalHeight)}this.layers.children("div").width(normalWidth).height(normalHeight); +this.fullscreenBtn.removeClass("mejs-unfullscreen").addClass("mejs-fullscreen");this.setControlsSize();this.isFullScreen=false;this.container.find(".mejs-captions-text").css("font-size","");this.container.find(".mejs-captions-position").css("bottom","")}}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{speeds:["1.50","1.25","1.00","0.75"],defaultSpeed:"1.00"});f.extend(MediaElementPlayer.prototype,{buildspeed:function(a,b,c,e){if(this.media.pluginType=="native"){c='<div class="mejs-button mejs-speed-button"><button type="button">'+this.options.defaultSpeed+'x</button><div class="mejs-speed-selector"><ul>';var d;f.inArray(this.options.defaultSpeed,this.options.speeds)===-1&&this.options.speeds.push(this.options.defaultSpeed);this.options.speeds.sort(function(g, +k){return parseFloat(k)-parseFloat(g)});for(d=0;d<this.options.speeds.length;d++){c+='<li><input type="radio" name="speed" value="'+this.options.speeds[d]+'" id="'+this.options.speeds[d]+'" ';if(this.options.speeds[d]==this.options.defaultSpeed){c+="checked=true ";c+='/><label for="'+this.options.speeds[d]+'" class="mejs-speed-selected">'+this.options.speeds[d]+"x</label></li>"}else c+='/><label for="'+this.options.speeds[d]+'">'+this.options.speeds[d]+"x</label></li>"}c+="</ul></div></div>";a.speedButton= +f(c).appendTo(b);a.playbackspeed=this.options.defaultSpeed;a.speedButton.on("click","input[type=radio]",function(){a.playbackspeed=f(this).attr("value");e.playbackRate=parseFloat(a.playbackspeed);a.speedButton.find("button").text(a.playbackspeed+"x");a.speedButton.find(".mejs-speed-selected").removeClass("mejs-speed-selected");a.speedButton.find("input[type=radio]:checked").next().addClass("mejs-speed-selected")});b=a.speedButton.find(".mejs-speed-selector");b.height(this.speedButton.find(".mejs-speed-selector ul").outerHeight(true)+ +a.speedButton.find(".mejs-speed-translations").outerHeight(true));b.css("top",-1*b.height()+"px")}}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{startLanguage:"",tracksText:mejs.i18n.t("Captions/Subtitles"),hideCaptionsButtonWhenEmpty:true,toggleCaptionsButtonWhenOnlyOne:false,slidesSelector:""});f.extend(MediaElementPlayer.prototype,{hasChapters:false,buildtracks:function(a,b,c,e){if(a.tracks.length!==0){var d;if(this.domNode.textTracks)for(d=this.domNode.textTracks.length-1;d>=0;d--)this.domNode.textTracks[d].mode="hidden";a.chapters=f('<div class="mejs-chapters mejs-layer"></div>').prependTo(c).hide(); +a.captions=f('<div class="mejs-captions-layer mejs-layer"><div class="mejs-captions-position mejs-captions-position-hover"><span class="mejs-captions-text"></span></div></div>').prependTo(c).hide();a.captionsText=a.captions.find(".mejs-captions-text");a.captionsButton=f('<div class="mejs-button mejs-captions-button"><button type="button" aria-controls="'+this.id+'" title="'+this.options.tracksText+'" aria-label="'+this.options.tracksText+'"></button><div class="mejs-captions-selector"><ul><li><input type="radio" name="'+ +a.id+'_captions" id="'+a.id+'_captions_none" value="none" checked="checked" /><label for="'+a.id+'_captions_none">'+mejs.i18n.t("None")+"</label></li></ul></div></div>").appendTo(b);for(d=b=0;d<a.tracks.length;d++)a.tracks[d].kind=="subtitles"&&b++;if(this.options.toggleCaptionsButtonWhenOnlyOne&&b==1)a.captionsButton.on("click",function(){lang=a.selectedTrack===null?a.tracks[0].srclang:"none";a.setTrack(lang)});else{a.captionsButton.on("mouseenter focusin",function(){f(this).find(".mejs-captions-selector").css("visibility", +"visible")}).on("click","input[type=radio]",function(){lang=this.value;a.setTrack(lang)});a.captionsButton.on("mouseleave focusout",function(){f(this).find(".mejs-captions-selector").css("visibility","hidden")})}a.options.alwaysShowControls?a.container.find(".mejs-captions-position").addClass("mejs-captions-position-hover"):a.container.bind("controlsshown",function(){a.container.find(".mejs-captions-position").addClass("mejs-captions-position-hover")}).bind("controlshidden",function(){e.paused||a.container.find(".mejs-captions-position").removeClass("mejs-captions-position-hover")}); +a.trackToLoad=-1;a.selectedTrack=null;a.isLoadingTrack=false;for(d=0;d<a.tracks.length;d++)a.tracks[d].kind=="subtitles"&&a.addTrackButton(a.tracks[d].srclang,a.tracks[d].label);a.loadNextTrack();e.addEventListener("timeupdate",function(){a.displayCaptions()},false);if(a.options.slidesSelector!==""){a.slidesContainer=f(a.options.slidesSelector);e.addEventListener("timeupdate",function(){a.displaySlides()},false)}e.addEventListener("loadedmetadata",function(){a.displayChapters()},false);a.container.hover(function(){if(a.hasChapters){a.chapters.css("visibility", +"visible");a.chapters.fadeIn(200).height(a.chapters.find(".mejs-chapter").outerHeight())}},function(){a.hasChapters&&!e.paused&&a.chapters.fadeOut(200,function(){f(this).css("visibility","hidden");f(this).css("display","block")})});a.node.getAttribute("autoplay")!==null&&a.chapters.css("visibility","hidden")}},setTrack:function(a){var b;if(a=="none"){this.selectedTrack=null;this.captionsButton.removeClass("mejs-captions-enabled")}else for(b=0;b<this.tracks.length;b++)if(this.tracks[b].srclang==a){this.selectedTrack=== +null&&this.captionsButton.addClass("mejs-captions-enabled");this.selectedTrack=this.tracks[b];this.captions.attr("lang",this.selectedTrack.srclang);this.displayCaptions();break}},loadNextTrack:function(){this.trackToLoad++;if(this.trackToLoad<this.tracks.length){this.isLoadingTrack=true;this.loadTrack(this.trackToLoad)}else{this.isLoadingTrack=false;this.checkForTracks()}},loadTrack:function(a){var b=this,c=b.tracks[a];f.ajax({url:c.src,dataType:"text",success:function(e){c.entries=typeof e=="string"&& +/<tt\s+xml/ig.exec(e)?mejs.TrackFormatParser.dfxp.parse(e):mejs.TrackFormatParser.webvtt.parse(e);c.isLoaded=true;b.enableTrackButton(c.srclang,c.label);b.loadNextTrack();c.kind=="chapters"&&b.media.addEventListener("play",function(){b.media.duration>0&&b.displayChapters(c)},false);c.kind=="slides"&&b.setupSlides(c)},error:function(){b.loadNextTrack()}})},enableTrackButton:function(a,b){if(b==="")b=mejs.language.codes[a]||a;this.captionsButton.find("input[value="+a+"]").prop("disabled",false).siblings("label").html(b); +this.options.startLanguage==a&&f("#"+this.id+"_captions_"+a).prop("checked",true).trigger("click");this.adjustLanguageBox()},addTrackButton:function(a,b){if(b==="")b=mejs.language.codes[a]||a;this.captionsButton.find("ul").append(f('<li><input type="radio" name="'+this.id+'_captions" id="'+this.id+"_captions_"+a+'" value="'+a+'" disabled="disabled" /><label for="'+this.id+"_captions_"+a+'">'+b+" (loading)</label></li>"));this.adjustLanguageBox();this.container.find(".mejs-captions-translations option[value="+ +a+"]").remove()},adjustLanguageBox:function(){this.captionsButton.find(".mejs-captions-selector").height(this.captionsButton.find(".mejs-captions-selector ul").outerHeight(true)+this.captionsButton.find(".mejs-captions-translations").outerHeight(true))},checkForTracks:function(){var a=false;if(this.options.hideCaptionsButtonWhenEmpty){for(i=0;i<this.tracks.length;i++)if(this.tracks[i].kind=="subtitles"){a=true;break}if(!a){this.captionsButton.hide();this.setControlsSize()}}},displayCaptions:function(){if(typeof this.tracks!= +"undefined"){var a,b=this.selectedTrack;if(b!==null&&b.isLoaded)for(a=0;a<b.entries.times.length;a++)if(this.media.currentTime>=b.entries.times[a].start&&this.media.currentTime<=b.entries.times[a].stop){this.captionsText.html(b.entries.text[a]).attr("class","mejs-captions-text "+(b.entries.times[a].identifier||""));this.captions.show().height(0);return}this.captions.hide()}},setupSlides:function(a){this.slides=a;this.slides.entries.imgs=[this.slides.entries.text.length];this.showSlide(0)},showSlide:function(a){if(!(typeof this.tracks== +"undefined"||typeof this.slidesContainer=="undefined")){var b=this,c=b.slides.entries.text[a],e=b.slides.entries.imgs[a];if(typeof e=="undefined"||typeof e.fadeIn=="undefined")b.slides.entries.imgs[a]=e=f('<img src="'+c+'">').on("load",function(){e.appendTo(b.slidesContainer).hide().fadeIn().siblings(":visible").fadeOut()});else!e.is(":visible")&&!e.is(":animated")&&e.fadeIn().siblings(":visible").fadeOut()}},displaySlides:function(){if(typeof this.slides!="undefined"){var a=this.slides,b;for(b=0;b< +a.entries.times.length;b++)if(this.media.currentTime>=a.entries.times[b].start&&this.media.currentTime<=a.entries.times[b].stop){this.showSlide(b);break}}},displayChapters:function(){var a;for(a=0;a<this.tracks.length;a++)if(this.tracks[a].kind=="chapters"&&this.tracks[a].isLoaded){this.drawChapters(this.tracks[a]);this.hasChapters=true;break}},drawChapters:function(a){var b=this,c,e,d=e=0;b.chapters.empty();for(c=0;c<a.entries.times.length;c++){e=a.entries.times[c].stop-a.entries.times[c].start; +e=Math.floor(e/b.media.duration*100);if(e+d>100||c==a.entries.times.length-1&&e+d<100)e=100-d;b.chapters.append(f('<div class="mejs-chapter" rel="'+a.entries.times[c].start+'" style="left: '+d.toString()+"%;width: "+e.toString()+'%;"><div class="mejs-chapter-block'+(c==a.entries.times.length-1?" mejs-chapter-block-last":"")+'"><span class="ch-title">'+a.entries.text[c]+'</span><span class="ch-time">'+mejs.Utility.secondsToTimeCode(a.entries.times[c].start)+"–"+mejs.Utility.secondsToTimeCode(a.entries.times[c].stop)+ +"</span></div></div>"));d+=e}b.chapters.find("div.mejs-chapter").click(function(){b.media.setCurrentTime(parseFloat(f(this).attr("rel")));b.media.paused&&b.media.play()});b.chapters.show()}});mejs.language={codes:{af:"Afrikaans",sq:"Albanian",ar:"Arabic",be:"Belarusian",bg:"Bulgarian",ca:"Catalan",zh:"Chinese","zh-cn":"Chinese Simplified","zh-tw":"Chinese Traditional",hr:"Croatian",cs:"Czech",da:"Danish",nl:"Dutch",en:"English",et:"Estonian",fl:"Filipino",fi:"Finnish",fr:"French",gl:"Galician",de:"German", +el:"Greek",ht:"Haitian Creole",iw:"Hebrew",hi:"Hindi",hu:"Hungarian",is:"Icelandic",id:"Indonesian",ga:"Irish",it:"Italian",ja:"Japanese",ko:"Korean",lv:"Latvian",lt:"Lithuanian",mk:"Macedonian",ms:"Malay",mt:"Maltese",no:"Norwegian",fa:"Persian",pl:"Polish",pt:"Portuguese",ro:"Romanian",ru:"Russian",sr:"Serbian",sk:"Slovak",sl:"Slovenian",es:"Spanish",sw:"Swahili",sv:"Swedish",tl:"Tagalog",th:"Thai",tr:"Turkish",uk:"Ukrainian",vi:"Vietnamese",cy:"Welsh",yi:"Yiddish"}};mejs.TrackFormatParser={webvtt:{pattern_timecode:/^((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{1,3})?) --\> ((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{3})?)(.*)$/, +parse:function(a){var b=0;a=mejs.TrackFormatParser.split2(a,/\r?\n/);for(var c={text:[],times:[]},e,d,g;b<a.length;b++){if((e=this.pattern_timecode.exec(a[b]))&&b<a.length){if(b-1>=0&&a[b-1]!=="")g=a[b-1];b++;d=a[b];for(b++;a[b]!==""&&b<a.length;){d=d+"\n"+a[b];b++}d=f.trim(d).replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig,"<a href='$1' target='_blank'>$1</a>");c.text.push(d);c.times.push({identifier:g,start:mejs.Utility.convertSMPTEtoSeconds(e[1])===0?0.2:mejs.Utility.convertSMPTEtoSeconds(e[1]), +stop:mejs.Utility.convertSMPTEtoSeconds(e[3]),settings:e[5]})}g=""}return c}},dfxp:{parse:function(a){a=f(a).filter("tt");var b=0;b=a.children("div").eq(0);var c=b.find("p");b=a.find("#"+b.attr("style"));var e,d;a={text:[],times:[]};if(b.length){d=b.removeAttr("id").get(0).attributes;if(d.length){e={};for(b=0;b<d.length;b++)e[d[b].name.split(":")[1]]=d[b].value}}for(b=0;b<c.length;b++){var g;d={start:null,stop:null,style:null};if(c.eq(b).attr("begin"))d.start=mejs.Utility.convertSMPTEtoSeconds(c.eq(b).attr("begin")); +if(!d.start&&c.eq(b-1).attr("end"))d.start=mejs.Utility.convertSMPTEtoSeconds(c.eq(b-1).attr("end"));if(c.eq(b).attr("end"))d.stop=mejs.Utility.convertSMPTEtoSeconds(c.eq(b).attr("end"));if(!d.stop&&c.eq(b+1).attr("begin"))d.stop=mejs.Utility.convertSMPTEtoSeconds(c.eq(b+1).attr("begin"));if(e){g="";for(var k in e)g+=k+":"+e[k]+";"}if(g)d.style=g;if(d.start===0)d.start=0.2;a.times.push(d);d=f.trim(c.eq(b).html()).replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, +"<a href='$1' target='_blank'>$1</a>");a.text.push(d);if(a.times.start===0)a.times.start=2}return a}},split2:function(a,b){return a.split(b)}};if("x\n\ny".split(/\n/gi).length!=3)mejs.TrackFormatParser.split2=function(a,b){var c=[],e="",d;for(d=0;d<a.length;d++){e+=a.substring(d,d+1);if(b.test(e)){c.push(e.replace(b,""));e=""}}c.push(e);return c}})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{contextMenuItems:[{render:function(a){if(typeof a.enterFullScreen=="undefined")return null;return a.isFullScreen?mejs.i18n.t("Turn off Fullscreen"):mejs.i18n.t("Go Fullscreen")},click:function(a){a.isFullScreen?a.exitFullScreen():a.enterFullScreen()}},{render:function(a){return a.media.muted?mejs.i18n.t("Unmute"):mejs.i18n.t("Mute")},click:function(a){a.media.muted?a.setMuted(false):a.setMuted(true)}},{isSeparator:true},{render:function(){return mejs.i18n.t("Download Video")}, +click:function(a){window.location.href=a.media.currentSrc}}]});f.extend(MediaElementPlayer.prototype,{buildcontextmenu:function(a){a.contextMenu=f('<div class="mejs-contextmenu"></div>').appendTo(f("body")).hide();a.container.bind("contextmenu",function(b){if(a.isContextMenuEnabled){b.preventDefault();a.renderContextMenu(b.clientX-1,b.clientY-1);return false}});a.container.bind("click",function(){a.contextMenu.hide()});a.contextMenu.bind("mouseleave",function(){a.startContextMenuTimer()})},cleancontextmenu:function(a){a.contextMenu.remove()}, +isContextMenuEnabled:true,enableContextMenu:function(){this.isContextMenuEnabled=true},disableContextMenu:function(){this.isContextMenuEnabled=false},contextMenuTimeout:null,startContextMenuTimer:function(){var a=this;a.killContextMenuTimer();a.contextMenuTimer=setTimeout(function(){a.hideContextMenu();a.killContextMenuTimer()},750)},killContextMenuTimer:function(){var a=this.contextMenuTimer;if(a!=null){clearTimeout(a);delete a}},hideContextMenu:function(){this.contextMenu.hide()},renderContextMenu:function(a, +b){for(var c=this,e="",d=c.options.contextMenuItems,g=0,k=d.length;g<k;g++)if(d[g].isSeparator)e+='<div class="mejs-contextmenu-separator"></div>';else{var j=d[g].render(c);if(j!=null)e+='<div class="mejs-contextmenu-item" data-itemindex="'+g+'" id="element-'+Math.random()*1E6+'">'+j+"</div>"}c.contextMenu.empty().append(f(e)).css({top:b,left:a}).show();c.contextMenu.find(".mejs-contextmenu-item").each(function(){var m=f(this),q=parseInt(m.data("itemindex"),10),p=c.options.contextMenuItems[q];typeof p.show!= +"undefined"&&p.show(m,c);m.click(function(){typeof p.click!="undefined"&&p.click(c);c.contextMenu.hide()})});setTimeout(function(){c.killControlsTimer("rev3")},100)}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{postrollCloseText:mejs.i18n.t("Close")});f.extend(MediaElementPlayer.prototype,{buildpostroll:function(a,b,c){var e=this.container.find('link[rel="postroll"]').attr("href");if(typeof e!=="undefined"){a.postroll=f('<div class="mejs-postroll-layer mejs-layer"><a class="mejs-postroll-close" onclick="$(this).parent().hide();return false;">'+this.options.postrollCloseText+'</a><div class="mejs-postroll-layer-content"></div></div>').prependTo(c).hide();this.media.addEventListener("ended", +function(){f.ajax({dataType:"html",url:e,success:function(d){c.find(".mejs-postroll-layer-content").html(d)}});a.postroll.show()},false)}}})})(mejs.$); diff --git a/lib/mejs/mejs-skins.css b/lib/mejs/mejs-skins.css new file mode 100755 index 00000000..5c27cf15 --- /dev/null +++ b/lib/mejs/mejs-skins.css @@ -0,0 +1,289 @@ +/* TED player */ +.mejs-container.mejs-ted { + +} +.mejs-ted .mejs-controls { + background: #eee; + height: 65px; +} + +.mejs-ted .mejs-button, +.mejs-ted .mejs-time { + position: absolute; + background: #ddd; +} +.mejs-ted .mejs-controls .mejs-time-rail .mejs-time-total { + background-color: none; + background: url(controls-ted.png) repeat-x 0 -52px; + height: 6px; +} +.mejs-ted .mejs-controls .mejs-time-rail .mejs-time-buffering { + height: 6px; +} +.mejs-ted .mejs-controls .mejs-time-rail .mejs-time-loaded { + background-color: none; + background: url(controls-ted.png) repeat-x 0 -52px; + width: 0; + height: 6px; +} +.mejs-ted .mejs-controls .mejs-time-rail .mejs-time-current { + width: 0; + height: 6px; + background-color: none; + background: url(controls-ted.png) repeat-x 0 -59px; +} +.mejs-ted .mejs-controls .mejs-time-rail .mejs-time-handle { + display: block; + margin: 0; + width: 14px; + height: 21px; + top: -7px; + border: 0; + background: url(controls-ted.png) no-repeat 0 0; +} +.mejs-ted .mejs-controls .mejs-time-rail .mejs-time-float { + display: none; +} +.mejs-ted .mejs-controls .mejs-playpause-button { + top: 29px; + left: 9px; + width: 49px; + height: 28px; +} +.mejs-ted .mejs-controls .mejs-playpause-button button { + width: 49px; + height: 28px; + background: url(controls-ted.png) no-repeat -50px -23px; + margin: 0; + padding: 0; +} +.mejs-ted .mejs-controls .mejs-pause button { + background-position: 0 -23px; +} + +.mejs-ted .mejs-controls .mejs-fullscreen-button { + top: 34px; + right: 9px; + width: 17px; + height: 15px; + background : none; +} +.mejs-ted .mejs-controls .mejs-fullscreen-button button { + width: 19px; + height: 17px; + background: transparent url(controls-ted.png) no-repeat 0 -66px; + margin: 0; + padding: 0; +} +.mejs-ted .mejs-controls .mejs-unfullscreen button { + background: transparent url(controls-ted.png) no-repeat -21px -66px; + margin: 0; + padding: 0; +} +.mejs-ted .mejs-controls .mejs-volume-button { + top: 30px; + right: 35px; + width: 24px; + height: 22px; +} +.mejs-ted .mejs-controls .mejs-mute button { + background: url(controls-ted.png) no-repeat -15px 0; + width: 24px; + height: 22px; + margin: 0; + padding: 0; +} +.mejs-ted .mejs-controls .mejs-unmute button { + background: url(controls-ted.png) no-repeat -40px 0; + width: 24px; + height: 22px; + margin: 0; + padding: 0; +} +.mejs-ted .mejs-controls .mejs-volume-button .mejs-volume-slider { + background: #fff; + border: solid 1px #aaa; + border-width: 1px 1px 0 1px; + width: 22px; + height: 65px; + top: -65px; +} +.mejs-ted .mejs-controls .mejs-volume-button .mejs-volume-total { + background: url(controls-ted.png) repeat-y -41px -66px; + left: 8px; + width: 6px; + height: 50px; +} +.mejs-ted .mejs-controls .mejs-volume-button .mejs-volume-current { + left: 8px; + width: 6px; + background: url(controls-ted.png) repeat-y -48px -66px; + height: 50px; +} + +.mejs-ted .mejs-controls .mejs-volume-button .mejs-volume-handle { + display: none; +} + +.mejs-ted .mejs-controls .mejs-time span { + color: #333; +} +.mejs-ted .mejs-controls .mejs-currenttime-container { + position: absolute; + top: 32px; + right: 100px; + border: solid 1px #999; + background: #fff; + color: #333; + padding-top: 2px; + border-radius: 3px; + color: #333; +} +.mejs-ted .mejs-controls .mejs-duration-container { + + position: absolute; + top: 32px; + right: 65px; + border: solid 1px #999; + background: #fff; + color: #333; + padding-top: 2px; + border-radius: 3px; + color: #333; +} + +.mejs-ted .mejs-controls .mejs-time button{ + color: #333; +} +.mejs-ted .mejs-controls .mejs-captions-button { + display: none; +} +/* END: TED player */ + + +/* WMP player */ +.mejs-container.mejs-wmp { + +} +.mejs-wmp .mejs-controls { + background: transparent url(controls-wmp-bg.png) center 16px no-repeat; + height: 65px; +} + +.mejs-wmp .mejs-button, +.mejs-wmp .mejs-time { + position: absolute; + background: transparent; +} +.mejs-wmp .mejs-controls .mejs-time-rail .mejs-time-total { + background-color: transparent; + border: solid 1px #ccc; + height: 3px; +} +.mejs-wmp .mejs-controls .mejs-time-rail .mejs-time-buffering { + height: 3px; +} +.mejs-wmp .mejs-controls .mejs-time-rail .mejs-time-loaded { + background-color: rgba(255,255,255,0.3); + width: 0; + height: 3px; +} +.mejs-wmp .mejs-controls .mejs-time-rail .mejs-time-current { + width: 0; + height: 1px; + background-color: #014CB6; + border: solid 1px #7FC9FA; + border-width: 1px 0; + border-color: #7FC9FA #fff #619FF2 #fff; +} +.mejs-wmp .mejs-controls .mejs-time-rail .mejs-time-handle { + display: block; + margin: 0; + width: 16px; + height: 9px; + top: -3px; + border: 0; + background: url(controls-wmp.png) no-repeat 0 -80px; +} +.mejs-wmp .mejs-controls .mejs-time-rail .mejs-time-float { + display: none; +} +.mejs-wmp .mejs-controls .mejs-playpause-button { + top: 10px; + left: 50%; + margin: 10px 0 0 -20px; + width: 40px; + height: 40px; + +} +.mejs-wmp .mejs-controls .mejs-playpause-button button { + width: 40px; + height: 40px; + background: url(controls-wmp.png) no-repeat 0 0; + margin: 0; + padding: 0; +} +.mejs-wmp .mejs-controls .mejs-pause button { + background-position: 0 -40px; +} + +.mejs-wmp .mejs-controls .mejs-currenttime-container { + position: absolute; + top: 25px; + left: 50%; + margin-left: -93px; +} +.mejs-wmp .mejs-controls .mejs-duration-container { + position: absolute; + top: 25px; + left: 50%; + margin-left: -58px; +} + + +.mejs-wmp .mejs-controls .mejs-volume-button { + top: 32px; + right: 50%; + margin-right: -55px; + width: 20px; + height: 15px; +} +.mejs-wmp .mejs-controls .mejs-volume-button button { + margin: 0; + padding: 0; + background: url(controls-wmp.png) no-repeat -42px -17px; + width: 20px; + height: 15px; +} +.mejs-wmp .mejs-controls .mejs-unmute button { + margin: 0; + padding: 0; + background: url(controls-wmp.png) no-repeat -42px 0; + width: 20px; + height: 15px; +} +.mejs-wmp .mejs-controls .mejs-volume-button .mejs-volume-slider { + background: rgba(102,102,102,0.6); +} + +.mejs-wmp .mejs-controls .mejs-fullscreen-button { + top: 32px; + right: 50%; + margin-right: -82px; + width: 15px; + height: 14px; +} +.mejs-wmp .mejs-controls .mejs-fullscreen-button button { + margin: 0; + padding: 0; + background: url(controls-wmp.png) no-repeat -63px 0; + width: 15px; + height: 14px; +} +.mejs-wmp .mejs-controls .mejs-captions-button { + display: none; +} +/* END: WMP player */ + + + diff --git a/lib/mejs/silverlightmediaelement.xap b/lib/mejs/silverlightmediaelement.xap new file mode 100755 index 0000000000000000000000000000000000000000..9d55c2e46ae51017ab91f61b05cf4f4838ab10ab GIT binary patch literal 12461 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 QCI%*kb_NCp0Rs>Z0Mb?(!2kdN literal 0 HcmV?d00001 diff --git a/modeles/audio.html b/modeles/audio.html index d97f166a..c10e1e5b 100644 --- a/modeles/audio.html +++ b/modeles/audio.html @@ -1,15 +1,52 @@ <BOUCLE_tous (DOCUMENTS types_documents) {id_document=#ID} {tout}> -<div class='spip_document_#ID_DOCUMENT spip_documents[ spip_documents_(#ENV{align})]'[ - style='[(#ENV{align}|match{^(left|right)$}|oui)float:#ENV{align};] (#ENV{align,center}|=={center}|non)[width:(#ENV{largeur}|max{120})px]']> -<object data='#URL_DOCUMENT' - type='#MIME_TYPE' - width='#ENV{largeur, #LARGEUR|?{#LARGEUR,150}}' - height='#ENV{hauteur, #HAUTEUR|?{#HAUTEUR,20}}' > - <param name='src' value='#URL_DOCUMENT' /> - [(#ID_DOCUMENT|appliquer_filtre{#MIME_TYPE})] - [(#ENV*|env_to_params)] -</object> +#SET{largeur,#ENV{largeur, #LARGEUR|?{#LARGEUR,400}}|max{120}} +<div class='spip_document_#ID_DOCUMENT spip_documents[ spip_documents_(#ENV{align})]' + style='[(#ENV{align}|match{^(left|right)$}|oui)float:#ENV{align};][width:(#GET{largeur})px]'> +<div class="audio-wrapper"[ style='width:(#GET{largeur})px;max-width:100%;']> + <audio class="mejs mejs-#ID_DOCUMENT [ mejs-(#ENV{skin})]" + data-id="[(#VAL{mejs-#ID_DOCUMENT}|concat{#ENV{skin}}|md5)]" + src="#FICHIER" + type="#MIME_TYPE" + data-mejsoptions='{"alwaysShowControls": true[,"loop":(#ENV{loop}|?{true,false})],"audioWidth":"100%"[,audioHeight:"(#ENV{hauteur})"][,startVolume:"(#ENV{volume})"]}' + controls="controls" + [autoplay="autoplay"(#ENV{autoplay}|oui)]></audio> +</div> [<div class='spip_doc_titre'><strong>(#TITRE)</strong></div>] [<div class='spip_doc_descriptif'>(#DESCRIPTIF|PtoBR)[(#NOTES|PtoBR)]</div>] +<script>/*<![CDATA[*/ + var mejsloader; + (function(){ + var mejs_counter = 0; + function mejs_init(){ + (function($) { + jQuery("audio.mejs").each(function(){ + console.log(this); + mejs_counter++; + var id = "mejs-" + (jQuery(this).attr('data-id')) + "-" + mejs_counter; + var autoplay = jQuery(this).attr('autoplay'); + jQuery(this).attr('id',id); + var options = jQuery(this).attr('data-mejsoptions'); + if (options) + eval("options="+options+";"); + else + options = {}; + new MediaElementPlayer('#'+id,jQuery.extend(options,{ + "success": function(media) { + if (autoplay) media.play(); + } + })); + }) + })(jQuery); + } + if (typeof mejsloader=="undefined"){ + mejsloader = jQuery.getScript("#CHEMIN{lib/mejs/mediaelement-and-player.min.js}",function(){ + mejs_init(); // init immediate des premiers players dans la page + jQuery(mejs_init); // init exhaustive de tous les players + onAjaxLoad(mejs_init); // init lors d'un load ajax + }); + } + })(); +/*]]>*/</script> +<link rel="stylesheet" href="#CHEMIN{lib/mejs/mediaelementplayer.min.css}" /> </div> -</BOUCLE_tous> +</BOUCLE_tous> \ No newline at end of file diff --git a/paquet.xml b/paquet.xml index 4885e478..f6e9bbb1 100644 --- a/paquet.xml +++ b/paquet.xml @@ -1,7 +1,7 @@ <paquet prefix="medias" categorie="multimedia" - version="2.8.26" + version="2.9.0" etat="stable" compatibilite="[3.0.0;3.1.*]" logo="prive/themes/spip/images/portfolio-32.png" -- GitLab