wdgtH5egf... off widget_main_window 375 550 popupImg 320 20 displayPopupMenu(); false Customize your stop //frames are the objects which act as rows that hold the route name and minutes until arrival or DUE //the first row busRow0 also contains some special labels to show status of the widget txtMessageID XML search prefGroupStop true text prefGroupStop true text prefGroupStop true text prefGroupStop true text prefGroupStop true text prefGroupStop Text Text Message ID: Text Message IDs can be found through our website prefGroupStop Location: (optional) Enter a custom location name Example: Home or Work prefGroupStop Filter routes: (optional) Enter route names separated by commas Example: 30 Green, Black Hawk, 10 Red prefGlobal slider Number of routes to display: 15 3 15 3 15 15 prefGlobal checkbox Restore default settings 0 30 refreshWidget(); 1 beep(); 5 checkConnection(); 10 refreshWidget(); include( "Resources/transitFX.js" ); include( "Resources/dateFormatter.js" ); loadWidget(); willChangePreferences(); preferencesChanged(); unload(); kFHPNG  IHDRKF csRGBgAMA a cHRMz&u0`:pQ<tEXtSoftwarePaint.NET v3.36%IDAThC[ X[mkim<ϹEE AB& (. ժbQ H !!EP*\XdD~LI $7o 3)agͷFGTʕ. /k |=(F#_me=} %cGLxׇx Xs<%RShS\bG$X0tM;5]c4wvP)ɧ}J壖k<?5 1SoF|3SƺsGyC[Sz8W*ڻ$sfLP ?c3%O;ȭ ҩ>eaerel~嗻6*9(NI`Z`)]#5`TW!!Yz831g_ {, m4 \_~BAE'"T@:Bܪ{#aihUL6g%,Xq831c19ƟJK'WSH|+"".ŵ0gŌ83}9?]m0?4a{< LU]pьDƞg\I-s̠Ygf 0vh wph2x] mGǴUVy'vM=>}qe!RI_ygu 37;ւFysxb.iRĚ.]Bitږp{o혲3Ă3 rZ2O_iՈj B%n9;_I踍M $=Tik .uݼG{dX.^QKUjiwa9Li)Gًq[:`@\t'"U&hX2*H``HbZ"ي/NaN [v*#.}j0C=4crf~AivkSRi+Rf*-W ]604db1c)Kv8gFS* \U%r  ĭ։!yZ ʺVU?yv.US]^T/" -,I}Yr)[˰]n*uhČK/SQLXu&@{XGC۫%Rߕ--=J0d<Uv=(W'WUYiUUҝ%˅:b to8m* 2(=AE+p=5 5C#( #2JJJ=M9N{`r¨z4J*k4#l>P A0nnp)̬"JYanm`˫EU+oy\-(B_S}aې>+3Cqq/1#Um^}el%eqWk ٟ vJ sEޜ( fLȕN RYdT:=%h\))~^'Ozؒ pMl-L\eά({[/ GCetH)ESi}9+v5f  Ξnj%Tw+Ն+Y(^'^@.')006V6=+ *0Zg(.n* #P-BuBrRj!|D T9 `$i*J-ihvNڤW;{L#px0µ(CI\ ]))M aCW[fδ(^K-RRj6_ 4*KM!CHw $`K?l 1JjHaRkZDҠpIuC–B l)rtH!o@XXn>BHHCd- rÆ, xKBJC+G"aL"Rc6F_z:$/lϱT%*Y5g,<BRZSaҨGC–?j=D ʩ~G)1 Muh1 |y)4m4 )uXMq)3k!gɬD3] 6~[]*[+ET=$=x &-@ {|BCRJꌯ6PuM=.i  v(?6ګ8ԙN@! 4 =$-M|HْjoeCQ5%.v y9aRqH9^?}wr!-znfTz*bkI@G=nޤ-=V(o=(/ H-fZ/E(iYU)%Mt_] =׉U^FryYUHW (OR,s@ @Ը/9< Zq6i\#sa%яqmaJ?ڠ/ـ;1ĝPAdz#$ΘdJT_ mU;Ls^ ))ˡkvIY멵BP/Ii$6YUhtg/tvҖ:5EER)?sz} UwK`f)zHAkbiF$б@"n %wȌ`;Q|J&}LRCnuL$nt}opn!;(H5}%Jͪ4ZƁYX0gO rS@BV< SU3 !JYρrCHըQuA@aMPT~ @s`L( ʻn"&y (4)펤ז5ʷpt.D3^lTU F!rX2 ^3ʼnYS0&&r9߽l0Y V[" 0csG&4 hRNԢXnS#7i;e(,q'[XT7G lp 8~VaEDQ BU| uߜ:m'~ct֮]TJcŸ4HaJ`FyuH%<}ZG]8@6t2G A H1}q)hA%#X^z)A+[y5Tzg}s "|ՙmwQhL sD=Կ4 ̪h>NȪ \ ʞylXmb' !M=7+|ZIC>!}E@'t,ѵ=ZJ ٠.21:{Ov$W!9mu_F0  u&2b]/ 8\ȬK Z:@ Xǣ3+;Q'UO&_W;5̲Do%Xb$֎8: ̤9Q9*ZuTT;B7 wj e^MN. 3R;L΃N_qj:%U"M _E0;u^TMR(zd+~ '3!؀ڡPs`x @VAi F+~S_+_t8_Ұ7W5s2oڪk|[$'3F9f{,4jY%ې+Gad·]HoҨh?yee wk5hqr*/_}P%fsMYY0C?١U\ߴ\K~txZऱhX΁Q[ #& 06#]ׄr 4KW8?q+>?:bX# /*bI$ʼPM$q ;}w0?*L9{G*vJQIhׄ ޿3rsb2^}Wg{/UL{.-Uwǟ͂5NaSyKlEC@7S3v֞`vdǥܩ51 6Cb Pؕ2K7s3TOڔr3Xq!f8F<#@鬭7d6. ͺ֙vxIPt(x7_\!eb!,ŢЫGƏƸ:N~c8M&4!anK|OdH@Vp/Zc\j۳5M`&dròEķOK Lq}? H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F}=y/\ĉURH!;ի=onݺuvuuUT*JB yߥjVU~E+Cz:*@ @w(B DO_[%A⋕> X)P,BWLO8`"yj!NŊoj @/ex>R{ ,0)8`o[ U>`s WH!|Pw 8/V|XH]W(B )(0<䐧mOZ|| gl-淐B (5Cqd _~ \^i!|06L|_LLl!ʷJ9K'?oӹhLɂa"aMG-0i{L6Vaa&k;R+9weǣ)随@O'j3HՉ5Nr}Nj3,[agW~Q=q~+ꪂ&p |adzm(g :T,eXusQ ~] QA ^ogA[WH!|>F'q߄l6Q*RVj%Lt*l6>JA?+ "4M4a8T*T*qyyj/o_?ubΌ@"(h6ȁ-9#hFz"L Fi)tvv7o(|Uvy4n޼SM/y ?AL1ۉ{>]%BZkfP-WK,~~\n9R{'qrr7nMV׎ xS1Vpr(*?4Xj:\f(uy0 t.[Gf@OƥB)@/m~b~*1*Kyʙ 7Ge]O\+3wqy.G=fm';,wWwmDM< L຋ᒾTq4i9O_-[V`ENO7WaH  ýNk0¡$ +WԶb jjo9k81=QzUey,3|u~D 3z@P@[ZvGZqYRKRx}U؇8ܴie&+ʹJp@Crp僨QǖY5PPZwa³81 Caؑs+@i=-k{xY|l]~:qV|,\h 7FHVH!,)JLNϡkjs3Xl=9kvaӧOZ.I\gf13Z5+:qT*ԔU2ap'~!T;pZM)tZN8(f9T:*>N VL*01u7e܍]gwb64Uoc/^?/2kҏOc>q? 9&bZHKzۚyQtw\0U\uּPa //{=n?sP 7Ԛff[t8R><[hZCaƁ@U<Պ$FeWC(!I[ +,%o5ހ8'ꀣPVj[a "З|(rpKp6Ai ˎ'8D&Л'ʎ .~[ 5#yj%4;B31l%4DYy#SD>EXML[Z=,5Nz]@B#>e^CP(n01K81WѳX^BQ|Ww^oy]|aVZĉ)`fqd|#}54&e;ujLLaN8`3ׁF|߇r^ :Ѕrɕ2`;jÝbpYV7l?mǎ{G7ű5t$YU`E-'bÍ |9nSA}b혴@ّXyg?Y sVVug͟WK;Q.\AFm Οq"J"@:%cɥ 2H2%Y޽pF)<>zC9}jف'N4qjXVBNaEW7Z4ZMbo5,}<6zKhhZpK%s >urPF\@Uph #}'F:>* \Zx~pي˱g']/މʨcY=[ T|hJaW{Z7}=dXV^`3n| G1<3::?s2KvS}o2vک郙?豸/Iزe3nwFGGObdxs<>w'3h4pi1=YoFPz*7P*@gyZӨ_?fp8s,>m_&?;/MPml0_s߉~ggbzqz+Wc]-JCcXAuZO` Ds6P}t0]8gbBRߎkS7c16>,Šb`I+c~+,rd8tP+oGhsC)Jf۶mǯ~h~CL+ wװ3`+v\2$ND[bDU,p$֠~3wȇ+٘ǜm d.缨51?:c#I6|8qPl4lN\3g&>&'ϢZß~?+vV8p]g&&"8?x7j\OCq8=R×n$:&zPۇ.9jcadt Cg}͟B0plP->˺KmbIC)7[9h@QDgX&E\]w݅A})LMM===nuwzUUVgTtH[tӆWR>rY ஻?16~*M*lо޲ Ű2Rr=s e^#*F-k.eˣP4;kYpV0*]3>l$wi0<2ѣGQV1rFRN){AjԘ}ܱc_j*aa:t݃XBX ҅>mk"+~s-B9Wg+hG" VlOكףcccX~=6l؀bF^%\fƳ>{'NFFF٣3۷ƦMc5^̌~g>n:u @'6nfoߎn6m?+<$QU_ɴwSann$%&2B(,fgw]^dzݽ念v{ 1* ]h? Rpf)Y}Ji dNF )rb>acbC==@Cu8nJi5a&l[k ֑AǞ={zVLLLލ$Jʪd V);~m˯eb%G|?)vҍbQSuY}Hb˳I̲%K&XqHHx=/N~KR U1zV 5 ӉK,:gdNt٭,.d' 1:zW#͋&L)V}ܥ*&SmD1@PPAX)dK0<*;DV^̜DZȈsl!KtpqlpI~NN/8Ʊ-Fa8No\UW]?۱cG&c1*kF/^%Re~B=zAaJ%^PXJs,A:XG2B 򅷃/f},CPB@缸<ҳXZ`邥lA<Ҝ,2oXOXJ$3*=ě,\jDr+l3?15UdtEg"+.VZٱ=J8rJ#U?b׊GFZh p3̞K ୷•W^.F)ּ~b a8ϱدj8{L6Ol6077ZÇcݺWaxd$NTeB+[)z bIdʕUmeK]eLmǏbdEY%i 6U-bX{ZWUX{ɸ.V9D!,`TdY\IF͈qKMdd<b%$ ؓT*Tb (:fY[M1,Fn%cAH0áPۆ$"vvW ʕ+qjl*7bG_=77. .* Rel61^o :<77_y.96 t%C i# 2x*3m8C'8-ZSBuE/ 2ͷ E%-%H=X/`rbXSdK&P,  g(l4?3tf[++sl"!BLsT'/3"K(v@c<$kMǴHt#P*L'fhh]u 7X]-]v_">楗^B<.Ljqw +FXwEۍ~_Eh$E%iXƮl9rZ͈l7E@ARrat=9IȤ]k Y Zvm0 ydau:qSƋJ2 A,Ñч5h1֙Dŵ :6B cqGI} $Ra7{WL8662 Ⱦ{<~ oDJ+ζ=} |A<#صk`eiDy0O?d(޽{q)v &˝ T`Y7l($+`vvp‴ m *`Y2xӍNp(FYn%YEgTsptbn>ޜa"H8J&CVXD$kC':j$+)d!2[RBe&cRWCwdh2&ܘ)nHx7LVJbːlNeH"spԉ[~X5'1Ix0 `6h= - ۃ|,lΝxgpmi׿\m?;;omWaڵK?;w沮Hq9H\/T~<裘[g[YD/Szc;GvlUf}&o?ЊHGVSq,8/RھHN-s09pPUET2b4vډ!$ɎYF[wkcÆ ۷_"$53tI7'g(@_eǎ5!kJq.+GV1];woMTpؤJljdZ [ !.LAAb=ڰ4 F#oMRTf؄0Җ .lTݎJ~LVRe1N'`![餃- %ˍ˙vm˗̀m77 (QO`k`cQLH&,2f c|d#8kR:Nb~q.`/ g;\s 6nܨ-;w7 ~o} yy|ضmVطoߢ!p՟7WǴ3J-$,+3Z@s%|^ǽ}+_/7:v ;=gp,+ [je@]R"E@gH݅'"y =Vq,&@4:)6'Y >ņl$qFF[F(Xm!܉X`1oEgȼ#[=LH萔dm9Tigb7F#ad  Z%݈8OMCVOdXȶXcRq7@XrK|"R@&mJs]J&f6]mrbkI䔗cZ|\%f1YMVXT(ɡ>gЎz~ʋc|F&9 2sA q9s2/T,@jh@Ya3X5`eYJ88f>iV/Y1b ^%QxŰdd `. e@T w96KcǔJ`JKPdAN0T,]l:JVL9}9ajg MXDQOcd8YV: UҌ_'PJ;rH͕+OdlR4H\T~@-?Kv2j,?' PeK_"kjAA.:UxwRo`~Sޕ]4U"xňUc1t[qte?=>\Y2f''^`&e<eJDr_ېsgomĵ,R]%+K?voXS7M蓙sC& l2@E PX9`J>TY m񙯀0w s"J2sTQY^F8`_8t K6V[VmAF USצ2gFͻLg'tt8u* $!KЉ|*`FFH}a1C3У+p¶Rmµ̎MJӵ Cv_@I v ~І&4iVSq)AHF!sD9)91eҁL .t q'HG 2HGn6A,Q#fVs%%"*\i#KEiPh5ϱ;5uU0v ("QM֛.b88m%.ߦ7R ܤoI%+,zW8 X:,{1$oMA/~n (%fZYn4^²9y;R+v>׈ɩGFٽU.mSRS6t~:s0uL,]:PCyiȋ]!,T#X8;PJi8l`MxT*ar, 0¿_˘چo,nbQGRfߠJuZj3Yʎ3-Nm 1|~/b(82o'[Vo_&\P$,[68g_8/%^Ms=/bn+3捗#m+g|E^:\89Tm.0/ȹFR!x|>"A%1^{rmDs|gڭWN3~f##ʎl7x^ j =L%<3HRZz ]FAj²e\o+A;Рi42r^^Yv׸8grlެxN/.jċífN= I."Ό>z)e% '*m-_Hf$<$ OJ6 ɤ pUK54A Zsͦb膫m" :&IXY]=XG$0^dIfXD"a~aRQ1cPe {r ˏtbLpjs1D@CũȽхPä.5禨;l3f$rښ&¶ ywIۤ$6,+\#LYƄXJǜ23ڜW!J&)>075~n]6I}VaY"]IcJ87ș+nv!L4g9zLl=gB`T9T,JGS2)^TllNp*qƨkY:sӥY?}x2PY8u"jhQB )䣢HEzAD qD4CD5 )B>./ȏ 3Okobb^.;sqjzB )#u8!V\nLLL_'1uOz[(B )Co9㻮;I"cIw0R\TRH! q]Kd\~T^U4Zc")RH!V_#՝*7"Yr[Pe)A{<ϫID\BRH!5yC(#)B/Y Vx@[=׋NJB )Sѥs[IENDB`n2fn`FPNG  IHDR&&=sBIT|d pHYs  ~tEXtCreation Time07/13/06 tEXtSoftwareMacromedia Fireworks MX*$(prVWxq0 EQ +ROZ5<%D&8Yeg@u]yDZm #`cOQ@4{"~d K쐔x|Oe իS' %@̃\,~Iv}}jX(cKo W?nR:(~i>8_5r5ubc}m|. M_$HuO\@KïBKzg;.XHmkBF)33mkTSx][wFf&q$ߒ=ه}9{S4|EQRLI%EJ2^n\+Er%huW Unvgs-~s|6R*P>bqь f6b 2>& !c:C&(6g€p Z%yYFR\`I<. ~'*IIΔ_=g\M0!H֐Y>Q-`sY ˫K re ~/v'9OW4z54 %XamŰz>2dd-F`8,tt0.,)RF g#bxNq咃*R$[f\`pgHEr@TFIʯ%cSabPF/6&ÆA&8֐WCIM=t 5GTRjZP13NhFZM} G UW(={S床^ՁMU~zFN1]8|*4EHB`cvl,3%_Uu7\2-<b@vǙ M^EHHQNkD f<+BD0Z "QIǵ\^Qm/KeF- R~L}2^mi6v+QeA``pdBKWIG9qڌq7Uupz67SK2S%- -:/3Y5{ēXY*Q7#L!e'Y1|E} IS~`WsK&mh,AA=v-|0fX{h!.K,$}fVKlnt3\mWc}Q||m5"wgg萾,zXk&E:0 ^D3|' sS""+IKsh1j*SWN&OF;IexxRRHVK]n q2F*H֖g@3 xN0I2CqP,G y 6b$v$FBRBf [DdX;SG2}6U^pã:"ntmIldY4-MjlYŌp!G/>tEjќE3]H*R:CBEd!HWv8Ş$OQ,ۃh˙G.f/`7Xìe 6fcT&t*j'q5̓9L"Hq{FPnP1;$h+/i,"-rU W>QEr| SeY}DN1z:o&b\Ţg2suZ^3Yf񎶜b}A%p9]X#o/@ժOaWKmte":A9+*£nE^;=_3=rzK.|RAOn/uu >UN 2-e@/,g#kd EjH,x2O&nUO.5xGdK[/ZT|=]IaA- zi&r9uS-@orHoCb3C{Գ.ZKKk[_[UaWg޽nnMMVN CZg67Ds^yrygw"SzjI^&a,p֟9_zT(q7E|:]$[z_IW\ ( (*5g ɔҒ߀PےG)p3+}zhfBRd]j! |dek٤O0-~ QOO4 |Zmw?FC3wdHS܈|C*9g>t^MttJmEϰxK2\8@ Cʢ3A ~ %:[l3eYI(M3@,=={fR9=|*+&xF/HQ~=_CrUrU$ % x_Bϰw=􁐼ci9٣kNOS\-ha膡n7Z͆n8膣+8$v>?VNn8솳+D)~0a膡n_3XYyװsΏrvN>ܬka膡~ ݬk8膣~ݬkعa熝v~ܬka膡~ ݬk8솳z8Yy0t C7 ^Y})[ߛ:CV\"3PmhZRLL5JlhShs%g1%>7ouF"}tE3"Zרkuͭk}Mk[:搣ﹾabfqʮI=Ģ_&5$cQ9F_o$,S`蔝݃=Ìla膡lZo+f *B~)Iejܶ)<3i|;5kکN 6ڤ5S< $.Yv@cKְEْ^kz7h3ǒjjŹ9 VFvckGʋPEԽg D HTGhhXbYйǞ3< Qk ]b .ԍ `גzKe_euAw(y|r#l 'ū2[ \6!xe\VQinR$}rUu$ˑ>S9+_̋d̒Ex.|_vdeyw{E6${8'pX YXT8Gۘwл_\۷i[]f- zGz&LŎ< !_izFo~TH8HK>ʫI*zKaXg+lz}o s1z^}^ԸX'Oq2#GYEIҖ.f&83a=DMVJ4Y&+Yoi?qvtϢ@{>bz vFhocؚ0T2\.C^$9<(e^&ܺJ[zG?e֠, 2hDu`}͋kꢭ?b]?(ЮO4ѼVܲjʥO˧ώ|5ZCΰh6c?H?״2*~AqWoSCϢg[MVfyN)yN)iSS2%WV*O* eO*}ZOo,>5?'C8żjyحuC|ca?aX8mG905-&a4h4cz0+,ЖkneW.(ePnָ |i"%2ִk{iآ#He^)DƥY6)zK [jh`b8WCu-tdYÎeZk0`b_Zb-QH D5HEUJ=/5Bd^vٔR.LIi|JjCyL-SSlZJcRj}s7ߧ7ܧbC3M9;,:>\աw^a|;w^N|ߟ4Q?QehA˷mkBSx]NA0oQTlU&f8ٌ)R(eS;U-r][2,.?H2?vä:o_JGB`ɖLRiH",R06÷D΍9aTWcNj 4.f,ND>8MY[2C/*mkBT``x}+$+nʔiSL")HdJ,DbH$T3;;W֊z]@&-Y>\yنytc u/$р_ ݈vvvͅUJ@4ZaE6HxV:F6Q>KSy.&{<}Ad:KN?2 n37,OMEN#HF`?- j!j {r+%Aqh $S@%%|9`ƅ}6.?jU 7KBC_{-׮8`Se[ lhF-*,?nt WTe\ÚMOsf^|ŝ}Em ;GFn^Kb[dAݜҥy_g:=h5=#*|3z¡F#$̣[^Y EO)ـ~Iȑ8  Ľ&C}24 L >bXXFkhFWI. -h-yU`F m<}hRvTf}|dT@OP\I' 0%U-b2֓yxd^ƣcAēwP)Xͣ KZQX!+}~CX@- >9Fwx+$@>,#Xٵ1vQ5%tᑄJ#5̖3S=R e[OjRgfM߉ZpE9%辴tc⏥R1. p8Ywh;w@^tug.XHT^?2!+tU#_:{*!nygn:@ Zgpwp٧P栢=ԇ|Utl7~䙔@0 +h%\'̊!Lu`tp/߹÷0!:lH- gA ^Z1KO_<*•G}|;n'e}*#(4hB9Th玡NŶ@%fĠpo9,vrdԬ,qcD-7= 7V >v`f1B+?`ؕ?ջ+yKV"o6TpŚUk}"bɍ7!H*3(Tu|jGyŪEe18-BYYdf[L>='4"}\x乢2EOcvxV|MڡBs%ȧԜ?U$g{075պ[=h`Iu7ޡ1t(f\%}R@uPA(@0Mz>n /:{7l6u]~m'3u/OOX-?Jk3pMNVnuS>q$t>NSgِ,yfzkf6{4!ڵ Y̳X?%ţG|j}~H)'FCy6)$.[xgߍJ<MC+QgPX 7~PT֜~5=4WaH]0/qJ!Ѧ?q?+kpB7ޠ">G}W=\&fH0e kƲ]N0Gg45*O xFD ~Pv_u9%|?vǾal*.p,S?5jPt~ۢ4$FMm3\9\fVdٿIuKk+s]h?:iĺ-^pYljkeA ֣;$3~:LH Ip#W,%ebbad{O`eE}9!mB ,ƈyAUkb]Nø ˌD_ˁj5j%u^׸ `O g9cE @=BHMlk@$ ءۖ#iBOOA\zXCR%ˆ6 _loNVL?7\iB#~_l5zq#wRf|{jSKlcԁt*=LfLQJ_Ke[LE(EU0"R4hbR |;i@fT,}X?GBP7A#Hk2dwըU¢ {3eKxŨ!tϼѝ;ZهMK+2S:¾m:ʋT,شt|H>(;:HfT+_oG=3fLál,0K@I rHmD-Kɵ""7@8bRz=Dmc CF_ŀT-DM2_=Wl@F䴦"%b||+h Un+z`Dv~_ClO$>Y Bcyg |rp]o:8khۘM埁/W^ֆE^ls wfY~(cUSM6:-=j0y-AgЀNN2g$>+y| GA]cپ6m n5v{y4y:l<5y7/CBqP!L||R۝I׷Iw|X\Zꑽܳuu}1c%(Hh!!&>{Ny! BC~{ Uz-b i>hTN./hY}_sPp͠ '.D1bԿoK'mCn0H]_ _&kdx3{G!~KdlfPej9dm5Zq[nJ;#:u|CC-y Oo!N獼7;tYW[kcd [@P {q7wΎd'>{*QVؿMAN: Zl]ѓ䯹c[}: pz$1 U(rtH):=)_]2{xlu:0'Y0v~p %Nj #o^'X՜T¯-d'dT{voƧ߇&9ގlOz|lxq!leP>ޓ 4lBޞ}yơ$9Eg/>_Y\j*SCş9Pdo/g_J7wG`fע4>*04yWĉ &oD93mϻL}5Čގv$OEA0h61s_ qhL`Iw^%M2g 0=f_v fM7R;IEJQ04Ys N[4HWR99s_;o@O7 @s21FQyhm`:o_ π7:zAE^,έx!{>!7r#{77;"{&/0WßﳠA[yυmk}ݲC,NZ M9@`CtD"<p& ^K_J}GR}/ +-khO.ЙZ"W 83;&_ EKًH|!GCVyhKj-үP~Z̚lpyN7;aACNh }p*}FZM8oMGeh ŕW&;0ܕ +$Dz sD %0x/{gݷB#cpD˵#e"K/) !Y#̓Dlg4b>EM3T (9&p~-'GɑlY[?E.`ހM Evn4s<{nҟ4z3ƿM(p4x։m |&x%Z@({~N1qy8FPjDo6SXyhr :JgǾfN&b7Ԋ{dK<ڜw#sںN}xU~Mf_ 244yYhtvш̪>Qc8{Y oߛ|u߄6W(-ߺȍ# n֚MPj] Mp# y}XK sSU>q݁(yug5s3q !{;ߓ"4dG _4>7IH4(.#B ؜cz (#}%şnMC- }|[ϸ%6Pe>4RQoZ ]r;^@UofJ_nnaL3RlP?yרfchRr$R΄"rKG,-cJ铞\ੂJq{} y+wܥMYaq$xH{h2؂H!XG-Cz+Ng÷M#Y#dnrjE!ٯ.Th";vv ׏I42'ZJFBѳ$.2n;ӹtw=xt劉f>W:m+zl<Q CsBL@G1RB9zBG/u9߱\!p"Mj} ӆr)nST&t`&YfpKOm5oI~6;6h'!aG^drE% v <R1%/LPskK\wIΌ\ӀxI7Jb(i(H<'ߟ-Ԥ)ycNŚ:V J>̛jATg /d^YOCrG:ic;CʀW4' hJ7_sQL3!Mۯ6Ky{⼲q 7x˼`[(sk349bx7|q T zըH?-m䙄3ΐ{K@lg)ݺ@ RtiMd\zK.(\rZȞqp~M`d6 /wOd`.HyEϼ zd&<ʉdd9}hR^օ=W"3D_=,!l,ŏq?E?BІ^^c] J*סIq+\bjō 0}6?t6Gл̂:?s%V/Df= ~4_ M=? uA? L`R.[ B:RZ^A)D(ϼRSJu!lꟆ&/Λ cM}[cXaDe(_Lz"oHqcTxwt]8a S!BɄL}XJ" Y[8—>;r xDv؅7Q/b .=_U$?&Y ]X>e F€"UE,hi#z@7Hzc/x27m0"f\0Ѓ>#au Mb5s$Tvb18#{c4+Ώѭ _'2Eeoߟe-2$i%  MrNMAN.9$Dayj~\l;]?B~^Ng~5/Bmu%hk^BiJʵ+w @F!M*yg_8,|:ֆmWàc 3FGu~2'uF=!"ct8/ZԸruڐGtXCg5ZbKZbb[^V ٤)E=+!KΔ\C50!xV~&,~"1>ύ^/kdCmBb4 rQ"x D!W'ܻ}QΏy"Bx|31H.Ͷ2!qb̬?M!?q9><-lW]M}m5NgO4Z{m݅o #CÇM] 2h2_AG@nn*I J<&ߟ Jk`:1Ϩ#{D+B2y\i1^_E1lAbBAnE FX0>>H1'H$K[~ l5n}*jV9/@>RL.$?m>EN$D'~.%8yFc`}{C;+@03Ft̋g; $O)O:f |"""yAБlDk#/{φ7$Ő; Žz ,^rp"~}5C|pKAyɼ"7zq%{SJ{.̥܅ؔNICC!nVzСÒ+e1f(G -/3h)I=қUbPxF?M;YͶTj^zWyr>&5zRnqO÷ My}vP/vFZ4Z#GqES:/]`<{f#y3lfT9FG Oy6uB%|@uf~3˙@}XSwx$"Q}S!T AHP!.Eev_\κ7+miy4qv0‰jdž?+o^+-Y>VH?uhR?wX[ЦKZ$'͡WF E c[`P[Џ q\_]R +zZQ>3jQÉ(cF̬BYB-yFvrQYc? PCt8|];_ svXV +P٭o)1[H>fo]HL@c9w ttW#0*-ZDx}n;,^y{Rn] *j^D;b0 7 63&7*}QxoɶR^dte3a(ԍʛ?ߚW♰\#zz>% T,ȦRkYp\V$PUઐuAXcg{ .uU69WDԶ,|=?_xb}N@;|P%})A?zR!@@P?t@Jy1P{mS̔eYZ^w^1*| ֊9L'd !P'hKh70b:lf'bYykxDm1mx*|u'8B@(čbJJc~0y7ŏz #9{khA׿Y&Y7NU6S@cFLRz}n@*&d^O?bF4k@~O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?YMw{hmkBT]BxM @J@p#$$`;6! ?5ywoM2ӝZk^-\.l-lӿg8tz e`xwﷁ05]0_݂߿`7^*mtO{Xij mkBTxx흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$j: mkBThx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 8fmkBT)Hxڍm0aaAXAtNuө~"B~v(I$Ic i#Gl6p8޾s[ouv?Ru߯+fԍ^|}m43ϭu!Z9RUY׽B,z"|~>/|RתY̞EGߔ뙷L?:fV\꺯Pv#R>cNb=^Fz=yNI}.3?3̥*Ǫ7٧ڞƵ2~zWİg#g&2yK;wʞ2vm"Ggʼd~g<[şXlk=^k͞Gy\ׇ3M^&}V3=3ڣ<_(녾v9> G@Sǿ99Gy*"QYu*lz;{-/9v=Q_s>c),k:gQ%ԝ,SFwA2vWcWqlׯ[},g7F}.2˘ڳ8DkQ XQ~q}}>+sH)X˗/]r ׅ˲ Du]DQB! }577נs0 > @<!F#a(S(ǚf͛7R0`cPJa0aBJ )%ocuuU䬉=*ˍ NiBJz Q!IDlkkؘc `wwc)9IHDpOmnn`;;;B<@BڝNg,(J 8q!;0 hRۍgyN)cooTVCZa/~Z Rl0)e%cDQNGk2:X84av< ms(vs0PVQQ*rMMM˹ZRb4m+++xl~t߲y661+^ު8K5??yCJ ֳ(@cg#cqgme4M u_KKK{_1)~Ek !cY,hyjq#R0GHaK_`]@I[V3oʿMӄ# kfgg\K'''z=xB,B#ygQ9BJ:)ܽI8N! @k;aֈ9=!/RzH$?.MÇ-!Ds!!(J ZfsXRv -,6ƞzB4Z4M4ͱ0D ecOZRJ5F V)Xے9 Y~"B`.- T6N߿Gi?~L<B&L>h"PWJ}:i{dRض ۶اWzw}-//oM $qͳ?'wVT/`E/iIENDB`- F ڍPNG  IHDRa!gAMAOX2tEXtSoftwareAdobe ImageReadyqe< IDATxb?2`,@<@,ĢQQQn|g`Q 4x2,[|ů=@G+tT>}΀Vv#(:BHb0aF0 a.? F,CGR?2 #xjzpC|:Xa*5pEz) #{B!CnpaP_@83- i]Kigt'1 @7 R ,:D]p8}o:JsZ]3'¸;LVm,4l"s7G\h?,"#a ǂ T\<Lj~QxH^£`C1 eԒ1WRF@h/@" ;f0A?;lK=c/x¸Χ$^F CP}XB, Js zeب{2ՋUU1y]--O&cGЍt߂j(e#r ?d<ZBTbs7hFi`/Fuu +x# cz㓁KPf`"^&:b\ @JBYEZBqqaCBap9 qd1b.V0%R6 YX B b䂔m81$c;"m7 F( F@kG٣.MCL! QDz&Q&B?rZBÇ"uO@WDG0ҊXЍ`¥00\ڤ`FL2|lɅo|СFX/lL?% Y*еjHKC-dqQ0 FɭhQ d,cC߿ Do.90P>T{o 9c !x]3ù!ޕL٦fu\ rI"N6 ØKXժnNs~-S{JWߜN|  00KL NepQ c/7wq 6౒Qm7k!K(Nr %x:,[ҙE9 @_Ǯ$vZ'`!Xր#o'& c♨`Q?a=0U,wq{@d,Q_/F-ZP T aPa LLL` ^5e,h!< F(r!cXx/Fޠ`cn,d (@m&b O X aP .4 lPyBn`PG>RV|(l~-Ud8 `D Fl@ok2`&@2@f̌TH6ZQ0 )CzB/gDzL y2?y? Ύ 09,qcQ( jJ>q 0|VM- `So #@E6}0RT&9( @䝢/J̈Xel£`j¸Zh[ac&N@Us#Vh!< F( &Tck #-cV y;"j^UĈ8RG1Q ό-G(I`E=~90#\$w!u 4ebi>Ty=e"h!< F( )@-1 \KAM탠du@11Pw0r+ψEo 9k(`]v&NJ#K}{q aG Q0 Fu XhE)! 0z+O55T|9'# #ҐZmBx `Q@@!їG/7XQ2& @d Ǽc0x3#\|'p掹+G(t[ȷh`q Z `PNG  IHDRa!gAMAOX2tEXtSoftwareAdobe ImageReadyqe< IDATxb?2`,@<@,ĢQQQUg`Q do2,[|ů=@G+tTƒ>}2K-A$#! Y #Պaf-Q0 F@*{%`*?T T^8 3?T) 5cdDM|0x?xC t䏟Xb fW02LȣF818hr˂G Q0 F aBE@[VB@Cl :sQY ;w0C',VWb#mDqrzʄ9LOQN5#3%Ƨ*1Q&ƢKsBگpDD \o"D".ڻ윱 DX\T] &bC;B=3r-`%wN%V k(_}RpBC-Em`+O0|jy+pݬ#;s e[;_LL[KDpK~jEvb\x(ktA*a`"ttu'8h6xis/9A%)gԮU!nDu!Af|Y cl ɶ_| Wg@ n6"5:U|;NfP!RSFBTiK. ^ޅiLgi%1w 9saHbЊL fD;%-Q0 F *>x0Z c䷄J}ԉ9X2\/In ۔G Q0 F0:\?1zX/("@qduD/5̀fD-h;#_o,G Q0 F a" ad>,@C9} LH; f`~hu1Ɓ=hkF Q0 FFF_2t;Z1De0l\$ 271&\BZL ;GW2`@>e-G(d HP2 02:FC wBƇƀoef$Fx`;V8c;ʒyK34{0Z gEWG`qam\tmg !x#5VC l=,f\=/)$p__C8"'٠AM9@5@d G߬=~@#|2ra ? 4BxQ@B?! 2 3 3 GC@dݬHW16k@< /QVF@ jĵѣ(0V00y0ʚe ܶPeֺEcX9ӇV£`*x#FQn6h'03H[.3QG(*#qAVeKh@9Yȝq!g#Γ@(gH@a£` a[hQQcՇTQ2@M̡{ f[u)#f !Q0 Fх01C-clC o` ~♂B h #B%\C*Q Ul-hWiaFh4-Q0h%­aU[(0Ȏ`JVGɅ?-0apCvpvQWTQ0 Fh!m[XΡ@- 0\dxC oAIENDB`wnwPNG  IHDRasBIT|d pHYs B4 tEXtSoftwareMacromedia Fireworks MX*$prVWx !P~t+zl;4cf{q7Ab0\8|d?-\ZkZ])w`j [yS} +Қ49q~1cM_9g7 UtHmkBF)3mkTSx][sƒɉcKoVa_TO!@(xcYJr,3Q"h LuOnl/gsc\ⴻK3ysrJy98sl-î}՛p~nvïݝ\{VkjCZiaoK8ށWDֺPzMVhm@pci}lSiIvaw[6i{/צրm7[ۢ!;h9`v {zls\dEHTK}cmM*vALGKYw; ]O;,r][\ k 9 ݃$IXlOڪĥTqf@R@ܲxG sۆVS_ & !S >ɍD& 0]+% Ow0׬0q$'vYzFBSkEMe r}EJ&ubXv8n+9ycMA]rH|_2^7ƑKWnr3!HՍʐ>Q `s   e 4T [K$8lJwd052daG|@t'hN&EkYQ 3x,?E3N"A6mQ4*8V9V-"P{S*^ML|@#d$:8|{ Th@IJc|Uցް`,u]@vǑ#!oX/Y Ђ(ЫOs8@&xfLh6WtD/\#r7]{G1H0â^d4˒)ZRwY50ZQ2}T@0m2^Mi$6gF ʄxp38ncC\'"^(9=jKL;"[KY?b8 ӧn8'p^$08"!c%ţ8m8P,Z"E[NfZ4HNHY@@wq CL ?Ex; X&Q3Rs 13s,BiG0}H\^Xt(vy`n8+iR/ -%(|8Lk/>>=#a킻BgFEF7p%S8Xz>m!&Ѿ CYq0L't|a\]A3|3S"Jߦ9CwmN93'C| 'ŎusY%F՘xRRHfK](mcC%(2ed->g@ :0$Y#E,1?v8`$v#!_jEBD ja@:Y/…OSSvDnMJ\iZ6KC<0#3!  N_ aa%]ZZFe(|Ff`$%%P*y"Q1G+;b' 5"37?nHSUzlLHTԎAk'1=uĸ="H3B(*$h+Ȍ/iUJX!"݇bU >S(G*0W˲,K]rkQON Ë}r&V tG2>[>8ʜW&Pn0\f숨MtI?p wL*o 5zZC+I|9at7Mi&miH՘ ("/Ø*SY(l|cklfwM#Q&ٝHV(^zdrVa'=sGO)F>d=\[hwCGđ:#;<^H@{ƟQL%.2f*<υZ bycr2NDN#b" 9'הzE6Ü۶g홭0̪TH)JGؘ̀1Eu9u/_1\yCڔ/@tC~ ďcK8m&Yg #k[-:ŲX Vm?qlI@پ۔WАpE%]yZtc=HO]vscmPX~"]'ư Jw^U _5g_0VI+ayYq;۞uqsuPuetmӴ^zǗe eźT]ؤkwVqrL>ZƪtІأu|(+Ga^IΚ*BisyǏc릩"#7n/;N(+eNE[L֢>8) 13(E.?N)/:-ae]S*Re^pEqh˜M{0#(Fm_+IuUJ8^#F%c8@q!Ly7Z9X2whГ2vh~ጺWj4`YJGUn5j-.HR B`^S35Y%(0Ǖ`a-^dLFI+WӄU=ZDsfV4B45Jqm~%G>Sr}j:f%Fɫ鸤)yºܢL6_RlrRDVqHKg* "Ċ5'IvH2*Z7Պ"а׎lOB'bFGpUA"KicpT͎ @&lzޭ&DZp`O*Hj5L OYuWO]5ė,{I?{ 6 ql2e͑p*&_}+<+\pjTӦl&$ETM_%+& []&}'+^ג=>.i}MfO3wdH Zjn5Г57y̙OVѣh-~hsFUMOI3_`=<6jX JR:u(o }&[ǦLYE>mᒿ"Uy`*KkM@-zAڵ>|Uբ,Wm$NMl=MQ\q:3{G#r GwǹD9y$pwkeЊC+z3Кm*V8Zq7"a AW;+vVbg@~(2tU1bhЊ!3 Cbjd9P8[qoET5fhkC+V gNR+;+v˰y㙻ZyZ1bhjhъG/Gw;+vV켎V)V Z12Zy8[ql_gwC+V ZnYd>tߛCog-A1[t@kK@Ve/)8%ֽ20'i;+yuÖpk]U׮kܺ-פmϹ#9} su*]r,K:bE񱨜w[HTnny| ;0we(V _C׆y|M9EIB.|SlL~iu=:+ \cxb.$:4D[䶏Wn>FM \i]UQL"cŵC"(m q1gm +}k!Ky9:r!o\'@B AݘRW%Zn\C9Eo9{QlsdAJ&]7w~l@9~3J?W$I.=zӮwqj\Q{;iw|CY4F>h+_tdEYw{E6H_IM8!`Q[+ob;o\AoGm voqvXgʍyC_SȾ#W7zkc9ʇ=%n`C#|H9`Q-]mҍ5ö<52lH6Gb1lHԨ1'd`IYn5$QD#&EEc iߐPa 7@ >FGW>߀#淤ac(yڌlz@iw,cFŽ< !_5<>rW]:$?`YϤ%xdhvc=AM=}02_3K͗M;vy/'Uiy"/hՈqȺf\t [z03ae&UY PY x#`2|"mK>Om, 3z2ƈjH ;b3+ {85, Xkl(quɲ?D_Dّ6H9{ɐ(^o=F?5&JiCOXڇw3K&zf]39` S򮠞SڼL eD~#Ip_J<C<\y\\g<,{ /z637wgfJh]~B;n;;8jpAs6mlnl/VN,Vbpڼ;>IXx};?Eop!h?8h&u}p^ҕ{y7v-$DbXWW@_lcfgmZ*S8og nmm~7x{/$H}o]7-ڄk(Eg ZgJJ'mi)M9Q[Voj洵Þy;_yuAmt)Iض|Pʂ64;]*BY-6ݝ3P(ńk{ay >ۥM$v_nԤ;?=j;s]g_[@LZO 6u5](YI*Ĭ/NjyZ ޲2淬HFI\zZȩM‹xAHlHi' D7m{7c73VF}u;?:Ehc÷rglO/j o[ց[NFG6ؑCJov՛0_LmkBSx]N0 *հU#7Dpդۂ$ĽdTLK1G-2{e }*JêCY AnpRodgd/ejXHS2(Uf=S]ZۗsTWjij[u=B. $X`[%77*mkBTx}+$+nʔiSL")HdJ,DbH$T3;;W֊z]@&-Y>\yنytc u/$р_ ݈vvvͅUJ@4ZaE6HxV:F6Q>KSy.&{<}Ad:KN?2 n37,OMEN#HF`?- j!j {r+%Aqh $S@%%|9`ƅ}6.?jU 7KBC_{-׮8`Se[ lhF-*,?nt WTe\ÚMOsf^|ŝ}Em ;GFn^Kb[dAݜҥy_g:=h5=#*|3z¡F#$̣[^Y EO)ـ~Iȑ8  Ľ&C}24 L >bXXFkhFWI. -h-yU`F m<}hRvTf}|dT@OP\I' 0%U-b2֓yxd^ƣcAēwP)Xͣ KZQX!+}~CX@- >9Fwx+$@>,#Xٵ1vQ5%tᑄJ#5̖3S=R e[OjRgfM߉ZpE9%辴tc⏥R1. p8Ywh;w@^tug.XHT^?2!+tU#_:{*!nygn:@ Zgpwp٧P栢=ԇ|Utl7~䙔@0 +h%\'̊!Lu`tp/߹÷0!:lH- gA ^Z1KO_<*•G}|;n'e}*#(4hB9Th玡NŶ@%fĠpo9,vrdԬ,qcD-7= 7V >v`f1B+?`ؕ?ջ+yKV"o6TpŚUk}"bɍ7!H*3(Tu|jGyŪEe18-BYYdf[L>='4"}\x乢2EOcvxV|MڡBs%ȧԜ?U$g{075պ[=h`Iu7ޡ1t(f\%}R@uPA(@0Mz>n /:{7l6u]~m'3u/OOX-?Jk3pMNVnuS>q$t>NSgِ,yfzkf6{4!ڵ Y̳X?%ţG|j}~H)'FCy6)$.[xgߍJ<MC+QgPX 7~PT֜~5=4WaH]0/qJ!Ѧ?q?+kpB7ޠ">G}W=\&fH0e kƲ]N0Gg45*O xFD ~Pv_u9%|?vǾal*.p,S?5jPt~ۢ4$FMm3\9\fVdٿIuKk+s]h?:iĺ-^pYljkeA ֣;$3~:LH Ip#W,%ebbad{O`eE}9!mB ,ƈyAUkb]Nø ˌD_ˁj5j%u^׸ `O g9cE @=BHMlk@$ ءۖ#iBOOA\zXCR%ˆ6 _loNVL?7\iB#~_l5zq#wRf|{jSKlcԁt*=LfLQJ_Ke[LE(EU0"R4hbR |;i@fT,}X?GBP7A#Hk2dwըU¢ {3eKxŨ!tϼѝ;ZهMK+2S:¾m:ʋT,شt|H>(;:HfT+_oG=3fLál,0K@I rHmD-Kɵ""7@8bRz=Dmc CF_ŀT-DM2_=Wl@F䴦"%b||+h Un+z`Dv~_ClO$>Y Bcyg |rp]o:8khۘM埁/W^ֆE^ls wfY~(cUSM6:-=j0y-AgЀNN2g$>+y| GA]cپ6m n5v{y4y:l<5y7/CBqP!L||R۝I׷Iw|X\Zꑽܳuu}1c%(Hh!!&>{Ny! BC~{ Uz-b i>hTN./hY}_sPp͠ '.D1bԿoK'mCn0H]_ _&kdx3{G!~KdlfPej9dm5Zq[nJ;#:u|CC-y Oo!N獼7;tYW[kcd [@P {q7wΎd'>{*QVؿMAN: Zl]ѓ䯹c[}: pz$1 U(rtH):=)_]2{xlu:0'Y0v~p %Nj #o^'X՜T¯-d'dT{voƧ߇&9ގlOz|lxq!leP>ޓ 4lBޞ}yơ$9Eg/>_Y\j*SCş9Pdo/g_J7wG`fע4>*04yWĉ &oD93mϻL}5Čގv$OEA0h61s_ qhL`Iw^%M2g 0=f_v fM7R;IEJQ04Ys N[4HWR99s_;o@O7 @s21FQyhm`:o_ π7:zAE^,έx!{>!7r#{77;"{&/0WßﳠA[yυmk}ݲC,NZ M9@`CtD"<p& ^K_J}GR}/ +-khO.ЙZ"W 83;&_ EKًH|!GCVyhKj-үP~Z̚lpyN7;aACNh }p*}FZM8oMGeh ŕW&;0ܕ +$Dz sD %0x/{gݷB#cpD˵#e"K/) !Y#̓Dlg4b>EM3T (9&p~-'GɑlY[?E.`ހM Evn4s<{nҟ4z3ƿM(p4x։m |&x%Z@({~N1qy8FPjDo6SXyhr :JgǾfN&b7Ԋ{dK<ڜw#sںN}xU~Mf_ 244yYhtvш̪>Qc8{Y oߛ|u߄6W(-ߺȍ# n֚MPj] Mp# y}XK sSU>q݁(yug5s3q !{;ߓ"4dG _4>7IH4(.#B ؜cz (#}%şnMC- }|[ϸ%6Pe>4RQoZ ]r;^@UofJ_nnaL3RlP?yרfchRr$R΄"rKG,-cJ铞\ੂJq{} y+wܥMYaq$xH{h2؂H!XG-Cz+Ng÷M#Y#dnrjE!ٯ.Th";vv ׏I42'ZJFBѳ$.2n;ӹtw=xt劉f>W:m+zl<Q CsBL@G1RB9zBG/u9߱\!p"Mj} ӆr)nST&t`&YfpKOm5oI~6;6h'!aG^drE% v <R1%/LPskK\wIΌ\ӀxI7Jb(i(H<'ߟ-Ԥ)ycNŚ:V J>̛jATg /d^YOCrG:ic;CʀW4' hJ7_sQL3!Mۯ6Ky{⼲q 7x˼`[(sk349bx7|q T zըH?-m䙄3ΐ{K@lg)ݺ@ RtiMd\zK.(\rZȞqp~M`d6 /wOd`.HyEϼ zd&<ʉdd9}hR^օ=W"3D_=,!l,ŏq?E?BІ^^c] J*סIq+\bjō 0}6?t6Gл̂:?s%V/Df= ~4_ M=? uA? L`R.[ B:RZ^A)D(ϼRSJu!lꟆ&/Λ cM}[cXaDe(_Lz"oHqcTxwt]8a S!BɄL}XJ" Y[8—>;r xDv؅7Q/b .=_U$?&Y ]X>e F€"UE,hi#z@7Hzc/x27m0"f\0Ѓ>#au Mb5s$Tvb18#{c4+Ώѭ _'2Eeoߟe-2$i%  MrNMAN.9$Dayj~\l;]?B~^Ng~5/Bmu%hk^BiJʵ+w @F!M*yg_8,|:ֆmWàc 3FGu~2'uF=!"ct8/ZԸruڐGtXCg5ZbKZbb[^V ٤)E=+!KΔ\C50!xV~&,~"1>ύ^/kdCmBb4 rQ"x D!W'ܻ}QΏy"Bx|31H.Ͷ2!qb̬?M!?q9><-lW]M}m5NgO4Z{m݅o #CÇM] 2h2_AG@nn*I J<&ߟ Jk`:1Ϩ#{D+B2y\i1^_E1lAbBAnE FX0>>H1'H$K[~ l5n}*jV9/@>RL.$?m>EN$D'~.%8yFc`}{C;+@03Ft̋g; $O)O:f |"""yAБlDk#/{φ7$Ő; Žz ,^rp"~}5C|pKAyɼ"7zq%{SJ{.̥܅ؔNICC!nVzСÒ+e1f(G -/3h)I=қUbPxF?M;YͶTj^zWyr>&5zRnqO÷ My}vP/vFZ4Z#GqES:/]`<{f#y3lfT9FG Oy6uB%|@uf~3˙@}XSwx$"Q}S!T AHP!.Eev_\κ7+miy4qv0‰jdž?+o^+-Y>VH?uhR?wX[ЦKZ$'͡WF E c[`P[Џ q\_]R +zZQ>3jQÉ(cF̬BYB-yFvrQYc? PCt8|];_ svXV +P٭o)1[H>fo]HL@c9w ttW#0*-ZDx}n;,^y{Rn] *j^D;b0 7 63&7*}QxoɶR^dte3a(ԍʛ?ߚW♰\#zz>% T,ȦRkYp\V$PUઐuAXcg{ .uU69WDԶ,|=?_xb}N@;|P%})A?zR!@@P?t@Jy1P{mS̔eYZ^w^1*| ֊9L'd !P'hKh70b:lf'bYykxDm1mx*|u'8B@(čbJJc~0y7ŏz #9{khA׿Y&Y7NU6S@cFLRz}n@*&d^O?bF4k@~O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?YMw">mkBT]Hxѡ 0djb`bd;]^0:\|ҹ_F{lՍZ٪ 9U7cdn${V݈oen?<mkBT_xɎ@`<ĴiC*:B+)ugI\^_/!a˗߄px~n 6l6Zbg^%E&d=e\biL&ؙWIOf/0`0^ؙW*hTȻnvj4MyۭYt:?u$I^ZGg23o>m6o7~d8[ޣ^w$vUp}=I&k;γyifgA~v9+2/1mkBT] xNdUj/Bʶt!BIŭɭ 9qbb3}s>/38߮z)[2>!KEIR”tgg hˆ;=}e;uϛ]8R|}<3Pïޞmi}wCwttԷ㮜`pWoB59Ғջ-ׯngWW79 Sg)3m/sssV_y͕RRjhkkF&k>44ճj+nuur{|KXlgGj-Mfp<;v?Vgέ6d2xF BL Swp955J7qʕld7戲hNvìrتϰ ,tπ%e~.29= F0w BthdVk5of=|iÿ|5AMn#O?d@sۉ?9VuNLah Br~h'''{qq~>;.zX$i<;;kfN0?x?bdI^Y:6̮9yxeLӜG\u቞^Yʁ]`Jb^ #턺h܏@u.|ff3b<ǭ2fAȁveAggl6mkBT^j@x֡ 1Ђ1+`kȥ 8s)S[s~;`N ٶ'R5&ړh݉v#ڕhmawNmkBTXHxKUw붶UFp1"[j__AfX~ eň`Տڷa_?{s;nmq{^xp>˽yz}r׻`=XOO۳g۽uuuv.700p(H13}1 \\em׮] Ν;]kkknnvMMMŮϒ1ˤ7>f?uOIwww <}4]/iv]}}J>4nٲem7IYkVEAڑ#G`;88h}igsܹs]p!ZuN:_[[6===\L9wIwƍ GgϺ3gθ{Iw֭N%W*++ Rn۶3տ X|a>6wc8GvAwʕ<44@[uOmORAߠ 7+..v333(.^>Dmݺ@'TMfɛ?YX׃ԂW8p]|ٍ*Sm3V>5w 3i%6NTjg6??t]w5wҥ`_ӧO(+f^'&&Pĉo[esVǏEŶ٫UUUaÆQ?2#g1K2?_-{7nԚ4H_u?ddnWb4-~ͧg>ei9x矍~W'6^}!}ms5~܏{(H5ʔe]ak0w5}~K$/}5 m?fuaI_3ݙB=ۙ>?k}~'~B_f<<7bԿy2zxkW3{>1=> D_DI̽Smgz^{y5x-:s5^ub%}zڼi:A;.}7Ϸ]pOrϯڼsP0kԧw|k|WEr}A<OȔyd"K˭݇VDr_'WI,ﶞMμO rEލVmkBTx흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$jBR mkBTנx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 $fmkBTPxڍm0aaAXAtNuө~"B~v(I$Ic i#Gl6p8޾s[ouv?Ru߯+fԍ^|}m43ϭu!Z9RUY׽B,z"|~>/|RתY̞EGߔ뙷L?:fV\꺯Pv#R>cNb=^Fz=yNI}.3?3̥*Ǫ7٧ڞƵ2~zWİg#g&2yK;wʞ2vm"Ggʼd~g<[şXlk=^k͞Gy\ׇ3M^&}V3=3ڣ<_(녾v9> G@Sǿ99Gy*"QYu*lz;{-/9v=Q_s>c),k:gQ%ԝ,SFwA2vWcWqlׯ[},g7F}.2˘ڳMI ~R( \}_q<$5PJJUYduO2cys$I1c JADQ{31F04`0"bIXCU źph( 8;{+5֛9yv;t[ZD^R0 b^ Uxvuɷ]֊pӑ y$ᩄߓI|dgθ@/}ɳ"aA(/[?W?y KRJvww5$I6Rj;RP9Ke _Blgm[*EzC(Jx1({D'vݧVj4 ueV AA$o'htt:GiZ+õ9k.0T0D4R7`Hd7% 8!j VClM}o:"#˗ ݘs-k'(=f:XGdv2wALa{y |G+ *J.xN |$ "_A6g~E<&KɹT0T,Gv߬s Ů")+2a(I=5xpu_'i8]D!'bRaaׁE‚ l"e.K%% SC^~'* [AMBv 2$<ࢌݺW2~|+K87YI  SY*^JXAXNAX "aAHX=?s@-N=bIENDB` PNG  IHDR pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATx;N0?U;PS!2pz`B`%{UR*@iys0 {(1Ls=?ލG]ot7*ҶV,}2[ubTg1n;MmjC[ 2[lJ@`;TzKvO/!8USZz>%mnZ)}(%|==ET.^ςXw"d\no {d?Erw5IENDB`11~// =================================================================== // Author: Matt Kruse // WWW: http://www.mattkruse.com/ // // NOTICE: You may use this code for any purpose, commercial or // private, without any further permission from the author. You may // remove this notice from your final code if you wish, however it is // appreciated by the author if at least my web site address is kept. // // You may *NOT* re-distribute this code in any way except through its // use. That means, you can include it in your product, or your web // site, or any other form where the code is actually being used. You // may not put the plain javascript up on your site for download or // include it in your javascript libraries for download. // If you wish to share this code with others, please just point them // to the URL instead. // Please DO NOT link directly to my .js files from your site. Copy // the files to your server and use them there. Thank you. // =================================================================== // HISTORY // ------------------------------------------------------------------ // May 17, 2003: Fixed bug in parseDate() for dates <1970 // March 11, 2003: Added parseDate() function // March 11, 2003: Added "NNN" formatting option. Doesn't match up // perfectly with SimpleDateFormat formats, but // backwards-compatability was required. // ------------------------------------------------------------------ // These functions use the same 'format' strings as the // java.text.SimpleDateFormat class, with minor exceptions. // The format string consists of the following abbreviations: // // Field | Full Form | Short Form // -------------+--------------------+----------------------- // Year | yyyy (4 digits) | yy (2 digits), y (2 or 4 digits) // Month | MMM (name or abbr.)| MM (2 digits), M (1 or 2 digits) // | NNN (abbr.) | // Day of Month | dd (2 digits) | d (1 or 2 digits) // Day of Week | EE (name) | E (abbr) // Hour (1-12) | hh (2 digits) | h (1 or 2 digits) // Hour (0-23) | HH (2 digits) | H (1 or 2 digits) // Hour (0-11) | KK (2 digits) | K (1 or 2 digits) // Hour (1-24) | kk (2 digits) | k (1 or 2 digits) // Minute | mm (2 digits) | m (1 or 2 digits) // Second | ss (2 digits) | s (1 or 2 digits) // AM/PM | a | // // NOTE THE DIFFERENCE BETWEEN MM and mm! Month=MM, not mm! // Examples: // "MMM d, y" matches: January 01, 2000 // Dec 1, 1900 // Nov 20, 00 // "M/d/yy" matches: 01/20/00 // 9/2/00 // "MMM dd, yyyy hh:mm:ssa" matches: "January 01, 2000 12:30:45AM" // ------------------------------------------------------------------ var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat'); function LZ(x) {return(x<0||x>9?"":"0")+x} // ------------------------------------------------------------------ // isDate ( date_string, format_string ) // Returns true if date string matches format of format string and // is a valid date. Else returns false. // It is recommended that you trim whitespace around the value before // passing it to this function, as whitespace is NOT ignored! // ------------------------------------------------------------------ function isDate(val,format) { var date=getDateFromFormat(val,format); if (date==0) { return false; } return true; } // ------------------------------------------------------------------- // compareDates(date1,date1format,date2,date2format) // Compare two date strings to see which is greater. // Returns: // 1 if date1 is greater than date2 // 0 if date2 is greater than date1 of if they are the same // -1 if either of the dates is in an invalid format // ------------------------------------------------------------------- function compareDates(date1,dateformat1,date2,dateformat2) { var d1=getDateFromFormat(date1,dateformat1); var d2=getDateFromFormat(date2,dateformat2); if (d1==0 || d2==0) { return -1; } else if (d1 > d2) { return 1; } return 0; } // ------------------------------------------------------------------ // formatDate (date_object, format) // Returns a date in the output format specified. // The format string uses the same abbreviations as in getDateFromFormat() // ------------------------------------------------------------------ function formatDate(date,format) { format=format+""; var result=""; var i_format=0; var c=""; var token=""; var y=date.getYear()+""; var M=date.getMonth()+1; var d=date.getDate(); var E=date.getDay(); var H=date.getHours(); var m=date.getMinutes(); var s=date.getSeconds(); var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k; // Convert real date parts into formatted versions var value=new Object(); if (y.length < 4) {y=""+(y-0+1900);} value["y"]=""+y; value["yyyy"]=y; value["yy"]=y.substring(2,4); value["M"]=M; value["MM"]=LZ(M); value["MMM"]=MONTH_NAMES[M-1]; value["NNN"]=MONTH_NAMES[M+11]; value["d"]=d; value["dd"]=LZ(d); value["E"]=DAY_NAMES[E+7]; value["EE"]=DAY_NAMES[E]; value["H"]=H; value["HH"]=LZ(H); if (H==0){value["h"]=12;} else if (H>12){value["h"]=H-12;} else {value["h"]=H;} value["hh"]=LZ(value["h"]); if (H>11){value["K"]=H-12;} else {value["K"]=H;} value["k"]=H+1; value["KK"]=LZ(value["K"]); value["kk"]=LZ(value["k"]); if (H > 11) { value["a"]="PM"; } else { value["a"]="AM"; } value["m"]=m; value["mm"]=LZ(m); value["s"]=s; value["ss"]=LZ(s); while (i_format < format.length) { c=format.charAt(i_format); token=""; while ((format.charAt(i_format)==c) && (i_format < format.length)) { token += format.charAt(i_format++); } if (value[token] != null) { result=result + value[token]; } else { result=result + token; } } return result; } // ------------------------------------------------------------------ // Utility functions for parsing in getDateFromFormat() // ------------------------------------------------------------------ function _isInteger(val) { var digits="1234567890"; for (var i=0; i < val.length; i++) { if (digits.indexOf(val.charAt(i))==-1) { return false; } } return true; } function _getInt(str,i,minlength,maxlength) { for (var x=maxlength; x>=minlength; x--) { var token=str.substring(i,i+x); if (token.length < minlength) { return null; } if (_isInteger(token)) { return token; } } return null; } // ------------------------------------------------------------------ // getDateFromFormat( date_string , format_string ) // // This function takes a date string and a format string. It matches // If the date string matches the format string, it returns the // getTime() of the date. If it does not match, it returns 0. // ------------------------------------------------------------------ function getDateFromFormat(val,format) { val=val+""; format=format+""; var i_val=0; var i_format=0; var c=""; var token=""; var token2=""; var x,y; var now=new Date(); var year=now.getYear(); var month=now.getMonth()+1; var date=1; var hh=now.getHours(); var mm=now.getMinutes(); var ss=now.getSeconds(); var ampm=""; while (i_format < format.length) { // Get next token from format string c=format.charAt(i_format); token=""; while ((format.charAt(i_format)==c) && (i_format < format.length)) { token += format.charAt(i_format++); } // Extract contents of value based on format token if (token=="yyyy" || token=="yy" || token=="y") { if (token=="yyyy") { x=4;y=4; } if (token=="yy") { x=2;y=2; } if (token=="y") { x=2;y=4; } year=_getInt(val,i_val,x,y); if (year==null) { return 0; } i_val += year.length; if (year.length==2) { if (year > 70) { year=1900+(year-0); } else { year=2000+(year-0); } } } else if (token=="MMM"||token=="NNN"){ month=0; for (var i=0; i11)) { month=i+1; if (month>12) { month -= 12; } i_val += month_name.length; break; } } } if ((month < 1)||(month>12)){return 0;} } else if (token=="EE"||token=="E"){ for (var i=0; i12)){return 0;} i_val+=month.length;} else if (token=="dd"||token=="d") { date=_getInt(val,i_val,token.length,2); if(date==null||(date<1)||(date>31)){return 0;} i_val+=date.length;} else if (token=="hh"||token=="h") { hh=_getInt(val,i_val,token.length,2); if(hh==null||(hh<1)||(hh>12)){return 0;} i_val+=hh.length;} else if (token=="HH"||token=="H") { hh=_getInt(val,i_val,token.length,2); if(hh==null||(hh<0)||(hh>23)){return 0;} i_val+=hh.length;} else if (token=="KK"||token=="K") { hh=_getInt(val,i_val,token.length,2); if(hh==null||(hh<0)||(hh>11)){return 0;} i_val+=hh.length;} else if (token=="kk"||token=="k") { hh=_getInt(val,i_val,token.length,2); if(hh==null||(hh<1)||(hh>24)){return 0;} i_val+=hh.length;hh--;} else if (token=="mm"||token=="m") { mm=_getInt(val,i_val,token.length,2); if(mm==null||(mm<0)||(mm>59)){return 0;} i_val+=mm.length;} else if (token=="ss"||token=="s") { ss=_getInt(val,i_val,token.length,2); if(ss==null||(ss<0)||(ss>59)){return 0;} i_val+=ss.length;} else if (token=="a") { if (val.substring(i_val,i_val+2).toLowerCase()=="am") {ampm="AM";} else if (val.substring(i_val,i_val+2).toLowerCase()=="pm") {ampm="PM";} else {return 0;} i_val+=2;} else { if (val.substring(i_val,i_val+token.length)!=token) {return 0;} else {i_val+=token.length;} } } // If there are any trailing characters left in the value, it doesn't match if (i_val != val.length) { return 0; } // Is date valid for month? if (month==2) { // Check for leap year if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year if (date > 29){ return 0; } } else { if (date > 28) { return 0; } } } if ((month==4)||(month==6)||(month==9)||(month==11)) { if (date > 30) { return 0; } } // Correct hours value if (hh<12 && ampm=="PM") { hh=hh-0+12; } else if (hh>11 && ampm=="AM") { hh-=12; } var newdate=new Date(year,month-1,date,hh,mm,ss); return newdate.getTime(); } // ------------------------------------------------------------------ // parseDate( date_string [, prefer_euro_format] ) // // This function takes a date string and tries to match it to a // number of possible date formats to get the value. It will try to // match against the following international formats, in this order: // y-M-d MMM d, y MMM d,y y-MMM-d d-MMM-y MMM d // M/d/y M-d-y M.d.y MMM-d M/d M-d // d/M/y d-M-y d.M.y d-MMM d/M d-M // A second argument may be passed to instruct the method to search // for formats like d/M/y (european format) before M/d/y (American). // Returns a Date object or null if no patterns match. // ------------------------------------------------------------------ function parseDate(val) { var preferEuro=(arguments.length==2)?arguments[1]:false; generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d'); monthFirst=new Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d'); dateFirst =new Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M'); var checkList=new Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'monthFirst':'dateFirst'); var d=null; for (var i=0; iGvD? ߔV`hp;q8_b=mhv>(hPJ9KhӧTڨM^@@>Ĝ"imK`{\H{eY 8#l i(6=1,uVQiuWJ=5g͋,EFIБT ,e΂,V+ۮGhPo_7lAh4OvA_oyI4)$DeT>@N - b6-Үye.X9?k4J ^Fin[{+s KfIm۬ZxS q.8n4Ts=պgՁ99 )ƙwhӦ,]mz,B!,)s/.rhط0_i):6vSࢤŗTщZTM[YVڠ(h^ݳ+`<+x/EB0sm -O v-'d7iT~0)K͇5q3.9Sf&6%L)XjPƬkeFTsۙ}[oD:{ϗ3iK {l۸ ]RUSI[k8CAН^my)2^.FmN|ζI\##3Vꌑ٤n)KO۴K 9cX# jK!&qHg 0'B F[2cVREl)Z &71="r-Qw8h5?'܊-.{r/ƃ }[O.ֳVØ=jkAlx/hMS *VZ Wbymn^mVWJmUFe^rcHl۫ la҆a ɽ5+su>*Bd#g# #a\zư+uu}'j`d@x;>_8enkuI{;xH#k˝a>|Gf\/,Ƚ>DPnC?rWϿs9H-g\~~nqs> ׋By7Mp MU!]Q⋟aAG_$8.qڲ3vK}ng{O=n>gs`W !B!B!B!B.LIHmkBF)3mkTSx][sƒı%vleEU[[o(R)([΋ kYJ/}{fp @Dz(@ ._w3_ng{w:3GәV&[v>6o2{7s9Bs wy׻kwgp=6j﴾6.`oeZ.~֩7q>#yǙ*Ƽ>NIy٣9i`mv :I}ش9bt֬[8`w8!~lsgTjϿ9l5!x!.AK gŮfm1',r2 V;c~8|l .`5>igvMRC $ ` Ųy(a2@x1p cMzjwL5óهWdJ=h/rHUyOeELT<3/ ߙ1.Эbz`wЭY4{G"9y^`-?? I[ԾP܆BpDe!y 10Dt7Xg)Ӂ1UfȘ4ꗑE <9SBޏ}_8>!ez]Ĩdf@CUC·xiɐH;O}̀h ɒ̂ (!;qt\-! HSّ60a;KQ =*b^#HZg<9Ǚʋ27I|H.""%Q@91497_jkQ.4ɸ GQ"("Ԕ6a3;<;N5Oy@/(VQy4eUMtbdT1pH(w Gu[P=ZzFCÚ IɅR"Z:s*i)8(`}qAyvCJ -Zt*,%`5,ՙ EX̴BWf12XGʾ$IOB˻"%8.(}Z$8>]_ϲD$K)MU $'c\y  Ktѕ̜myXlwbof;$4o׊V@??Բ>심M식b3a/B(ՔGMϸ{+WꌓgSbTb%>Jl˵?+ |?S[*(6$GaA< Z)k\*HzC &?I8^LMRMEFX`*O7/vVLe^G[L&",h/;m#amF>U"ȧ}żK.@? gٴ-M oM]UdwUR88oA'F9&?9ؔLyZ92oh rMݯJ}1,ZmA&_[Kr!HVUF 0{(Mn * ml5ל5 oPY{w">ڝC+o-xAy+d& J3F@kS/`k 7ɷ)m2< {ڎJ^3"[Whk5Z#a$dmϹ㻜>5X>-W2L"Y3QLt+S`U߁mx”,d蒡&.kв >Ʃs4 {DO6UZf6Jf.+`3'UsqsV5>fbQ3'\{)yuFfycG~m0+oFC-dٹ-7'9&U}~tsz4ZZaNՔ4_jq `;q&|k5zѫQ:]7,t~l@;r=s{Me. +J$x-z %fY4F9xDHc2Z;ǠT{@#iϕX,~f QXgy,y^zE#:׿#bm/'s4i~\/䗊b_+?yO9~ß]FQ,f =5"QQ> qwFcwC"8#ŕh~W{hle38 V%V'T#ǠOTY@IGn'8d#heE.34oJy(Z02V >*ȋh]?j]gMi^trrq+k҇𯔃ZCN'7ڃh1=uw*vI?p&leTI1!l1M`<: ?b3+͘=Lwt0 #ʆO\~p6ax<]TSu hI0gA+-3w*EO\{;Yk7y߼Z{By ^g8/Ib>ygКfCp:3`:3M6k|pں'>Q Mt:k}8t9ɭ{cbN;K|;=oj*ϑ76[u']|#OFs<OkSh GzDW#4llarcﱍC]iƁNO6@Ϊucv9CN4Ρ)!"GO=>]Wܴ٦1z?8+kMBhKi}zHO؇#v%nN;9:ng Fm ѥ l;x>luN`GmGvxԆQނY(̈́tjxKj3@v{z{xWؼ-` `,d5wHЇn*=rm=g6X^4Y=~K>Uj}˶̶ 6~M_a?_ノbcg8Gݳ@cmkBSx]N0ZT [5<"x WM-ŽftX*9AN 7u21(Uimc ]p-&e>:َ؇=ً ]/O )hJKYڵs}9/DM}1(Q'>s,$ 97"DF[ y.*mkBTx}+$+nʔiSL")HdJ,DbH$T3;;W֊z]@&-Y>\yنytc u/$р_ ݈vvvͅUJ@4ZaE6HxV:F6Q>KSy.&{<}Ad:KN?2 n37,OMEN#HF`?- j!j {r+%Aqh $S@%%|9`ƅ}6.?jU 7KBC_{-׮8`Se[ lhF-*,?nt WTe\ÚMOsf^|ŝ}Em ;GFn^Kb[dAݜҥy_g:=h5=#*|3z¡F#$̣[^Y EO)ـ~Iȑ8  Ľ&C}24 L >bXXFkhFWI. -h-yU`F m<}hRvTf}|dT@OP\I' 0%U-b2֓yxd^ƣcAēwP)Xͣ KZQX!+}~CX@- >9Fwx+$@>,#Xٵ1vQ5%tᑄJ#5̖3S=R e[OjRgfM߉ZpE9%辴tc⏥R1. p8Ywh;w@^tug.XHT^?2!+tU#_:{*!nygn:@ Zgpwp٧P栢=ԇ|Utl7~䙔@0 +h%\'̊!Lu`tp/߹÷0!:lH- gA ^Z1KO_<*•G}|;n'e}*#(4hB9Th玡NŶ@%fĠpo9,vrdԬ,qcD-7= 7V >v`f1B+?`ؕ?ջ+yKV"o6TpŚUk}"bɍ7!H*3(Tu|jGyŪEe18-BYYdf[L>='4"}\x乢2EOcvxV|MڡBs%ȧԜ?U$g{075պ[=h`Iu7ޡ1t(f\%}R@uPA(@0Mz>n /:{7l6u]~m'3u/OOX-?Jk3pMNVnuS>q$t>NSgِ,yfzkf6{4!ڵ Y̳X?%ţG|j}~H)'FCy6)$.[xgߍJ<MC+QgPX 7~PT֜~5=4WaH]0/qJ!Ѧ?q?+kpB7ޠ">G}W=\&fH0e kƲ]N0Gg45*O xFD ~Pv_u9%|?vǾal*.p,S?5jPt~ۢ4$FMm3\9\fVdٿIuKk+s]h?:iĺ-^pYljkeA ֣;$3~:LH Ip#W,%ebbad{O`eE}9!mB ,ƈyAUkb]Nø ˌD_ˁj5j%u^׸ `O g9cE @=BHMlk@$ ءۖ#iBOOA\zXCR%ˆ6 _loNVL?7\iB#~_l5zq#wRf|{jSKlcԁt*=LfLQJ_Ke[LE(EU0"R4hbR |;i@fT,}X?GBP7A#Hk2dwըU¢ {3eKxŨ!tϼѝ;ZهMK+2S:¾m:ʋT,شt|H>(;:HfT+_oG=3fLál,0K@I rHmD-Kɵ""7@8bRz=Dmc CF_ŀT-DM2_=Wl@F䴦"%b||+h Un+z`Dv~_ClO$>Y Bcyg |rp]o:8khۘM埁/W^ֆE^ls wfY~(cUSM6:-=j0y-AgЀNN2g$>+y| GA]cپ6m n5v{y4y:l<5y7/CBqP!L||R۝I׷Iw|X\Zꑽܳuu}1c%(Hh!!&>{Ny! BC~{ Uz-b i>hTN./hY}_sPp͠ '.D1bԿoK'mCn0H]_ _&kdx3{G!~KdlfPej9dm5Zq[nJ;#:u|CC-y Oo!N獼7;tYW[kcd [@P {q7wΎd'>{*QVؿMAN: Zl]ѓ䯹c[}: pz$1 U(rtH):=)_]2{xlu:0'Y0v~p %Nj #o^'X՜T¯-d'dT{voƧ߇&9ގlOz|lxq!leP>ޓ 4lBޞ}yơ$9Eg/>_Y\j*SCş9Pdo/g_J7wG`fע4>*04yWĉ &oD93mϻL}5Čގv$OEA0h61s_ qhL`Iw^%M2g 0=f_v fM7R;IEJQ04Ys N[4HWR99s_;o@O7 @s21FQyhm`:o_ π7:zAE^,έx!{>!7r#{77;"{&/0WßﳠA[yυmk}ݲC,NZ M9@`CtD"<p& ^K_J}GR}/ +-khO.ЙZ"W 83;&_ EKًH|!GCVyhKj-үP~Z̚lpyN7;aACNh }p*}FZM8oMGeh ŕW&;0ܕ +$Dz sD %0x/{gݷB#cpD˵#e"K/) !Y#̓Dlg4b>EM3T (9&p~-'GɑlY[?E.`ހM Evn4s<{nҟ4z3ƿM(p4x։m |&x%Z@({~N1qy8FPjDo6SXyhr :JgǾfN&b7Ԋ{dK<ڜw#sںN}xU~Mf_ 244yYhtvш̪>Qc8{Y oߛ|u߄6W(-ߺȍ# n֚MPj] Mp# y}XK sSU>q݁(yug5s3q !{;ߓ"4dG _4>7IH4(.#B ؜cz (#}%şnMC- }|[ϸ%6Pe>4RQoZ ]r;^@UofJ_nnaL3RlP?yרfchRr$R΄"rKG,-cJ铞\ੂJq{} y+wܥMYaq$xH{h2؂H!XG-Cz+Ng÷M#Y#dnrjE!ٯ.Th";vv ׏I42'ZJFBѳ$.2n;ӹtw=xt劉f>W:m+zl<Q CsBL@G1RB9zBG/u9߱\!p"Mj} ӆr)nST&t`&YfpKOm5oI~6;6h'!aG^drE% v <R1%/LPskK\wIΌ\ӀxI7Jb(i(H<'ߟ-Ԥ)ycNŚ:V J>̛jATg /d^YOCrG:ic;CʀW4' hJ7_sQL3!Mۯ6Ky{⼲q 7x˼`[(sk349bx7|q T zըH?-m䙄3ΐ{K@lg)ݺ@ RtiMd\zK.(\rZȞqp~M`d6 /wOd`.HyEϼ zd&<ʉdd9}hR^օ=W"3D_=,!l,ŏq?E?BІ^^c] J*סIq+\bjō 0}6?t6Gл̂:?s%V/Df= ~4_ M=? uA? L`R.[ B:RZ^A)D(ϼRSJu!lꟆ&/Λ cM}[cXaDe(_Lz"oHqcTxwt]8a S!BɄL}XJ" Y[8—>;r xDv؅7Q/b .=_U$?&Y ]X>e F€"UE,hi#z@7Hzc/x27m0"f\0Ѓ>#au Mb5s$Tvb18#{c4+Ώѭ _'2Eeoߟe-2$i%  MrNMAN.9$Dayj~\l;]?B~^Ng~5/Bmu%hk^BiJʵ+w @F!M*yg_8,|:ֆmWàc 3FGu~2'uF=!"ct8/ZԸruڐGtXCg5ZbKZbb[^V ٤)E=+!KΔ\C50!xV~&,~"1>ύ^/kdCmBb4 rQ"x D!W'ܻ}QΏy"Bx|31H.Ͷ2!qb̬?M!?q9><-lW]M}m5NgO4Z{m݅o #CÇM] 2h2_AG@nn*I J<&ߟ Jk`:1Ϩ#{D+B2y\i1^_E1lAbBAnE FX0>>H1'H$K[~ l5n}*jV9/@>RL.$?m>EN$D'~.%8yFc`}{C;+@03Ft̋g; $O)O:f |"""yAБlDk#/{φ7$Ő; Žz ,^rp"~}5C|pKAyɼ"7zq%{SJ{.̥܅ؔNICC!nVzСÒ+e1f(G -/3h)I=қUbPxF?M;YͶTj^zWyr>&5zRnqO÷ My}vP/vFZ4Z#GqES:/]`<{f#y3lfT9FG Oy6uB%|@uf~3˙@}XSwx$"Q}S!T AHP!.Eev_\κ7+miy4qv0‰jdž?+o^+-Y>VH?uhR?wX[ЦKZ$'͡WF E c[`P[Џ q\_]R +zZQ>3jQÉ(cF̬BYB-yFvrQYc? PCt8|];_ svXV +P٭o)1[H>fo]HL@c9w ttW#0*-ZDx}n;,^y{Rn] *j^D;b0 7 63&7*}QxoɶR^dte3a(ԍʛ?ߚW♰\#zz>% T,ȦRkYp\V$PUઐuAXcg{ .uU69WDԶ,|=?_xb}N@;|P%})A?zR!@@P?t@Jy1P{mS̔eYZ^w^1*| ֊9L'd !P'hKh70b:lf'bYykxDm1mx*|u'8B@(čbJJc~0y7ŏz #9{khA׿Y&Y7NU6S@cFLRz}n@*&d^O?bF4k@~O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?YMwq imkBTlxڿJ@񾲣o NApr)8&g~%wlR>ÇR;]JiP!}|Iok?lM=>}6a 1r˹cw0EE8n9lMm9?Wm+A7[yV7O7[ou^cPjxINY?Կ-^×sy\yg9lƩgp,?pMmkBT`x흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$jPd mkBTPx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 9fmkBTxڍm0aaAXAtNuө~"B~v(I$Ic i#Gl6p8޾s[ouv?Ru߯+fԍ^|}m43ϭu!Z9RUY׽B,z"|~>/|RתY̞EGߔ뙷L?:fV\꺯Pv#R>cNb=^Fz=yNI}.3?3̥*Ǫ7٧ڞƵ2~zWİg#g&2yK;wʞ2vm"Ggʼd~g<[şXlk=^k͞Gy\ׇ3M^&}V3=3ڣ<_(녾v9> G@Sǿ99Gy*"QYu*lz;{-/9v=Q_s>c),k:gQ%ԝ,SFwA2vWcWqlׯ[},g7F}.2˘ڳ 1-̧h( kB$Iv n 2T,6VQ&-wlfctf>2q,2Gx>e;QREzvg!v7+m6%$lֳ Զl36礒9N(ҖB""$e$eA|@!g}s|SX+/3ҏ,Y3+%6 1$w7+دk;r_eܾH^ܣaw~ ^B)I(cbq{Y.fIr$fI{{%`[7\]Y"_q%BR_H*IY(IY(IY$Bk]/rnIENDB`>PNG  IHDRQ!.РgAMAOX2tEXtSoftwareAdobe ImageReadyqe<wIDATxMoF E^{亮O 4u'@98u.] h$OKJo^N@ #2.?:•:^}቏? )FIɯ/ ~/CC :0hc)yi&[xHF}嵰 V\ iKy!Sdk!;Ʃey$H~뼮:Hb7Wd+UkJ2Tn//N^:Ԛ@j5{s3S1ş1Ѫ&ߖS$Avq:ijUn'0&C 5˷΄*,**)7+p*1XCI=M`E:#'#קaXbܫ6k4%S|6 P@打Ylm{Zğ.ZȜE,} [jc{f>0ȏ11'cߪ1GzY( ,m)+}~\+C*(O3bڡobvv-nπv^z!\ĶA\:ke)s'+M]Ap// ,֕m42h o)kfj#G \̖RhYeq?J( cVeslXvN9UY.K1cck5n/K\E<"`mE>՞cC q ZӐL'4Y8ƞOq'o͖vȆ2]޵ Ҏ)$5s9-6s9iز>̘%Ùi?ou8#ꌥ^zSYzC!3Fc^4܇m~|A)F3BI{ گG7aLW;iqۖ&Rx0T]}F:'aRLoP `uf|~`ڠ'iwIENDB` K8PNG  IHDR w& pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATx,jQ\fib.6Ii[YT(B M7BtO "n\ ʅ4Cltr>t`B8c|eݱLSsǃ põeu(0R1+WˑYdWo} |rH] Qi88NhCĜY!g&3JZ4Mnΰ{. jWRSC5?J'׶#eQ sGéSf߇$Fl<~t\Lk-kH4p, 5Lj04KQ7[8>ELzS-NNyX! ݶ%;1XJ''SR0]Wk -%tq'0l|j\ﶍs;S 4F=[ .!BNjPNG  IHDRa'މ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FXIDATxmLǿOv].mpjZƨb|z«!Vƚ؈&&EX(+ l -]y=GZ,#"IX g锊KMo.t RRQQ-+&'縹FM+]FV(t/i'K4zR#Fb c**;"AźdcŒU,5*mhȂOjPA xR^;cxN8IW@\Hc a**; \#N `1H . 2 1 KPQQ)a&/d!@刓v29_TFݾ.''>TRh4}$,˲S^wr]o\ 32#7;B ` iylXrL&#Thzh4jd]k)TTQ*cW(Զ!m 3w/_dhht˼ Ƭ Ģ#N8OX5M``.--ݽiSWhL(j "A(`&"8YB82Pの:0h\> .6 ;X3&b!hB6VLXyNtFʃ6mxbYQd0?FkFFJJJ9cxxO?4qMEQq!ANa4%rN&_=܃AꂩJ;& G1[ڵkNMMt5R8+c9aI:`ŒUvTL 6mڄqdggbll (BB@E[z `Y˲L믰lp:R]eCc#s!+Fq$,4,4lܸ񡩩k%!ϔ n8~'B EukZ0p*tc$xy]]]رc~pɓΝ;.СCŏ?(9ٮ.ڵ q&''z1??B=Z>.`~^ʕi((fjjO2%" x0Ɇ0XYQQQpl?cv"]S GDrAAJKKo3\`FEE+8T65֞aXT{ᇓ0@/rG$'0E SL/0`BJ '.VwuW黩ouA5e8RLX7 ss.LO@B׫{^~vvv? ˛o a c='|2y%>|8j.]BOOرp80LR+W ׯ_'7mDǎ g/zLÁF/ Cp;±qpV[e9zN`$zyߦ`0@Ft&pk`2>e0 A,M]~\.{iCCE_QQ&\|9qoߎ3gΨy>/Ʉ_|QԄzvS-;Ty~|> HIIIǭ 䓗I&℥2k5J'ppQx`0T6QlذYYYXjz;vC oq8lzSSS͛vyɹg6ղM$IJ;ɔfRXanL'&Y86Uq pNCjjHnŋ`KJJK >|L_p!sU\zUzwިBo薖TUU!++ yfY(y睐XQKK DQD]]s0*N>`zDQQ*++ՎlFII oEKK =+{ ^/88jUTa5(KBD`ra077^Rt:4fnn(++C~~ 0(-->٩dr$}`֦_kk+[lAkkkWֆ"޽--- p{%:RQݩ r~pr1n \ JOC13bA8p2Ak@J7b,! o`T]]$ǚ.~྾>I!KϐcxgQ\\vX,l2W07\.)AD9"sRV{Akk+\.WƦիN3>Ouj̙3ƃ>cǎIu\.j>G߿---p:T2g&N3KSI#AM@{ri! mSff_j}GzHł_TT4!uKGk1#`% #Vm'.r:RƢTsseU\\,}RQQ-K}!G :6waa!~m 6 t:C,IH&#r\.}]SQPDt-um===!.8pmRlΖ566ѣRB . johhH9wttt&ҎtttR Kة㽋vK.A}1"!&a˅Z455I${zzpݻw XjjjA4,AE!}'K oV?3yq4Vo94*pD2N8lƪUkp,79Ө-#_ /E\XJKW1br% }8% D8H6K]0bb%O>E(o9**p"H\Fsz\IENDB`]K//////////////////variables //global variable set to transit company name and product name //these are the only two variable that needs to be changed per transit company var transitCompanyURL = "qcmetrolink.com"; var transitCompanyProduct = "MyRIDE"; //need this flag because the widget doesn't know what action is calling it if you just right click on widget to open var calledFromAFunction; //compositeKey is stopID + location //there can be multiple locations per stop id var compositeKey; var connDown = false; var connStatus; var currentDisplayRouteLength; var currentFilter ; var currentStopID ; var currentStopName; var currentCustomStopName; var displayStopName; var modifyRowID; var serverTimeout=false; //userAction is needed so program is not left in an invalid state //if a user cancels out of an event there is no way for the widget to know about it //because the widget preferences cancel cannot be captured var userAction = ""; //////////////////objects var now = new Date(); //both of these arrays act like a table and each element of the array is a table row var filterData = new Array(); var busData = new Array(); //holds row fields var arrVisitPrefs = new Array(); //hold lines or rows read from the visits.txt file var arrVisitRows = new Array(); function addLocation() { setTimer(false); setUserAction("add",true); clearPreferenceVar(); showWidgetPreferences(); } function changeView(txtMessageID,location,customizedLocation,filter) { setTimer(false); setUserAction("changeView",true); clearLabels(); currentStopID = txtMessageID; currentStopName = location; currentCustomStopName = customizedLocation; currentFilter = filter; setPreferenceVar(); preferencesChanged(); } function checkConnection() { //getxml resets errorCode so we need a local one here connError = errorCode; setTimer(false); setTimerCheckConn(false); if (connError == -1) setLabel(10); else setLabel(11); sleep(2); //gets the xml and populates the busData associative array with all routes for a given bus up to the maximum prefRouteLength if (getITSXML()) connectionUp(); else processError(); } //checks the location to make sure it is unique before assigned function checkUnique() { var strCustomLocation = new String(""); var strCompareCompositeKey = new String(""); var strNewPrefCustomLocation = new String(preferences.prefCustomStopName.value).toUpperCase().replace(/^\s*|\s*$/g, ""); var strCompositeKey = new String(preferences.prefStopId.value + preferences.prefCustomStopName.value).toUpperCase().replace(/^\s*|\s*$/g, ""); var isUnique = true; if (userAction == "add") { for(i=0;i=0;i--) { arrName.pop(); } } function clearArrays() { clearArray(arrVisitPrefs); clearArray(arrVisitRows); clearArray(busData); clearArray(filterData); } //resets all frames to their original values and makes them invisible through their opacity property = 255 //frames are the alternating rows on the widget that display route name and minutes until arrival or "DUE" function clearFrames() { var rowOffset = 39; for (i = 0; i 21) { routeDisplayName = routeDisplayName.substring(0,20) + "..."; } else { routeDisplayName = routeName; } return routeDisplayName; } function getColor(realTimeFlag) { if ( realTimeFlag == "DUE" || (parseInt(realTimeFlag.substring(0,2),10) <= 3)) { color = "red"; } else if ((parseInt(realTimeFlag.substring(0,2), 10) >= 3) && (parseInt(realTimeFlag.substring(0,2),10) <=11)) { color="yellow"; } else { color="green"; } return color; } //makes the xml request to the server and gets back an xml object if there is one function getITSXML() { //make sure all timers are stopped especially timerServerTimeout stopTimers(); errorCode = -1; var strStopName = new String(""); // //stopURL = "http://10.100.11.200" + "/widget/Default.aspx?code="+ preferences.prefStopId.value + "&pt=30"; stopURL = "http://transitfx." + transitCompanyURL + "/widget/Default.aspx?code="+ preferences.prefStopId.value + "&pt=30"; //To make this work with the MetroLINK firewall, another try needs to be added for the scenario "111" connection refused. //This would point to the address http://10.100.11.200/ + The other stuff. try{ var req = new XMLHttpRequest(); req.open( "GET", stopURL, false ); req.send(); //Following code is not tested. if(req.status==111) { var newStopURL = "http://10.100.11.200" + "/widget/Default.aspx?code="+ preferences.prefStopId.value + "&pt=30"; req.open( "GET", newStopURL, false ); req.send(); } if(req.status==200) var xmlDom = XMLDOM.parse(req.responseXML.toXML()); if (xmlDom) { var stopAttributes = xmlDom.documentElement.attributes; strStopName = stopAttributes.getNamedItem("name").value; strStopName = strStopName.replace(new RegExp(/&/gi),"&"); currentStopName = strStopName.toUpperCase().replace(/^\s*|\s*$/g, ""); var errorAttributes = xmlDom.getElementsByName("ErrResponse").item(0).attributes; errorCode = errorAttributes.getNamedItem("code").value; if ( errorCode == 0 ) { if (xmlDom.getElementsByName("Bus").length != 0) populateBusData(xmlDom); else errorCode=2; return true; } else if (errorCode == "1000") { setLabel(11); sleep(10); stopTimers(); setTimerServerTimeout(true); return true; } else { return false; } } else { return false; } } catch(e) { //internet connection unavailble //errorCode remains -1 processError(); return false; } } //use this if no last pref vals sent and need to populate the program initially function getMostVisited() { var mostVisitedIndex = 0; var mostVisitedNum = 0; for(i=0;i mostVisitedNum) { mostVisitedIndex = i; mostVisitedNum = arrVisitPrefs[i].visits; } } return mostVisitedIndex; } function getRowID() { var ID = -1; var strCompositeKey = new String(compositeKey).toUpperCase().replace(/^\s*|\s*$/g, ""); var strCompareCompositeKey = new String(); for(i=0;i 0 && filterData.length == 0 && currentFilter != "") { errorCode=1; processError(); } } else { if (userAction == "modify" || userAction == "add") { setLabel(4); resetAp(); } else { setPreferenceVar(); } } setUserAction("",false); modifyRowID = -1; } else { setLabel(2); sleep(2); lastUpdated.visible = true; if (getITSXML()) { successAddLocation(); } else { errCode="1002"; processError(); } } } catch (e) { showButtons(false); setTimer(false); clearLabels(); clearFrames(); } } function processError() { stopTimers(false); clearLabels(); //make sure timer that refresh timer is stopped in the calling function switch (errorCode) { case -1: // internet connection down || setLabel and retry resetAp(); setLabel(15); setTimerCheckConn(true); clearArray(busData); connDown=true; break; case "0": // no buses scheduled at this time || setLabel and retry lastUpdated.data = "As of: " +formatDate(new Date(),"h:mm a") + " on " + formatDate(new Date,"MMM dd, yyyy"); setLabel(14); resetCurrentVar(); setPreferenceLastVar(); clearArray(arrVisitRows); clearArray(arrVisitPrefs); readPreferences(); setVisitsArray(); showButtons(true); setTimerCheckConn(false); setTimer(true); connDown=false; break; case 1: // no buses scheduled for the applied filter|| setLabel and retry //checkConnection lastUpdated.data = "As of: " +formatDate(new Date(),"h:mm a") + " on " + formatDate(new Date,"MMM dd, yyyy"); setLabel(9); resetCurrentVar(); setPreferenceLastVar(); showButtons(true); setTimerCheckConn(false); setTimer(true); connDown=false; break; case "1001": if (filesystem.itemExists(system.widgetDataFolder+"/visits.txt") ) { //invalid querystring || set Label and do not retry //reset pref var to last setLabel(12); resetCurrentVar(); setPreferenceVar(); } else { initWidget(); } showButtons(true); break; case "1002": clearArray(arrVisitPrefs); //invalid textmessage code || set Label and do not retry || reset pref to last setLabel(13); resetAp(); readPreferences(); if (arrVisitRows) setVisitsArray(); showButtons(true); break; default: resetDefault(); break; } } //reads the custom preference array from the visits.txt file //contains number of times views or visited, customized stop name, actual stop name, filter and textmsgID to the visits.txt file //contains txtMessageID, location, customizedLocation, currentFilter, visitNumber function readPreferences() { arrVisitRows = filesystem.readFile(system.widgetDataFolder+"/visits.txt" ,true); } //used to update the widget when only the xml changes, not the stopid, filter, etc. function refreshWidget() { stopTimers(); showButtons(false); clearFrames(); setLabel(7); sleep(1); clearArray(filterData); clearArray(busData); if (getITSXML()) { setFilterData(); if (errorCode == 1000) { setLabel(11); setTimerServerTimeout(true); } else if (errorCode == 2) { setLabel(14); } else { updateWidget(); } showButtons(true); setTimer(true); } else { processError(); } } function resetAp() { //reset to last preferences resetPreferenceToLast(); //reset currentVariables resetCurrentVar(); } function resetCurrentVar() { currentCustomStopName = new String(preferences.prefCustomStopName.value).toUpperCase().replace(/^\s*|\s*$/g, ""); currentStopName = preferences.prefStopName.value; currentStopID = preferences.prefStopId.value; currentFilter = preferences.prefRouteFilter.value; compositeKey = currentStopID+currentCustomStopName; } function resetDefault() { clearVars(); clearFrames(); if (filesystem.itemExists(system.widgetDataFolder+"/visits.txt") ) filesystem.moveToRecycleBin(system.widgetDataFolder+"/visits.txt"); loadWidget(); } function resetPreferenceToLast() { preferences.prefCustomStopName.value = preferences.prefLastViewedCustomStopName.value; preferences.prefStopName.value = preferences.prefLastViewedStopName.value ; preferences.prefStopId.value = preferences.prefLastViewedStopId.value ; preferences.prefRouteFilter.value = preferences.prefLastViewedRouteFilter.value; savePreferences(); } function resetPreferenceToMostVisited(txtMessageID, location, customLocation, filter) { //set lastviewed here preferences.prefCustomStopName.value = preferences.prefLastViewedCustomStopName.value; preferences.prefStopName.value = preferences.prefLastViewedStopName.value ; preferences.prefStopId.value = preferences.prefLastViewedStopId.value ; preferences.prefRouteFilter.value = preferences.prefLastViewedRouteFilter.value; savePreferences(); } //sets the global variables function setCurrentVariables() { setStopName(); currentStopID = preferences.prefStopId.value; currentCustomStopName = new String(preferences.prefCustomStopName.value).toUpperCase().replace(/^\s*|\s*$/g, ""); //set to caps currentFilter = preferences.prefRouteFilter.value; currentDisplayRouteLength = preferences.prefRouteLength.value; //replace acts as a trim function to the filter by removing the white space currentFilter = currentFilter.replace(/^\s*|\s*$/g, ""); //compositeKey is stopID + location //there can be multiple locations per stop id so a composite key is needed //this is not actually a preference per say but it is a value that is set from 2 preferences so it is included here compositeKey = currentStopID+currentCustomStopName; } //sets the filter on original collection of rows from the busData array //this function only pulls rows that match the filter if there is a filter function setFilterData() { var match = false; //clear the filter array clearArray(filterData); //checks to see if the Filter textbox in the Widget Preferences is an empty string if (currentFilter != "") { // The currentFilter holds the variables from the Filter preferences text box as a string //This line sets the applyFilter array to the Routes filter preference when the preferences are saved in the widget applyFilter = currentFilter.split(","); //loop through the busData list for ( i=0; i 17 && strText != "Enter a text message ID") { strText = strText.substr(0,17).concat("..."); metroLocation.data = strText; } else { /* Originally this else statement wasn't here, and metroLocation.data was just set to strText. That should actually work, but for reasons unknown it causes the text to be blank in Widget Engine 4.5+ Incorporating this as such is known to work in 4.5, as well as the older versions. */ metroLocation.data = titleText; } } function setUserAction(action,isFunction) { userAction = action; calledFromAFunction = isFunction; } //sets up the arrVisitPrefs array containing number of times views or visited, customized stop name, actual stop name, filter and textmsgID to the visits.txt file //when called if the record is new the function adds it to the array, otherwise it updates the array visit or filter parameters //array column format is txtMessageID, location, customizedLocation, currentFilter, visitNumber //this function is called after a read on the visits.txt, sets up the array and then a write function writes back the updated data to the visits.txt function setVisitsArray() { var strCompositeKey = new String(compositeKey).toUpperCase().replace(/^\s*|\s*$/g, ""); var strCurrentStopName = new String(""); var strCurrentCustomStopName = new String(""); var strTemp = new String(""); if (!arrVisitRows) { strCurrentStopName = currentStopName; strCurrentCustomStopName = currentCustomStopName; currentStopName = strCurrentStopName.toUpperCase().replace(/^\s*|\s*$/g, ""); currentCustomStopName = strCurrentCustomStopName.toUpperCase().replace(/^\s*|\s*$/g, ""); dataRow = { "txtMessageID":currentStopID, "location":currentStopName, "customizedLocation":currentCustomStopName, "filter":currentFilter, "visitNumber":1 }; arrVisitPrefs.push(dataRow); } else { for ( i = 0; i < arrVisitRows.length; i++ ) { strTemp = arrVisitRows[i]; strTemp = strTemp.replace(new RegExp(/^\s+/),""); // START strTemp = strTemp.replace(new RegExp(/\s+$/),""); // END columns = strTemp.split("|"); } var recordExists = false; if (arrVisitRows.length > 0) { for (i=0;i 0 && filterData.length == 0 && currentFilter != "") { //no buses are returned for the specified filter errorCode = 1; processError(); } else { setLabel(6); } } else { //no buses are scheduled for the stop setLabel(14); } setTimer(true); } showButtons(true); } function successLoadWidget() { setCurrentVariables(); //setCurrentVars to preference vars //apply the preference filter if there is one //set up a 'table' setFilterData(); //is this necessary here because nothing has changed? writePreferences(); if (errorCode==1000) { if (currentCustomStopName=="") setTitleBar(currentStopName); else setTitleBar(currentCustomStopName); setLabel(11); setTimerServerTimeout(true); } else { if ( errorCode == 2 ) setLabel(14); else updateWidget(); setTimer(true); } showButtons(true); } function successModify() { if ( modifyRowID != -1 ) { arrVisitPrefs[modifyRowID].txtMessageID = preferences.prefStopId.value; arrVisitPrefs[modifyRowID].location = preferences.prefStopName.value; arrVisitPrefs[modifyRowID].customizedLocation = preferences.prefCustomStopName.value; arrVisitPrefs[modifyRowID].filter = preferences.prefRouteFilter.value; arrVisitPrefs[modifyRowID].visitNumber = arrVisitPrefs[modifyRowID].visitNumber; setCurrentVariables(); } writePreferences(); sleep(2); readPreferences(); sleep(2); clearFrames(); setCurrentVariables(); changeView(currentStopID,currentStopName,currentCustomStopName,currentFilter); showButtons(true); setTimer(true); } function unload() { resetPreferenceToLast(); } //displays the rows based on the routes displayed function updateWidget() { clearLabels(); if ( currentCustomStopName == "" ) setTitleBar(currentStopName); else setTitleBar(currentCustomStopName); now = new Date(); if (preferences.prefStopId.value!="") { var rowOffset = 6; //set widget frames to display route name and time if(busData.length>0) { loadinglabel0.visible = false; showWidgetBottom(false); if ( currentFilter == "" ) { for (i = 0; i 0 ) { setUserAction("modify",false); } else { calledFromAFunction = false; } if ( preferences.prefStopId.value == "" && userAction == "modify") setPreferenceVar(); } } //writes the custom preference array from the visits.txt file //contains txtMessageID, location, customizedLocation, currentFilter, visitNumberfunction writePreferences() function writePreferences() { var strTemp = new String(""); arrTemp = new Array(); for (i=0;i @9ˏһ^xG<5"{9g1 D9vh~!B|qDmsAA7{! ާS:?/ȩ"" c# IlF<$/4d1s$o9yK8p7rZ~-A$Ls:8P3QXɻ<6AfG#V౰;6A)<%8Uļ[.iQF@c2+?nw} Ɍ{3i멯B 4.vp9zLT:ۤbKy*8ķI< -QY8D2Bd``q|4XD"u$ܸŰ14#/ fԈԛ/]j8i[նF95æ^FHHJ5LUS t*8h[lOlpBzפuªLD$Z ~풮394Ŀ]ǸYlL2jq2 iZ玍gۂf]:DH-{՗qQKB gF0](`pIS[72ZR4L,B¼mOϿ}(*2ߒyHz>ˎ~طK_MQ':Zp<6i-mdTh؄Kk9: j]Os%-UZWρ*iijF%uog}c5W~ba&vh10I.?6lzSYC[t>kn +d<j0;lůTڎ Ed9UT{MOä `^TsۛիI+Yrlϭt/H'%r0}4&mO mTY7Tpf{0 =??Xw} jWZ,Fo 5q-87͎2YlkDcu'=b~'Xl- mj61sIK;?;9߾*1=1 c1IENDB`Dx] MetroLINK MyRide 1.1 Bus departure information for MetroLink transit system. 0hC.F2ڍF`Zn~8>Kg/]HD5eoO hCtransitFX.konimages/icon.pngResources/about.pngResources/arrow.pngResources/blue1.pngResources/blue2.pngResources/bottom.pngResources/btn_choose.pngResources/dateFormatter.jsResources/green.pngResources/logo.pngResources/red.pngResources/refresh.pngResources/top.pngResources/transitFX.jsResources/yellow.pngwidget.xml