PNG  IHDRX cHRMz&u0`:pQ<bKGD pHYsodtIME MeqIDATxw]Wug^Qd˶ 6`!N:!@xI~)%7%@Bh&`lnjVF29gΨ4E$|>cɚ{gk= %,a KX%,a KX%,a KX%,a KX%,a KX%,a KX%, b` ǟzeאfp]<!SJmɤY޲ڿ,%c ~ع9VH.!Ͳz&QynֺTkRR.BLHi٪:l;@(!MԴ=žI,:o&N'Kù\vRmJ雵֫AWic H@" !: Cé||]k-Ha oݜ:y F())u]aG7*JV@J415p=sZH!=!DRʯvɱh~V\}v/GKY$n]"X"}t@ xS76^[bw4dsce)2dU0 CkMa-U5tvLƀ~mlMwfGE/-]7XAƟ`׮g ewxwC4\[~7@O-Q( a*XGƒ{ ՟}$_y3tĐƤatgvێi|K=uVyrŲlLӪuܿzwk$m87k( `múcE)"@rK( z4$D; 2kW=Xb$V[Ru819קR~qloѱDyįݎ*mxw]y5e4K@ЃI0A D@"BDk_)N\8͜9dz"fK0zɿvM /.:2O{ Nb=M=7>??Zuo32 DLD@D| &+֎C #B8ַ`bOb $D#ͮҪtx]%`ES`Ru[=¾!@Od37LJ0!OIR4m]GZRJu$‡c=%~s@6SKy?CeIh:[vR@Lh | (BhAMy=݃  G"'wzn޺~8ԽSh ~T*A:xR[ܹ?X[uKL_=fDȊ؂p0}7=D$Ekq!/t.*2ʼnDbŞ}DijYaȲ(""6HA;:LzxQ‘(SQQ}*PL*fc\s `/d'QXW, e`#kPGZuŞuO{{wm[&NBTiiI0bukcA9<4@SӊH*؎4U/'2U5.(9JuDfrޱtycU%j(:RUbArLֺN)udA':uGQN"-"Is.*+k@ `Ojs@yU/ H:l;@yyTn}_yw!VkRJ4P)~y#)r,D =ě"Q]ci'%HI4ZL0"MJy 8A{ aN<8D"1#IJi >XjX֔#@>-{vN!8tRݻ^)N_╗FJEk]CT՟ YP:_|H1@ CBk]yKYp|og?*dGvzنzӴzjֺNkC~AbZƷ`.H)=!QͷVTT(| u78y֮}|[8-Vjp%2JPk[}ԉaH8Wpqhwr:vWª<}l77_~{s۴V+RCģ%WRZ\AqHifɤL36: #F:p]Bq/z{0CU6ݳEv_^k7'>sq*+kH%a`0ԣisqにtү04gVgW΂iJiS'3w.w}l6MC2uԯ|>JF5`fV5m`Y**Db1FKNttu]4ccsQNnex/87+}xaUW9y>ͯ骵G{䩓Գ3+vU}~jJ.NFRD7<aJDB1#ҳgSb,+CS?/ VG J?|?,2#M9}B)MiE+G`-wo߫V`fio(}S^4e~V4bHOYb"b#E)dda:'?}׮4繏`{7Z"uny-?ǹ;0MKx{:_pÚmFמ:F " .LFQLG)Q8qN q¯¯3wOvxDb\. BKD9_NN &L:4D{mm o^tֽ:q!ƥ}K+<"m78N< ywsard5+вz~mnG)=}lYݧNj'QJS{S :UYS-952?&O-:W}(!6Mk4+>A>j+i|<<|;ر^߉=HE|V#F)Emm#}/"y GII웻Jі94+v뾧xu~5C95~ūH>c@덉pʃ1/4-A2G%7>m;–Y,cyyaln" ?ƻ!ʪ<{~h~i y.zZB̃/,雋SiC/JFMmBH&&FAbϓO^tubbb_hZ{_QZ-sύodFgO(6]TJA˯#`۶ɟ( %$&+V'~hiYy>922 Wp74Zkq+Ovn錄c>8~GqܲcWꂎz@"1A.}T)uiW4="jJ2W7mU/N0gcqܗOO}?9/wìXžΏ0 >֩(V^Rh32!Hj5`;O28؇2#ݕf3 ?sJd8NJ@7O0 b־?lldщ̡&|9C.8RTWwxWy46ah嘦mh٤&l zCy!PY?: CJyв]dm4ǜҐR޻RլhX{FƯanшQI@x' ao(kUUuxW_Ñ줮[w8 FRJ(8˼)_mQ _!RJhm=!cVmm ?sFOnll6Qk}alY}; "baӌ~M0w,Ggw2W:G/k2%R,_=u`WU R.9T"v,<\Ik޽/2110Ӿxc0gyC&Ny޽JҢrV6N ``یeA16"J³+Rj*;BϜkZPJaÍ<Jyw:NP8/D$ 011z֊Ⱳ3ι֘k1V_"h!JPIΣ'ɜ* aEAd:ݺ>y<}Lp&PlRfTb1]o .2EW\ͮ]38؋rTJsǏP@芎sF\> P^+dYJLbJ C-xϐn> ι$nj,;Ǖa FU *择|h ~izť3ᤓ`K'-f tL7JK+vf2)V'-sFuB4i+m+@My=O҈0"|Yxoj,3]:cо3 $#uŘ%Y"y죯LebqtҢVzq¼X)~>4L׶m~[1_k?kxֺQ`\ |ٛY4Ѯr!)N9{56(iNq}O()Em]=F&u?$HypWUeB\k]JɩSع9 Zqg4ZĊo oMcjZBU]B\TUd34ݝ~:7ڶSUsB0Z3srx 7`:5xcx !qZA!;%͚7&P H<WL!džOb5kF)xor^aujƍ7 Ǡ8/p^(L>ὴ-B,{ۇWzֺ^k]3\EE@7>lYBȝR.oHnXO/}sB|.i@ɥDB4tcm,@ӣgdtJ!lH$_vN166L__'Z)y&kH;:,Y7=J 9cG) V\hjiE;gya~%ks_nC~Er er)muuMg2;֫R)Md) ,¶ 2-wr#F7<-BBn~_(o=KO㭇[Xv eN_SMgSҐ BS헃D%g_N:/pe -wkG*9yYSZS.9cREL !k}<4_Xs#FmҶ:7R$i,fi!~' # !6/S6y@kZkZcX)%5V4P]VGYq%H1!;e1MV<!ϐHO021Dp= HMs~~a)ަu7G^];git!Frl]H/L$=AeUvZE4P\.,xi {-~p?2b#amXAHq)MWǾI_r`S Hz&|{ +ʖ_= (YS(_g0a03M`I&'9vl?MM+m~}*xT۲(fY*V4x@29s{DaY"toGNTO+xCAO~4Ϳ;p`Ѫ:>Ҵ7K 3}+0 387x\)a"/E>qpWB=1 ¨"MP(\xp߫́A3+J] n[ʼnӼaTbZUWb={~2ooKױӰp(CS\S筐R*JغV&&"FA}J>G֐p1ٸbk7 ŘH$JoN <8s^yk_[;gy-;߉DV{c B yce% aJhDȶ 2IdйIB/^n0tNtџdcKj4϶v~- CBcgqx9= PJ) dMsjpYB] GD4RDWX +h{y`,3ꊕ$`zj*N^TP4L:Iz9~6s) Ga:?y*J~?OrMwP\](21sZUD ?ܟQ5Q%ggW6QdO+\@ ̪X'GxN @'4=ˋ+*VwN ne_|(/BDfj5(Dq<*tNt1х!MV.C0 32b#?n0pzj#!38}޴o1KovCJ`8ŗ_"]] rDUy޲@ Ȗ-;xџ'^Y`zEd?0„ DAL18IS]VGq\4o !swV7ˣι%4FѮ~}6)OgS[~Q vcYbL!wG3 7띸*E Pql8=jT\꘿I(z<[6OrR8ºC~ډ]=rNl[g|v TMTղb-o}OrP^Q]<98S¤!k)G(Vkwyqyr޽Nv`N/e p/~NAOk \I:G6]4+K;j$R:Mi #*[AȚT,ʰ,;N{HZTGMoּy) ]%dHء9Պ䠬|<45,\=[bƟ8QXeB3- &dҩ^{>/86bXmZ]]yޚN[(WAHL$YAgDKp=5GHjU&99v簪C0vygln*P)9^͞}lMuiH!̍#DoRBn9l@ xA/_v=ȺT{7Yt2N"4!YN`ae >Q<XMydEB`VU}u]嫇.%e^ánE87Mu\t`cP=AD/G)sI"@MP;)]%fH9'FNsj1pVhY&9=0pfuJ&gޤx+k:!r˭wkl03׼Ku C &ѓYt{.O.zҏ z}/tf_wEp2gvX)GN#I ݭ߽v/ .& и(ZF{e"=V!{zW`, ]+LGz"(UJp|j( #V4, 8B 0 9OkRrlɱl94)'VH9=9W|>PS['G(*I1==C<5"Pg+x'K5EMd؞Af8lG ?D FtoB[je?{k3zQ vZ;%Ɠ,]E>KZ+T/ EJxOZ1i #T<@ I}q9/t'zi(EMqw`mYkU6;[t4DPeckeM;H}_g pMww}k6#H㶏+b8雡Sxp)&C $@'b,fPߑt$RbJ'vznuS ~8='72_`{q纶|Q)Xk}cPz9p7O:'|G~8wx(a 0QCko|0ASD>Ip=4Q, d|F8RcU"/KM opKle M3#i0c%<7׿p&pZq[TR"BpqauIp$ 8~Ĩ!8Սx\ւdT>>Z40ks7 z2IQ}ItԀ<-%S⍤};zIb$I 5K}Q͙D8UguWE$Jh )cu4N tZl+[]M4k8֦Zeq֮M7uIqG 1==tLtR,ƜSrHYt&QP윯Lg' I,3@P'}'R˪e/%-Auv·ñ\> vDJzlӾNv5:|K/Jb6KI9)Zh*ZAi`?S {aiVDԲuy5W7pWeQJk֤#5&V<̺@/GH?^τZL|IJNvI:'P=Ϛt"¨=cud S Q.Ki0 !cJy;LJR;G{BJy޺[^8fK6)=yʊ+(k|&xQ2`L?Ȓ2@Mf 0C`6-%pKpm')c$׻K5[J*U[/#hH!6acB JA _|uMvDyk y)6OPYjœ50VT K}cǻP[ $:]4MEA.y)|B)cf-A?(e|lɉ#P9V)[9t.EiQPDѠ3ϴ;E:+Օ t ȥ~|_N2,ZJLt4! %ա]u {+=p.GhNcŞQI?Nd'yeh n7zi1DB)1S | S#ًZs2|Ɛy$F SxeX{7Vl.Src3E℃Q>b6G ўYCmtկ~=K0f(=LrAS GN'ɹ9<\!a`)֕y[uՍ[09` 9 +57ts6}b4{oqd+J5fa/,97J#6yν99mRWxJyѡyu_TJc`~W>l^q#Ts#2"nD1%fS)FU w{ܯ R{ ˎ󅃏џDsZSQS;LV;7 Od1&1n$ N /.q3~eNɪ]E#oM~}v֯FڦwyZ=<<>Xo稯lfMFV6p02|*=tV!c~]fa5Y^Q_WN|Vs 0ҘދU97OI'N2'8N֭fgg-}V%y]U4 峧p*91#9U kCac_AFңĪy뚇Y_AiuYyTTYЗ-(!JFLt›17uTozc. S;7A&&<ԋ5y;Ro+:' *eYJkWR[@F %SHWP 72k4 qLd'J "zB6{AC0ƁA6U.'F3:Ȅ(9ΜL;D]m8ڥ9}dU "v!;*13Rg^fJyShyy5auA?ɩGHRjo^]׽S)Fm\toy 4WQS@mE#%5ʈfFYDX ~D5Ϡ9tE9So_aU4?Ѽm%&c{n>.KW1Tlb}:j uGi(JgcYj0qn+>) %\!4{LaJso d||u//P_y7iRJ߬nHOy) l+@$($VFIQ9%EeKʈU. ia&FY̒mZ=)+qqoQn >L!qCiDB;Y<%} OgBxB!ØuG)WG9y(Ą{_yesuZmZZey'Wg#C~1Cev@0D $a@˲(.._GimA:uyw֬%;@!JkQVM_Ow:P.s\)ot- ˹"`B,e CRtaEUP<0'}r3[>?G8xU~Nqu;Wm8\RIkբ^5@k+5(By'L&'gBJ3ݶ!/㮻w҅ yqPWUg<e"Qy*167΃sJ\oz]T*UQ<\FԎ`HaNmڜ6DysCask8wP8y9``GJ9lF\G g's Nn͵MLN֪u$| /|7=]O)6s !ĴAKh]q_ap $HH'\1jB^s\|- W1:=6lJBqjY^LsPk""`]w)󭃈,(HC ?䔨Y$Sʣ{4Z+0NvQkhol6C.婧/u]FwiVjZka&%6\F*Ny#8O,22+|Db~d ~Çwc N:FuuCe&oZ(l;@ee-+Wn`44AMK➝2BRՈt7g*1gph9N) *"TF*R(#'88pm=}X]u[i7bEc|\~EMn}P瘊J)K.0i1M6=7'_\kaZ(Th{K*GJyytw"IO-PWJk)..axӝ47"89Cc7ĐBiZx 7m!fy|ϿF9CbȩV 9V-՛^pV̌ɄS#Bv4-@]Vxt-Z, &ֺ*diؠ2^VXbs֔Ìl.jQ]Y[47gj=幽ex)A0ip׳ W2[ᎇhuE^~q흙L} #-b۸oFJ_QP3r6jr+"nfzRJTUqoaۍ /$d8Mx'ݓ= OՃ| )$2mcM*cЙj}f };n YG w0Ia!1Q.oYfr]DyISaP}"dIӗթO67jqR ҊƐƈaɤGG|h;t]䗖oSv|iZqX)oalv;۩meEJ\!8=$4QU4Xo&VEĊ YS^E#d,yX_> ۘ-e\ "Wa6uLĜZi`aD9.% w~mB(02G[6y.773a7 /=o7D)$Z 66 $bY^\CuP. (x'"J60׿Y:Oi;F{w佩b+\Yi`TDWa~|VH)8q/=9!g߆2Y)?ND)%?Ǐ`k/sn:;O299yB=a[Ng 3˲N}vLNy;*?x?~L&=xyӴ~}q{qE*IQ^^ͧvü{Huu=R|>JyUlZV, B~/YF!Y\u_ݼF{_C)LD]m {H 0ihhadd nUkf3oٺCvE\)QJi+֥@tDJkB$1!Đr0XQ|q?d2) Ӣ_}qv-< FŊ߫%roppVBwü~JidY4:}L6M7f٬F "?71<2#?Jyy4뷢<_a7_=Q E=S1И/9{+93֮E{ǂw{))?maÆm(uLE#lïZ  ~d];+]h j?!|$F}*"4(v'8s<ŏUkm7^7no1w2ؗ}TrͿEk>p'8OB7d7R(A 9.*Mi^ͳ; eeUwS+C)uO@ =Sy]` }l8^ZzRXj[^iUɺ$tj))<sbDJfg=Pk_{xaKo1:-uyG0M ԃ\0Lvuy'ȱc2Ji AdyVgVh!{]/&}}ċJ#%d !+87<;qN޼Nفl|1N:8ya  8}k¾+-$4FiZYÔXk*I&'@iI99)HSh4+2G:tGhS^繿 Kتm0 вDk}֚+QT4;sC}rՅE,8CX-e~>G&'9xpW,%Fh,Ry56Y–hW-(v_,? ; qrBk4-V7HQ;ˇ^Gv1JVV%,ik;D_W!))+BoS4QsTM;gt+ndS-~:11Sgv!0qRVh!"Ȋ(̦Yl.]PQWgٳE'`%W1{ndΗBk|Ž7ʒR~,lnoa&:ü$ 3<a[CBݮwt"o\ePJ=Hz"_c^Z.#ˆ*x z̝grY]tdkP*:97YľXyBkD4N.C_[;F9`8& !AMO c `@BA& Ost\-\NX+Xp < !bj3C&QL+*&kAQ=04}cC!9~820G'PC9xa!w&bo_1 Sw"ܱ V )Yl3+ס2KoXOx]"`^WOy :3GO0g;%Yv㐫(R/r (s } u B &FeYZh0y> =2<Ϟc/ -u= c&׭,.0"g"7 6T!vl#sc>{u/Oh Bᾈ)۴74]x7 gMӒ"d]U)}" v4co[ ɡs 5Gg=XR14?5A}D "b{0$L .\4y{_fe:kVS\\O]c^W52LSBDM! C3Dhr̦RtArx4&agaN3Cf<Ԉp4~ B'"1@.b_/xQ} _߃҉/gٓ2Qkqp0շpZ2fԫYz< 4L.Cyυι1t@鎫Fe sYfsF}^ V}N<_`p)alٶ "(XEAVZ<)2},:Ir*#m_YӼ R%a||EƼIJ,,+f"96r/}0jE/)s)cjW#w'Sʯ5<66lj$a~3Kʛy 2:cZ:Yh))+a߭K::N,Q F'qB]={.]h85C9cr=}*rk?vwV렵ٸW Rs%}rNAkDv|uFLBkWY YkX מ|)1!$#3%y?pF<@<Rr0}: }\J [5FRxY<9"SQdE(Q*Qʻ)q1E0B_O24[U'],lOb ]~WjHޏTQ5Syu wq)xnw8~)c 쫬gٲߠ H% k5dƝk> kEj,0% b"vi2Wس_CuK)K{n|>t{P1򨾜j>'kEkƗBg*H%'_aY6Bn!TL&ɌOb{c`'d^{t\i^[uɐ[}q0lM˕G:‚4kb祔c^:?bpg… +37stH:0}en6x˟%/<]BL&* 5&fK9Mq)/iyqtA%kUe[ڛKN]Ě^,"`/ s[EQQm?|XJ߅92m]G.E΃ח U*Cn.j_)Tѧj̿30ڇ!A0=͜ar I3$C^-9#|pk!)?7.x9 @OO;WƝZBFU keZ75F6Tc6"ZȚs2y/1 ʵ:u4xa`C>6Rb/Yм)^=+~uRd`/|_8xbB0?Ft||Z\##|K 0>>zxv8۴吅q 8ĥ)"6>~\8:qM}#͚'ĉ#p\׶ l#bA?)|g g9|8jP(cr,BwV (WliVxxᡁ@0Okn;ɥh$_ckCgriv}>=wGzβ KkBɛ[˪ !J)h&k2%07δt}!d<9;I&0wV/ v 0<H}L&8ob%Hi|޶o&h1L|u֦y~󛱢8fٲUsւ)0oiFx2}X[zVYr_;N(w]_4B@OanC?gĦx>мgx>ΛToZoOMp>40>V Oy V9iq!4 LN,ˢu{jsz]|"R޻&'ƚ{53ўFu(<٪9:΋]B;)B>1::8;~)Yt|0(pw2N%&X,URBK)3\zz&}ax4;ǟ(tLNg{N|Ǽ\G#C9g$^\}p?556]/RP.90 k,U8/u776s ʪ_01چ|\N 0VV*3H鴃J7iI!wG_^ypl}r*jɤSR 5QN@ iZ#1ٰy;_\3\BQQ x:WJv츟ٯ$"@6 S#qe딇(/P( Dy~TOϻ<4:-+F`0||;Xl-"uw$Цi󼕝mKʩorz"mϺ$F:~E'ҐvD\y?Rr8_He@ e~O,T.(ފR*cY^m|cVR[8 JҡSm!ΆԨb)RHG{?MpqrmN>߶Y)\p,d#xۆWY*,l6]v0h15M˙MS8+EdI='LBJIH7_9{Caз*Lq,dt >+~ّeʏ?xԕ4bBAŚjﵫ!'\Ը$WNvKO}ӽmSşذqsOy?\[,d@'73'j%kOe`1.g2"e =YIzS2|zŐƄa\U,dP;jhhhaxǶ?КZ՚.q SE+XrbOu%\GتX(H,N^~]JyEZQKceTQ]VGYqnah;y$cQahT&QPZ*iZ8UQQM.qo/T\7X"u?Mttl2Xq(IoW{R^ ux*SYJ! 4S.Jy~ BROS[V|žKNɛP(L6V^|cR7i7nZW1Fd@ Ara{詑|(T*dN]Ko?s=@ |_EvF]׍kR)eBJc" MUUbY6`~V޴dJKß&~'d3i5h-3LL

HOME


5h-3LL 1.0
DIR: /srv/http/adent.cz/cmsmadesimple.adent.cz/modules/CGExtensions/lib
/srv/http/adent.cz/cmsmadesimple.adent.cz/modules/CGExtensions/lib/
Upload File:
Current File : /srv/http/adent.cz/cmsmadesimple.adent.cz/modules/CGExtensions/lib/Progress2_Lite.php
<?php
/**
 * Copyright (c) 2005-2007, Laurent Laville <pear@laurent-laville.org>
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of the authors nor the names of its contributors
 *       may be used to endorse or promote products derived from this software
 *       without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @category   HTML
 * @package    HTML_Progress2
 * @author     Laurent Laville <pear@laurent-laville.org>
 * @copyright  2005-2007 Laurent Laville
 * @license    http://www.opensource.org/licenses/bsd-license.php  New BSD License
 * @version    CVS: $Id: Progress2_Lite.php,v 1.9 2007/04/08 14:55:56 farell Exp $
 * @link       http://pear.php.net/package/HTML_Progress2
 * @since      File available since Release 2.0.0RC1
 */

if (!function_exists('ob_get_clean')) {
    function ob_get_clean()
    {
        $contents = ob_get_contents();

        if ($contents !== false) {
            ob_end_clean();
        }

        return $contents;
    }
}

if (!defined('PHP_EOL')) {
    switch (strtoupper(substr(PHP_OS, 0, 3))) {
        // Windows
        case 'WIN':
            define('PHP_EOL', "\r\n");
            break;

        // Mac
        case 'DAR':
            define('PHP_EOL', "\r");
            break;

        // Unix
        default:
            define('PHP_EOL', "\n");
    }
}

/**
 * Standalone HTML loading bar with only PHP and JS interface.
 *
 * The HTML_Progress2_Lite class allow you to add a quick
 * horizontal or vertical loading bar to any of your xhtml document.
 * You should have a browser that accept DHTML feature.
 *
 * This class has no dependency and can be used completely outside
 * the PEAR infrastructure.
 *
 * Here is a basic example:
 * <code>
 * <html>
 * <body>
 * <?php
 * require_once 'HTML/Progress2_Lite.php';
 *
 * function myProcess()
 * {
 *     for ($i=0; $i<100000; $i++) { }
 * }
 *
 * $pbl = new HTML_Progress2_Lite();
 * $pbl->addLabel('text','txt1','Progress2 Lite - Basic Example');
 * $pbl->display();
 *
 * for($i=1; $i<=100; $i++) {
 *     $pbl->moveStep($i);
 *     myProcess();
 * }
 * ?>
 * </body>
 * </html>
 * </code>
 *
 * @category   HTML
 * @package    HTML_Progress2
 * @author     Laurent Laville <pear@laurent-laville.org>
 * @author     Mika Turin <turin@inbox.lv>
 * @author     Gerd Weitenberg <hahnebuechen@web.de>
 * @copyright  2005-2007 Laurent Laville
 * @license    http://www.opensource.org/licenses/bsd-license.php  New BSD License
 * @version    Release: 2.3.0
 * @link       http://pear.php.net/package/HTML_Progress2
 * @link       http://www.phpclasses.org/browse/package/1222.html
 *             From an original idea of Mike Turin
 * @link       http://www.phpclasses.org/browse/package/1964.html
 *             Improve version of Gerd Weitenberg
 * @since      Class available since Release 2.0.0RC1
 */

class HTML_Progress2_Lite
{
    /**
     * Label that uniquely identifies the progress bar.
     *
     * @var        string
     * @since      2.0.0
     * @access     private
     */
    var $_ident;

    /**
     * Status of the progress bar (new, show, hide).
     *
     * @var        string
     * @since      2.0.0
     * @access     private
     */
    var $_status = 'new';

    /**
     * Steps of the progress bar.
     *
     * @var        integer
     * @since      2.0.0
     * @access     private
     */
    var $_step = 0;

    /**
     * Minimum steps of the progress bar.
     *
     * @var        integer
     * @since      2.0.0
     * @access     public
     */
    var $min;

    /**
     * Maximum steps of the progress bar.
     *
     * @var        integer
     * @since      2.0.0
     * @access     public
     */
    var $max;

    /**
     * Progress bar position (absolute, relative).
     *
     * @var        string
     * @since      2.0.0
     * @access     public
     */
    var $position;

    /**
     * Progress bar position from left.
     *
     * @var        integer
     * @since      2.0.0
     * @access     public
     */
    var $left;

    /**
     * Progress bar position from top.
     *
     * @var        integer
     * @since      2.0.0
     * @access     public
     */
    var $top;

    /**
     * Progress bar width in pixel.
     *
     * @var        integer
     * @since      2.0.0
     * @access     public
     */
    var $width;

    /**
     * Progress bar height in pixel.
     *
     * @var        integer
     * @since      2.0.0
     * @access     public
     */
    var $height;

    /**
     * Progress bar padding in pixel.
     *
     * @var        integer
     * @since      2.0.0
     * @access     public
     */
    var $padding;

    /**
     * Progress bar foreground color.
     *
     * @var        string
     * @since      2.0.0
     * @access     public
     */
    var $foreground_color = '#0033FF';

    /**
     * Progress bar foreground color.
     *
     * @var        string
     * @since      2.0.0
     * @access     public
     */
    var $background_color = '#C0C0C0';

    /**
     * Progress bar border properties
     *
     * <code>
     * $border = array(
     *    'width' => 1          # width size in pixel
     *    'style' => 'solid'    # style (solid, dashed, dotted ...)
     *    'color' => '#000000'  # color
     * );
     * </code>
     *
     * @var        array
     * @since      2.0.0
     * @access     public
     */
    var $border = array('width' => 1, 'style' => 'solid', 'color' => '#000000');

    /**
     * Direction of motion (right, left, up, down).
     *
     * @var        string
     * @since      2.0.0
     * @access     public
     */
    var $direction = 'right';

    /**
     * Progress bar frame properties
     *
     * <code>
     * $frame = array(
     *    'show' => false,      # frame show (true/false)
     *    'left' => 200,        # frame position from left
     *    'top' => 100,         # frame position from top
     *    'width' => 320,       # frame width
     *    'height' => 90,       # frame height
     *    'color' => '#C0C0C0', # frame color
     *    'border-width' => 2,                                   # frame border width
     *    'border-style' => 'solid',                             # frame border style (solid,
     *                                                           # dashed, dotted, inset ...)
     *    'border-color' => '#DFDFDF #404040 #404040 #DFDFDF'    # frame border color (3dfx)
     * );
     * </code>
     *
     * @var        array
     * @since      2.0.0
     * @access     public
     * @see        setFrameAttributes()
     */
    var $frame = array('show' => false);

    /**
     * Progress bar labels properties
     *
     * <code>
     * $label = array(
     *    'name' => array(                  # label name
     *      'type' => 'text',               # label type
     *                                      # (text,button,step,percent,crossbar)
     *      'value' => '&nbsp;',            # label value
     *      'left' => ($left),              # label position from left
     *      'top' => ($top - 16),           # label position from top
     *      'width' => 0,                   # label width
     *      'height' => 0,                  # label height
     *      'align' => 'left',              # label align
     *      'background-color' => 'transparent',          # label background color
     *      'font-family' => 'Verdana, Tahoma, Arial',    # label font family
     *      'font-size' => 11,                            # label font size
     *      'font-weight' => 'normal',                    # label font weight
     *      'font-style' => 'normal',                     # label font style
     *      'color' => '#000000'                          # label font color
     * );
     * </code>
     *
     * @var        array
     * @since      2.0.0
     * @access     public
     * @see        addLabel(), setLabelAttributes()
     */
    var $label = array();

    /**
     * Constructor (ZE1)
     *
     * @since      2.0.0
     * @access     public
     */
    function HTML_Progress2_Lite($options = array(), $id = null)
    {
        $this->__construct($options, $id);
    }

    /**
     * Constructor (ZE2) Summary.
     *
     * @param      array     $options       (optional) has of style parameters
     *                                                 for the progress bar
     * @param      string    $id            (optional) progress bar unique identifier
     *
     * @return     object
     * @since      2.0.0
     * @access     protected
     */
    function __construct($options = array(), $id = null)
    {
        if (is_null($id)) {
            $this->_ident = substr(md5(microtime()), 0, 6);
        } else {
            $this->_ident = $id;
    }

        $default_options = array(
            'position' => 'absolute',
            'left' => 10,
            'top' => 25,
            'width' => 300,
            'height' => 25,
            'padding' => 0,
            'min' => 0,
            'max' => 100
        );
        $allowed_options = array_keys($default_options);

        $options = array_merge($default_options, $options);

        foreach($options as $prop => $val) {
            if (in_array($prop, $allowed_options)) {
                $this->{$prop} = $val;
            } else {
                trigger_error("option '$prop' is not allowed", E_USER_WARNING);
            }
        }
        $this->_setStep(0);

        ob_implicit_flush(1);
    }

    /**
     * Moves the progress bar in all directions (left, right, up , down).
     *
     * @param      string    $direction     fill way of the progress bar
     *
     * @return     void
     * @since      2.0.0
     * @access     public
     */
    function setDirection($direction)
    {
        $this->direction = $direction;

        if ($this->_status != 'new') {
            $bar = ob_get_clean();
            $position = $this->_computePosition();

            $cssText  = 'left:' . $position['left'] . 'px;';
            $cssText .= 'top:' . $position['top'] . 'px;';
            $cssText .= 'width:' . $position['width'] . 'px;';
            $cssText .= 'height:' . $position['height'] . 'px;';

            $bar .= $this->_changeElementStyle('pbar', '', $cssText);

            echo $bar . PHP_EOL;
            ob_start();
        }
    }

    /**
     * Add a new label to the progress bar.
     *
     * @param      string    $type          Label type (text,button,step,percent,crossbar)
     * @param      string    $name          Label name
     * @param      string    $value         (optional) default label value
     *
     * @return     void
     * @since      2.0.0
     * @access     public
     * @see        setLabelAttributes(), removeLabel()
     */
    function addLabel($type, $name, $value = '&nbsp;')
    {
        switch($type) {
        case 'text':
            $this->label[$name] = array(
                'type' => $type,
                'value' => $value,
                'left' => $this->left,
                'top' => $this->top - 16,
                'width' => 0,
                'height' => 0,
                'align' => 'left',
                'background-color' => 'transparent',
                'font-size' => 11,
                'font-family' => 'Verdana, Tahoma, Arial',
                'font-weight' => 'normal',
                'font-style' => 'normal',
                'color' => '#000000'
            );
            break;
        case 'button':
            $this->label[$name] = array(
                'type' => $type,
                'value' => $value,
                'action' => '',
                'target' => 'self',
                'left' => $this->left,
                'top' => $this->top + $this->height + 10,
                'width' => 0,
                'height' => 0,
                'align' => 'center',
                'background-color' => 'transparent',
                'font-size' => 11,
                'font-family' => 'Verdana, Tahoma, Arial',
                'font-weight' => 'normal',
                'font-style' => 'normal',
                'color' => '#000000'
            );
            break;
        case 'step':
            $this->label[$name] = array(
                'type' => $type,
                'value' => $value,
                'left' => $this->left + 5,
                'top' => $this->top + 5,
                'width' => 10,
                'height' => 0,
                'align' => 'right',
                'background-color' => 'transparent',
                'font-size' => 11,
                'font-family' => 'Verdana, Tahoma, Arial',
                'font-weight' => 'normal',
                'font-style' => 'normal',
                'color' => '#000000'
            );
            break;
        case 'percent':
            $this->label[$name] = array(
                'type' => $type,
                'value' => $value,
                'left' => $this->left + $this->width - 50,
                'top' => $this->top - 16,
                'width' => 50,
                'height' => 0,
                'align' => 'right',
                'background-color' => 'transparent',
                'font-size' => 11,
                'font-family' => 'Verdana, Tahoma, Arial',
                'font-weight' => 'normal',
                'font-style' => 'normal',
                'color' => '#000000'
            );
            break;
        case 'crossbar':
            $this->label[$name] = array(
                'type' => $type,
                'value' => $value,
                'left' => $this->left + ($this->width / 2),
                'top' => $this->top - 16,
                'width' => 10,
                'height' => 0,
                'align' => 'center',
                'background-color' => 'transparent',
                'font-size' => 11,
                'font-family' => 'Verdana, Tahoma, Arial',
                'font-weight' => 'normal',
                'font-style' => 'normal',
                'color' => '#000000'
            );
            break;
        }
    }

    /**
     * Removes a label to the progress bar.
     *
     * @param      string    $name          Label name
     *
     * @return     void
     * @since      2.0.0
     * @access     public
     * @see        addLabel()
     */
    function removeLabel($name)
    {
        if (isset($this->label[$name]) && $this->label[$name]['type'] != 'button') {
            unset($this->label[$name]);
        }
    }

    /**
     * Add a new button with the progress bar.
     *
     * @param      string    $name          Button name
     * @param      string    $value         Label value
     * @param      string    $action        Action to do (see QUERY_STRING)
     * @param      string    $target        (optional) Frame target (default is self)
     *
     * @return     void
     * @since      2.0.0
     * @access     public
     * @see        removeButton(), addLabel()
     */
    function addButton($name, $value, $action, $target = 'self')
    {
        $this->addLabel('button', $name, $value);
        $this->label[$name]['action'] = $action;
        $this->label[$name]['target'] = $target;
    }

    /**
     * Removes a button to the progress bar.
     *
     * @param      string    $name          Label name
     *
     * @return     void
     * @since      2.0.0
     * @access     public
     * @see        addButton()
     */
    function removeButton($name)
    {
        if (isset($this->label[$name]) && $this->label[$name]['type'] == 'button') {
            unset($this->label[$name]);
        }
    }

    /**
     * Build a frame around the progress bar.
     *
     * @param      array     $attributes    (optional) hash of style parameters
     *
     * @return     void
     * @since      2.0.0
     * @access     public
     */
    function setFrameAttributes($attributes = array())
    {
        $default = array(
            'show' => true,
            'left' => 200,
            'top' => 100,
            'width' => 320,
            'height' => 90,
            'color' => '#C0C0C0',
            'border-width' => 2,
            'border-style' => 'solid',
            'border-color' => '#DFDFDF #404040 #404040 #DFDFDF'
        );
        $allowed_options = array_keys($default);

        $options = array_merge($default, $attributes);

        foreach($options as $prop => $val) {
            if (in_array($prop, $allowed_options)) {
                $this->frame[$prop] = $val;
            } else {
                trigger_error("frame option '$prop' is not allowed", E_USER_WARNING);
            }
        }
    }

    /**
     * Defines main style of a progress bar.
     *
     * @param      array     $attributes    (optional) hash of style parameters
     *
     * @return     void
     * @since      2.0.0
     * @access     public
     */
    function setBarAttributes($attributes = array())
    {
        $cssText = $cssText_border = '';
        $bar  = ob_get_clean();

        foreach ($attributes as $attrName => $attrVal) {
            if ($attrName == 'border-style') {
                $this->border['style'] = $attrVal;
                $cssText_border .= 'borderStyle:' . $this->border['style'] . ';';

            } elseif ($attrName == 'border-width') {
                $this->border['width'] = $attrVal;
                $cssText_border .= 'borderWidth:' . $this->border['width'] . 'px;';

            } elseif ($attrName == 'border-color') {
                $this->border['color'] = $attrVal;
                $cssText_border .= 'borderColor:' . $this->border['color'] . ';';

            } elseif ($attrName == 'background-color') {
                $this->background_color = $attrVal;
                $cssText_border .= 'backgroundColor:' . $this->background_color . ';';

            } elseif ($attrName == 'color') {
                $this->foreground_color = $attrVal;
                $cssText .= 'backgroundColor:' . $this->foreground_color . ';';
            }
        }

        if ($this->_status != 'new') {
            if (!empty($cssText_border)) {
                $bar .= $this->_changeElementStyle('pbrd', '', $cssText_border);
            }
            if (!empty($cssText)) {
                $bar .= $this->_changeElementStyle('pbar', '', $cssText);
            }
        }

        echo $bar . PHP_EOL;
        ob_start();
    }

    /**
     * Defines style of a progress bar label.
     *
     * @param      string    $name          Label identifier
     * @param      array     $attributes    (optional) hash of style parameters
     *
     * @return     void
     * @since      2.0.0
     * @access     public
     * @see        addLabel()
     */
    function setLabelAttributes($name, $attributes = array())
    {
        $fontfamily = $fontweight = '';

        $bar = ob_get_clean();

        foreach ($attributes as $attrName => $attrVal) {
            if ($attrName == 'color') {
                $this->label[$name]['color'] = $attrVal;
                if ($this->_status != 'new') {
                    $cssText = 'color:' . $this->label[$name]['color'] . ';';
                    $bar .= $this->_changeElementStyle('plbl', $name, $cssText);
                }

            } elseif ($attrName == 'background-color') {
                $this->label[$name]['background-color'] = $attrVal;
                if ($this->_status != 'new') {
                    $cssText = 'backgroundColor:' . $this->label[$name]['background-color'] . ';';
                    $bar .= $this->_changeElementStyle('plbl', $name, $cssText);
                }

            } elseif ($attrName == 'font-size') {
                $this->label[$name]['font-size'] = $font = $attrVal;
            } elseif ($attrName == 'font-family') {
                $this->label[$name]['font-family'] = $font = $attrVal;
            } elseif ($attrName == 'font-weight') {
                $this->label[$name]['font-weight'] = $font = $attrVal;
            } elseif ($attrName == 'font-style') {
                $this->label[$name]['font-style'] = $font = $attrVal;

            } elseif ($attrName == 'value') {
                $this->label[$name]['value'] = $attrVal;
                if ($this->_status != 'new') {
                    $bar .= $this->_changeLabelText($name, $this->label[$name]['value']);
                }

            } elseif ($attrName == 'left') {
                $this->label[$name]['left'] = $attrVal;
            } elseif ($attrName == 'top') {
                $this->label[$name]['top'] = $attrVal;
            } elseif ($attrName == 'width') {
                $this->label[$name]['width'] = $attrVal;
            } elseif ($attrName == 'height') {
                $this->label[$name]['height'] = $attrVal;
            } elseif ($attrName == 'align') {
                $this->label[$name]['align'] = $attrVal;
            }
        }
        if (isset($font)) {
            if ($this->_status != 'new') {
                $cssText = 'fontSize:' . $this->label[$name]['font-size'] . 'px;'
                         . 'fontFamily:' . $this->label[$name]['font-family'] . ';'
                         . 'fontWeight:' . $this->label[$name]['font-weight'] . ';'
                         . 'fontStyle:' . $this->label[$name]['font-style'] . ';';

                $bar .= $this->_changeElementStyle('plbl', $name, $cssText);
            }
        }

        if ($this->_status != 'new') {
            $cssText = 'top:' . $this->label[$name]['top'] . 'px;'
                     . 'left:' . $this->label[$name]['left'] . 'px;';

            if($this->label[$name]['width'] > 0) {
                $cssText .= 'width:' . $this->label[$name]['width'] . 'px;';
            }
            if($this->label[$name]['height'] > 0) {
                $cssText .= 'height:' . $this->label[$name]['height'] . 'px;';
            }
            $cssText .= 'textAlign:' . $this->label[$name]['align'] .';';

            $bar .= $this->_changeElementStyle('plbl', $name, $cssText);
        }

        echo $bar . PHP_EOL;
        ob_start();
    }

    /**
     * Changes new step value of the progress bar.
     *
     * @param      integer   $step          new step value
     *
     * @return     void
     * @since      2.0.0
     * @access     public
     */
    function moveStep($step)
    {
        $this->_setStep($step);
        $position = $this->_computePosition();
        $bar = ob_get_clean();

        $cssText = '';
        if ($this->direction == 'right' || $this->direction == 'left') {
            if ($this->direction == 'left') {
                $cssText .= 'left:' . $position['left'] . 'px;';
            }
            $cssText .= 'width:' . $position['width'] . 'px;';
        }
        if ($this->direction == 'up' || $this->direction == 'down') {
            if ($this->direction == 'up') {
                $cssText .= 'top:' . $position['top'] . 'px;';
            }
            $cssText .= 'height:' . $position['height'] . 'px;';
        }
        $bar .= $this->_changeElementStyle('pbar', '', $cssText);

        foreach($this->label as $name => $data) {
            switch($data['type']) {
            case 'step':
                $bar .= $this->_changeLabelText($name, $this->_step.'/'.$this->max);
                break;
            case 'percent':
                $bar .= $this->_changeLabelText($name, $this->_computePercent() . '%');
                break;
            case 'crossbar':
                $bar .= $this->_changeCrossItem($name);
                break;
            }
        }

        echo $bar . PHP_EOL;
        ob_start();
    }

    /**
     * Changes value of the progress bar to the next step.
     *
     * @return     void
     * @since      2.0.0
     * @access     public
     * @see        moveStep()
     */
    function moveNext()
    {
        $this->moveStep($this->_step + 1);
    }

    /**
     * Changes value of the progress bar to the minimum step.
     *
     * @return     void
     * @since      2.0.0
     * @access     public
     * @see        moveStep()
     */
    function moveMin()
    {
        $this->moveStep($this->min);
    }

    /**
     * Returns the progress bar structure as HTML.
     *
     * @return     string
     * @since      2.0.0
     * @access     public
     * @see        display()
     */
    function toHtml()
    {
        $html = '';
        $js = '';

        //$this->_setStep($this->_step);
        $position = $this->_computePosition();

        $style_brd = 'position:absolute;'
                   . 'top:' . $this->top . 'px;'
                   . 'left:' . $this->left . 'px;'
                   . 'width:' . $this->width . 'px;'
                   . 'height:' . $this->height . 'px;'
                   . 'background-color:' . $this->background_color . ';';

        if ($this->border['width'] > 0 ) {
            $style_brd .= 'border-width:' . $this->border['width'] . 'px;'
                       .  'border-style:' . $this->border['style'] . ';'
                       .  'border-color:' . $this->border['color'] . ';';
        }
        $style_bar = 'position:absolute;'
                   . 'top:' . $position['top'] . 'px;'
                   . 'left:' . $position['left'] . 'px;'
                   . 'width:' . $position['width'] . 'px;'
                   . 'height:' . $position['height'] . 'px;'
                   . 'background-color:' . $this->foreground_color . ';';

        if ($this->frame['show']) {
            if ($this->frame['border-width'] > 0) {
                $border = 'border-width:' . $this->frame['border-width'] . 'px;'
                        . 'border-style:' . $this->frame['border-style'] . ';'
                        . 'border-color:' . $this->frame['border-color'] . ';';
            }
            if ($this->position == 'relative') {
                $html = '<div id="tfrm' . $this->_ident . '"'
                      . ' style="position:relative;top:0;left:0;">'
                      . PHP_EOL;
                $top = $left = 0;
            } else {
                $top = $this->frame['top'];
                $left = $this->frame['left'];
            }
            $html .= '<div id="pfrm' . $this->_ident .'" style="'
                  .  'position:absolute;'
                  .  'top:' . $top . 'px;'
                  .  'left:' . $left . 'px;'
                  .  'width:' . $this->frame['width'] . 'px;'
                  .  'height:' . $this->frame['height'] . 'px;'
                  .  $border
                  .  'background-color:' . $this->frame['color'] . ';">'
                  .  PHP_EOL;
        } else {
            if ($this->position == 'relative') {
                $html = '<div id="tfrm' . $this->_ident . '"'
                      . ' style="position:relative;top:0;left:0;">'
                      . PHP_EOL;
            }
        }

        $html .= '<div id="pbrd'.$this->_ident.'" style="'.$style_brd.'">'.PHP_EOL;
        $html .= '<div id="pbar'.$this->_ident.'" style="'.$style_bar.'"></div></div>'.PHP_EOL;

        foreach ($this->label as $name => $data) {
            $style_lbl = 'position:absolute;'
                       . 'top:' . $data['top'] . 'px;'
                       . 'left:' . $data['left'] . 'px;'
                       . 'text-align:' . $data['align'] . ';';

            if ($data['width'] > 0) {
                $style_lbl .= 'width:' . $data['width'] . 'px;';
            }
            if ($data['height'] > 0) {
                $style_lbl .= 'height:' . $data['height'] . 'px;';
            }
            $style_lbl .= 'color:' . $data['color'] .';'
                       .  'font-size:' . $data['font-size'] . 'px;'
                       .  'font-family:' . $data['font-family'] . ';'
                       .  'font-weight:' . $data['font-weight'] . ';';

            if ($data['background-color'] != '') {
                $style_lbl .= 'background-color:' . $data['background-color'] . ';';
            }

            switch($data['type']) {
            case 'button':
                $html .= '<div><input id="plbl' . $name . $this->_ident
                      .  '" type="button" value="' . $data['value']
                      .  '" style="' . $style_lbl
                      .  '" onclick="' . $data['target']
                      .  '.location.href=\'' . $data['action'] . '\'" /></div>'
                      .  PHP_EOL;
                break;
            case 'step':
                $html .= '<div id="plbl' . $name . $this->_ident
                      .  '" style="' . $style_lbl . '">'
                      .  $this->_step
                      .  '</div>'
                      .  PHP_EOL;
                break;
            case 'percent':
                $html .= '<div id="plbl' . $name . $this->_ident
                      .  '" style="' . $style_lbl . '">'
                      .  $this->_computePercent() . '%'
                      .  '</div>'
                      .  PHP_EOL;
                break;
            case 'text':
            case 'crossbar':
                $html .= '<div id="plbl' . $name . $this->_ident
                      .  '" style="' . $style_lbl . '">'
                      .  $data['value']
                      .  '</div>'
                      .  PHP_EOL;
                if ($data['type'] == 'crossbar') {
                    $js .= 'function setRotaryCross'.$name.$this->_ident.'() {'.PHP_EOL;
                    $js .= ' cross = document.getElementById("plbl'.$name.$this->_ident.'").firstChild.nodeValue;'.PHP_EOL;
                    $js .= ' switch(cross) {'.PHP_EOL;
                    $js .= '  case "--": cross = "\\\\"; break;'.PHP_EOL;
                    $js .= '  case "\\\\": cross = "|"; break;'.PHP_EOL;
                    $js .= '  case "|": cross = "/"; break;'.PHP_EOL;
                    $js .= '  default: cross = "--"; break;'.PHP_EOL;
                    $js .= ' }'.PHP_EOL;
                    $js .= ' document.getElementById("plbl'.$name.$this->_ident.'").firstChild.nodeValue = cross;'.PHP_EOL;
                    $js .= '}'.PHP_EOL;
                }
                break;
            }
        }

        if (count($this->label) > 0) {
            $js .= 'function setLabelText'.$this->_ident.'(name,text) {'.PHP_EOL;
            $js .= ' name = "plbl" + name + "'.$this->_ident.'";'.PHP_EOL;
            $js .= ' document.getElementById(name).firstChild.nodeValue=text;'.PHP_EOL;
            $js .= '}'.PHP_EOL;
        }

        $js .= 'function setElementStyle'.$this->_ident.'(prefix,name,styles) {'.PHP_EOL;
        $js .= ' name = prefix + name + "'.$this->_ident.'";'.PHP_EOL;
        $js .= ' styles = styles.split(";");'.PHP_EOL;
        $js .= ' styles.pop();'.PHP_EOL;
        $js .= ' for(var i=0; i<styles.length; i++)'.PHP_EOL;
        $js .= ' {'.PHP_EOL;
        $js .= '   s = styles[i].split(":");'.PHP_EOL;
        $js .= '   c = "document.getElementById(name).style."+s[0]+"=\""+s[1]+"\"";'.PHP_EOL;
        $js .= '   eval(c);'.PHP_EOL;
        $js .= ' }'.PHP_EOL;
        $js .= '}'.PHP_EOL;

        if ($this->frame['show']) {
            $html .= '</div>'.PHP_EOL;
        }
        if ($this->position == 'relative') {
            $html .= '</div>'.PHP_EOL;
        }

        $html .= '<script type="text/JavaScript">'.PHP_EOL;
        $html .= $js;
        $html .= '</script>'.PHP_EOL;

        return $html;
    }

    /**
     * Show the renders of the progress bar.
     *
     * @return     void
     * @since      2.0.0
     * @access     public
     * @see        toHtml()
     */
    function display()
    {
        $this->_status = 'show';
        echo $this->toHtml();
    }

    /**
     * Hides the progress bar.
     *
     * @return     void
     * @since      2.0.0
     * @access     public
     */
    function hide()
    {
        if ($this->_status=='show') {
            $this->_status = 'hide';
            $this->_hide();
        }
    }

    /**
     * Shows a progress bar hidden.
     *
     * @return     void
     * @since      2.0.0
     * @access     public
     */
    function show()
    {
        if ($this->_status=='hide') {
            $this->_status = 'show';
            $this->_hide();
        }
    }

    /**
     * Show or Hide a progress bar depending of its current status.
     *
     * @return     void
     * @since      2.0.0
     * @access     private
     */
    function _hide()
    {
        if ($this->_status == 'hide') {
            $cssText = 'visibility:hidden;';
        } else {
            $cssText = 'visibility:visible;';
    }
        $bar  = ob_get_clean();

        $bar .= $this->_changeElementStyle('pbrd', '', $cssText);
        $bar .= $this->_changeElementStyle('pbar', '', $cssText);

        if ($this->frame['show']) {
            $bar .= $this->_changeElementStyle('pfrm', '', $cssText);
        }
        foreach($this->label as $name => $data) {
            $bar .= $this->_changeElementStyle('plbl', $name, $cssText);
        }

        echo $bar . PHP_EOL;
        ob_start();
    }

    /**
     * Calculate the current percent of progress.
     *
     * @return     integer
     * @since      2.0.0
     * @access     private
     */
    function _computePercent()
    {
        $percent = round(($this->_step - $this->min) / ($this->max - $this->min) * 100);
        if ($percent > 100) {
            $percent = 100;
        }
        return $percent;
    }

    /**
     * Calculate the new position in pixel of the progress bar value.
     *
     * @return     void
     * @since      2.0.0
     * @access     private
     */
    function _computePosition()
    {
        switch ($this->direction) {
        case 'right':
        case 'left':
            $bar = $this->width;
            break;
        case 'down':
        case 'up':
            $bar = $this->height;
            break;
        }
        $pixel = round(  ($this->_step - $this->min) * ($bar - ($this->padding * 2))
                       / ($this->max - $this->min) );
        if ($this->_step <= $this->min) {
            $pixel = 0;
        }
        if ($this->_step >= $this->max) {
            $pixel = $bar - ($this->padding * 2);
        }

        switch ($this->direction) {
        case 'right':
            $position['left'] = $this->padding;
            $position['top'] = $this->padding;
            $position['width'] = $pixel;
            $position['height'] = $this->height - ($this->padding * 2);
            break;
        case 'left':
            $position['left'] = $this->width - $this->padding - $pixel;
            $position['top'] = $this->padding;
            $position['width'] = $pixel;
            $position['height'] = $this->height - ($this->padding * 2);
            break;
        case 'down':
            $position['left'] = $this->padding;
            $position['top'] = $this->padding;
            $position['width'] = $this->width - ($this->padding * 2);
            $position['height'] = $pixel;
            break;
        case 'up':
            $position['left'] = $this->padding;
            $position['top'] = $this->height - $this->padding - $pixel;
            $position['width'] = $this->width - ($this->padding * 2);
            $position['height'] = $pixel;
            break;
        }
        return $position;
    }

    /**
     * Sets the new step value of the progress bar.
     *
     * @param      integer   $step          new step value
     *
     * @return     void
     * @since      2.0.0
     * @access     private
     */
    function _setStep($step)
    {
        if($step > $this->max) {
            $step = $this->max;
        }
        if($step < $this->min) {
            $step = $this->min;
        }
        $this->_step = $step;
    }

    /**
     * Sends a DOM command (emulate cssText attribute) through a javascript function
     * to change styles of a progress bar's element.
     *
     * @param      string    $prefix        prefix identifier of the element
     * @param      string    $element       element name (label id.)
     * @param      string    $styles        styles of a DOM element
     *
     * @return     string
     * @since      2.0.0
     * @access     private
     */
    function _changeElementStyle($prefix, $element, $styles)
    {
        $cmd = '<script type="text/JavaScript">'
             . 'setElementStyle' . $this->_ident
             . '("' . $prefix . '","' . $element . '","' . $styles . '");'
             . '</script>';

        return $cmd;
    }

    /**
     * Sends a DOM command (emulate firstChild.nodeValue) through a javascript function
     * to change label value of a progress bar's element.
     *
     * @param      string    $element       element name (label id.)
     * @param      string    $text          element value (label content)
     *
     * @return     string
     * @since      2.0.0
     * @access     private
     */
    function _changeLabelText($element, $text)
    {
        $cmd = '<script type="text/JavaScript">'
             . 'setLabelText' . $this->_ident
             . '("' . $element . '","' . $text . '");'
             . '</script>';

        return $cmd;
    }

    /**
     * Sends a DOM command through a javascript function
     * to change the next frame animation of a cross bar's element.
     *
     * @param      string    $element       element name (cross id.)
     *
     * @return     string
     * @since      2.0.0
     * @access     private
     */
    function _changeCrossItem($element)
    {
        $cmd = '<script type="text/JavaScript">'
             . 'setRotaryCross' . $element . $this->_ident . '();'
             . '</script>';

        return $cmd;
    }
}
?>