/*
* Not official Prototype JS lib!
* The original license applies to this one as well...
* ENHANCEMENTS: 
*  - size
*  - currentTarget support in IE
*  - lastDescendant support (same as firstDescendant it just returns the last childNode instead of the first one) 
*/
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('G 1f={89:\'1.6.0.3\',1R:{3W:!!(1D.78&&47.48.3r(\'49\')===-1),49:47.48.3r(\'49\')>-1,4a:47.48.3r(\'dd/\')>-1,79:47.48.3r(\'79\')>-1&&47.48.3r(\'a7\')===-1,a8:!!47.48.1g(/de.*df.*a9/)},3K:{7a:!!1b.2P,aa:!!1b.ab,6g:!!1D.6h,7b:1b.3X(\'1O\')[\'4V\']&&1b.3X(\'1O\')[\'4V\']!==1b.3X(\'1y\')[\'4V\']},7c:\'<4W[^>]*>([\\\\S\\\\s]*?)<\\/4W>\',ac:/^\\/\\*-dg-([\\s\\S]*)\\*\\/\\s*$/,3g:q(){},K:q(x){o x}};E(1f.1R.a8)1f.3K.7b=1p;G 2f={2u:q(){G 2Q=1j,3h=$A(1q);E(M.2A(3h[0]))2Q=3h.4X();q 1M(){C.2I.3s(C,1q)}M.17(1M,2f.1c);1M.8a=2Q;1M.ad=[];E(2Q){G 8b=q(){};8b.1k=2Q.1k;1M.1k=1t 8b;2Q.ad.1h(1M)}18(G i=0;i<3h.O;i++)1M.6i(3h[i]);E(!1M.1k.2I)1M.1k.2I=1f.3g;1M.1k.dh=1M;o 1M}};2f.1c={6i:q(24){G 3L=C.8a&&C.8a.1k;G 3h=M.4b(24);E(!M.4b({2J:1v}).O)3h.1h("2J","8c");18(G i=0,O=3h.O;i<O;i++){G 1z=3h[i],I=24[1z];E(3L&&M.2A(I)&&I.ae().3M()=="$4c"){G 1B=I;I=(q(m){o q(){o 3L[m].3s(C,1q)}})(1z).4z(1B);I.8c=1B.8c.2B(1B);I.2J=1B.2J.2B(1B)}C.1k[1z]=I}o C}};G 4Y={};M.17=q(5x,24){18(G 1z 1P 24)5x[1z]=24[1z];o 5x};M.17(M,{2C:q(W){25{E(M.2D(W))o\'4A\';E(W===1j)o\'1j\';o W.2C?W.2C():22(W)}2a(e){E(e af di)o\'...\';4B e;}},3t:q(W){G 1r=3i W;4Z(1r){2g\'4A\':2g\'q\':2g\'dj\':o;2g\'dk\':o W.2J()}E(W===1j)o\'1j\';E(W.3t)o W.3t();E(M.4d(W))o;G U=[];18(G 1z 1P W){G I=M.3t(W[1z]);E(!M.2D(I))U.1h(1z.3t()+\': \'+I)}o\'{\'+U.2E(\', \')+\'}\'},4C:q(W){o $H(W).4C()},4e:q(W){o W&&W.4e?W.4e():22.5y(W)},4b:q(W){G 4b=[];18(G 1z 1P W)4b.1h(1z);o 4b},1S:q(W){G 1S=[];18(G 1z 1P W)1S.1h(W[1z]);o 1S},2F:q(W){o M.17({},W)},4d:q(W){o!!(W&&W.3j==1)},4D:q(W){o W!=1j&&3i W=="W"&&\'dl\'1P W&&\'2E\'1P W},8d:q(W){o W af 3Y},2A:q(W){o 3i W=="q"},3k:q(W){o 3i W=="3l"},50:q(W){o 3i W=="3Z"},2D:q(W){o 3i W=="4A"}});M.17(dm.1k,{ae:q(){G 3u=C.2J().1g(/^[\\s\\(]*q[^(]*\\(([^\\)]*)\\)/)[1].1T(/\\s+/g,\'\').4f(\',\');o 3u.O==1&&!3u[0]?[]:3u},2B:q(){E(1q.O<2&&M.2D(1q[0]))o C;G 3m=C,1U=$A(1q),W=1U.4X();o q(){o 3m.3s(W,1U.1V($A(1q)))}},dn:q(){G 3m=C,1U=$A(1q),W=1U.4X();o q(19){o 3m.3s(W,[19||1D.19].1V(1U))}},8e:q(){E(!1q.O)o C;G 3m=C,1U=$A(1q);o q(){o 3m.3s(C,1U.1V($A(1q)))}},8f:q(){G 3m=C,1U=$A(1q),ag=1U.4X()*ah;o 1D.dp(q(){o 3m.3s(3m,1U)},ag)},4E:q(){G 1U=[0.dq].1V($A(1q));o C.8f.3s(C,1U)},4z:q(1L){G 3m=C;o q(){o 1L.3s(C,[3m.2B(C)].1V($A(1q)))}},4F:q(){E(C.8g)o C.8g;G 3m=C;o C.8g=q(){o 3m.3s(1j,[C].1V($A(1q)))}}});dr.1k.3t=q(){o\'"\'+C.ds()+\'-\'+(C.dt()+1).4G(2)+\'-\'+C.du().4G(2)+\'T\'+C.dv().4G(2)+\':\'+C.dw().4G(2)+\':\'+C.dx().4G(2)+\'Z"\'};G ai={aj:q(){G 7d;18(G i=0,O=1q.O;i<O;i++){G ak=1q[i];25{7d=ak();2h}2a(e){}}o 7d}};4g.1k.1g=4g.1k.2R;4g.al=q(5z){o 22(5z).1T(/([.*+?^=!:${}()|[\\]\\/\\\\])/g,\'\\\\$1\')};G am=2f.2u({2I:q(31,4h){C.31=31;C.4h=4h;C.7e=1p;C.6j()},6j:q(){C.41=an(C.6k.2B(C),C.4h*ah)},8h:q(){C.31(C)},8i:q(){E(!C.41)o;ao(C.41);C.41=1j},6k:q(){E(!C.7e){25{C.7e=1v;C.8h()}dy{C.7e=1p}}}});M.17(22,{5y:q(I){o I==1j?\'\':22(I)},ap:{\'\\b\':\'\\\\b\',\'\\t\':\'\\\\t\',\'\\n\':\'\\\\n\',\'\\f\':\'\\\\f\',\'\\r\':\'\\\\r\',\'\\\\\':\'\\\\\\\\\'}});M.17(22.1k,{3n:q(26,3v){G 1s=\'\',24=C,1g;3v=1q.5A.8j(3v);1N(24.O>0){E(1g=24.1g(26)){1s+=24.3w(0,1g.1m);1s+=22.5y(3v(1g));24=24.3w(1g.1m+1g[0].O)}1i{1s+=24,24=\'\'}}o 1s},aq:q(26,3v,3x){3v=C.3n.8j(3v);3x=M.2D(3x)?1:3x;o C.3n(26,q(1g){E(--3x<0)o 1g[0];o 3v(1g)})},ar:q(26,1e){C.3n(26,1e);o 22(C)},dz:q(O,5B){O=O||30;5B=M.2D(5B)?\'...\':5B;o C.O>O?C.3w(0,O-5B.O)+5B:22(C)},4i:q(){o C.1T(/^\\s+/,\'\').1T(/\\s+$/,\'\')},8k:q(){o C.1T(/<\\/?[^>]+>/gi,\'\')},4j:q(){o C.1T(1t 4g(1f.7c,\'at\'),\'\')},au:q(){G av=1t 4g(1f.7c,\'at\');G aw=1t 4g(1f.7c,\'dA\');o(C.1g(av)||[]).2S(q(ax){o(ax.1g(aw)||[\'\',\'\'])[1]})},51:q(){o C.au().2S(q(4W){o 7f(4W)})},6l:q(){G 5C=1q.5A;5C.4k.7g=C;o 5C.1O.52},ay:q(){G 1O=1t J(\'1O\');1O.52=C.8k();o 1O.3o[0]?(1O.3o.O>1?$A(1O.3o).3y(\'\',q(2T,L){o 2T+L.4l}):1O.3o[0].4l):\'\'},7h:q(az){G 1g=C.4i().1g(/([^?#]*)(#.*)?$/);E(!1g)o{};o 1g[1].4f(az||\'&\').3y({},q(3z,1G){E((1G=1G.4f(\'=\'))[0]){G 1w=8l(1G.4X());G I=1G.O>1?1G.2E(\'=\'):1G[0];E(I!=4A)I=8l(I);E(1w 1P 3z){E(!M.4D(3z[1w]))3z[1w]=[3z[1w]];3z[1w].1h(I)}1i 3z[1w]=I}o 3z})},3A:q(){o C.4f(\'\')},8m:q(){o C.3w(0,C.O-1)+22.dB(C.aA(C.O-1)+1)},7i:q(3x){o 3x<1?\'\':1t 2m(3x+1).2E(C)},8n:q(){G 4H=C.4f(\'-\'),8o=4H.O;E(8o==1)o 4H[0];G 8p=C.7j(0)==\'-\'?4H[0].7j(0).2o()+4H[0].5D(1):4H[0];18(G i=1;i<8o;i++)8p+=4H[i].7j(0).2o()+4H[i].5D(1);o 8p},6m:q(){o C.7j(0).2o()+C.5D(1).2b()},dC:q(){o C.3n(/::/,\'/\').3n(/([A-Z]+)([A-Z][a-z])/,\'#{1}6n#{2}\').3n(/([a-z\\d])([A-Z])/,\'#{1}6n#{2}\').3n(/-/,\'6n\').2b()},dD:q(){o C.3n(/6n/,\'-\')},2C:q(aB){G 8q=C.3n(/[\\dE-\\dF\\\\]/,q(1g){G 8r=22.ap[1g[0]];o 8r?8r:\'\\\\dG\'+1g[0].aA().4G(2,16)});E(aB)o\'"\'+8q.1T(/"/g,\'\\\\"\')+\'"\';o"\'"+8q.1T(/\'/g,\'\\\\\\\'\')+"\'"},3t:q(){o C.2C(1v)},8s:q(2i){o C.aq(2i||1f.ac,\'#{1}\')},aC:q(){G 5z=C;E(5z.53())o 1p;5z=C.1T(/\\\\./g,\'@\').1T(/"[^"\\\\\\n\\r]*"/g,\'\');o(/^[,:{}\\[\\]0-9.\\-+dH-u \\n\\r\\t]*$/).2R(5z)},5E:q(aD){G 3p=C.8s();25{E(!aD||3p.aC())o 7f(\'(\'+3p+\')\')}2a(e){}4B 1t dI(\'dJ dK aE 3l: \'+C.2C());},1H:q(26){o C.3r(26)>-1},8t:q(26){o C.3r(26)===0},8u:q(26){G d=C.O-26.O;o d>=0&&C.8v(26)===d},5F:q(){o C==\'\'},53:q(){o/^\\s*$/.2R(C)},aF:q(W,26){o 1t 32(C,26).2P(W)}});E(1f.1R.4a||1f.1R.3W)M.17(22.1k,{6l:q(){o C.1T(/&/g,\'&aG;\').1T(/</g,\'&aH;\').1T(/>/g,\'&gt;\')},ay:q(){o C.8k().1T(/&aG;/g,\'&\').1T(/&aH;/g,\'<\').1T(/&gt;/g,\'>\')}});22.1k.3n.8j=q(3v){E(M.2A(3v))o 3v;G 5G=1t 32(3v);o q(1g){o 5G.2P(1g)}};22.1k.dL=22.1k.7h;M.17(22.1k.6l,{1O:1b.3X(\'1O\'),4k:1b.aI(\'\')});22.1k.6l.1O.5H(22.1k.6l.4k);G 32=2f.2u({2I:q(5G,26){C.5G=5G.2J();C.26=26||32.aJ},2P:q(W){E(M.2A(W.8w))W=W.8w();o C.5G.3n(C.26,q(1g){E(W==1j)o\'\';G 54=1g[1]||\'\';E(54==\'\\\\\')o 1g[2];G 6o=W,6p=1g[3];G 26=/^([^.[]+|\\[((?:.*?[^\\\\])?)\\])(\\.|\\[|$)/;1g=26.aK(6p);E(1g==1j)o 54;1N(1g!=1j){G aL=1g[1].8t(\'[\')?1g[2].3n(\'\\\\\\\\]\',\']\'):1g[1];6o=6o[aL];E(1j==6o||\'\'==1g[3])2h;6p=6p.5D(\'[\'==1g[3]?1g[1].O:1g[0].O);1g=26.aK(6p)}o 54+22.5y(6o)})}});32.aJ=/(^|.|\\r|\\n)(#\\{(.*?)\\})/;G $2h={};G 2K={1E:q(1e,1I){G 1m=0;25{C.4m(q(I){1e.2L(1I,I,1m++)})}2a(e){E(e!=$2h)4B e;}o C},aM:q(3Z,1e,1I){G 1m=-3Z,8x=[],2v=C.3A();E(3Z<1)o 2v;1N((1m+=3Z)<2v.O)8x.1h(2v.3w(1m,1m+3Z));o 8x.8y(1e,1I)},8z:q(1e,1I){1e=1e||1f.K;G 1s=1v;C.1E(q(I,1m){1s=1s&&!!1e.2L(1I,I,1m);E(!1s)4B $2h;});o 1s},aN:q(1e,1I){1e=1e||1f.K;G 1s=1p;C.1E(q(I,1m){E(1s=!!1e.2L(1I,I,1m))4B $2h;});o 1s},8y:q(1e,1I){1e=1e||1f.K;G U=[];C.1E(q(I,1m){U.1h(1e.2L(1I,I,1m))});o U},7k:q(1e,1I){G 1s;C.1E(q(I,1m){E(1e.2L(1I,I,1m)){1s=I;4B $2h;}});o 1s},5I:q(1e,1I){G U=[];C.1E(q(I,1m){E(1e.2L(1I,I,1m))U.1h(I)});o U},dM:q(2i,1e,1I){1e=1e||1f.K;G U=[];E(M.3k(2i))2i=1t 4g(2i);C.1E(q(I,1m){E(2i.1g(I))U.1h(1e.2L(1I,I,1m))});o U},1H:q(W){E(M.2A(C.3r))E(C.3r(W)!=-1)o 1v;G 8A=1p;C.1E(q(I){E(I==W){8A=1v;4B $2h;}});o 8A},dN:q(3Z,6q){6q=M.2D(6q)?1j:6q;o C.aM(3Z,q(3w){1N(3w.O<3Z)3w.1h(6q);o 3w})},3y:q(2T,1e,1I){C.1E(q(I,1m){2T=1e.2L(1I,2T,I,1m)});o 2T},8B:q(1B){G 1U=$A(1q).3w(1);o C.2S(q(I){o I[1B].3s(I,1U)})},dO:q(1e,1I){1e=1e||1f.K;G 1s;C.1E(q(I,1m){I=1e.2L(1I,I,1m);E(1s==1j||I>=1s)1s=I});o 1s},dP:q(1e,1I){1e=1e||1f.K;G 1s;C.1E(q(I,1m){I=1e.2L(1I,I,1m);E(1s==1j||I<1s)1s=I});o 1s},dQ:q(1e,1I){1e=1e||1f.K;G 8C=[],8D=[];C.1E(q(I,1m){(1e.2L(1I,I,1m)?8C:8D).1h(I)});o[8C,8D]},5J:q(1z){G U=[];C.1E(q(I){U.1h(I[1z])});o U},dR:q(1e,1I){G U=[];C.1E(q(I,1m){E(!1e.2L(1I,I,1m))U.1h(I)});o U},aO:q(1e,1I){o C.2S(q(I,1m){o{I:I,6r:1e.2L(1I,I,1m)}}).dS(q(2w,5K){G a=2w.6r,b=5K.6r;o a<b?-1:a>b?1:0}).5J(\'I\')},3A:q(){o C.2S()},dT:q(){G 1e=1f.K,1U=$A(1q);E(M.2A(1U.2x()))1e=1U.dU();G aP=[C].1V(1U).2S($A);o C.2S(q(I,1m){o 1e(aP.5J(1m))})},aQ:q(){o C.3A().O},2C:q(){o\'#<2K:\'+C.3A().2C()+\'>\'}};M.17(2K,{2S:2K.8y,8E:2K.7k,2G:2K.5I,2i:2K.5I,dV:2K.1H,dW:2K.3A,dX:2K.8z,dY:2K.aN});q $A(2U){E(!2U)o[];E(2U.3A)o 2U.3A();G O=2U.O||0,U=1t 2m(O);1N(O--)U[O]=2U[O];o U}E(1f.1R.4a){$A=q(2U){E(!2U)o[];E(!(3i 2U===\'q\'&&3i 2U.O===\'3Z\'&&3i 2U.55===\'q\')&&2U.3A)o 2U.3A();G O=2U.O||0,U=1t 2m(O);1N(O--)U[O]=2U[O];o U}}2m.aR=$A;M.17(2m.1k,2K);E(!2m.1k.8F)2m.1k.8F=2m.1k.4n;M.17(2m.1k,{4m:q(1e){18(G i=0,O=C.O;i<O;i++)1e(C[i])},aS:q(){C.O=0;o C},3M:q(){o C[0]},2x:q(){o C[C.O-1]},dZ:q(){o C.2G(q(I){o I!=1j})},aT:q(){o C.3y([],q(2v,I){o 2v.1V(M.4D(I)?I.aT():[I])})},6s:q(){G 1S=$A(1q);o C.2G(q(I){o!1S.1H(I)})},4n:q(aU){o(aU!==1p?C:C.3A()).8F()},e0:q(){o C.O>1?C:C[0]},aV:q(aW){o C.3y([],q(2v,I,1m){E(0==1m||(aW?2v.2x()!=I:!2v.1H(I)))2v.1h(I);o 2v})},e1:q(2v){o C.aV().5I(q(55){o 2v.7k(q(I){o 55===I})})},2F:q(){o[].1V(C)},aQ:q(){o C.O},2C:q(){o\'[\'+C.2S(M.2C).2E(\', \')+\']\'},3t:q(){G U=[];C.1E(q(W){G I=M.3t(W);E(!M.2D(I))U.1h(I)});o\'[\'+U.2E(\', \')+\']\'}});E(M.2A(2m.1k.aX))2m.1k.4m=2m.1k.aX;E(!2m.1k.3r)2m.1k.3r=q(55,i){i||(i=0);G O=C.O;E(i<0)i=O+i;18(;i<O;i++)E(C[i]===55)o i;o-1};E(!2m.1k.8v)2m.1k.8v=q(55,i){i=e2(i)?C.O:(i<0?C.O+i:i)+1;G n=C.3w(0,i).4n().3r(55);o(n<0)?n:i-n-1};2m.1k.3A=2m.1k.2F;q $w(3l){E(!M.3k(3l))o[];3l=3l.4i();o 3l?3l.4f(/\\s+/):[]}E(1f.1R.49){2m.1k.1V=q(){G 2v=[];18(G i=0,O=C.O;i<O;i++)2v.1h(C[i]);18(G i=0,O=1q.O;i<O;i++){E(M.4D(1q[i])){18(G j=0,aY=1q[i].O;j<aY;j++)2v.1h(1q[i][j])}1i{2v.1h(1q[i])}}o 2v}}M.17(56.1k,{e3:q(){o C.4G(2,16)},8m:q(){o C+1},7i:q(1e,1I){$R(0,C,1v).1E(1e,1I);o C},4G:q(O,aZ){G 3l=C.2J(aZ||10);o\'0\'.7i(O-3l.O)+3l},3t:q(){o e4(C)?C.2J():\'1j\'}});$w(\'e5 e6 e7 e8\').1E(q(1B){56.1k[1B]=e9[1B].4F()});q $H(W){o 1t 3Y(W)};G 3Y=2f.2u(2K,(q(){q 8G(1w,I){E(M.2D(I))o 1w;o 1w+\'=\'+b0(22.5y(I))}o{2I:q(W){C.4o=M.8d(W)?W.6t():M.2F(W)},4m:q(1e){18(G 1w 1P C.4o){G I=C.4o[1w],1G=[1w,I];1G.1w=1w;1G.I=I;1e(1G)}},6u:q(1w,I){o C.4o[1w]=I},8H:q(1w){E(C.4o[1w]!==M.1k[1w])o C.4o[1w]},ea:q(1w){G I=C.4o[1w];8I C.4o[1w];o I},6t:q(){o M.2F(C.4o)},4b:q(){o C.5J(\'1w\')},1S:q(){o C.5J(\'I\')},1m:q(I){G 1g=C.7k(q(1G){o 1G.I===I});o 1g&&1g.1w},eb:q(W){o C.2F().57(W)},57:q(W){o 1t 3Y(W).3y(C,q(1s,1G){1s.6u(1G.1w,1G.I);o 1s})},4C:q(){o C.3y([],q(U,1G){G 1w=b0(1G.1w),1S=1G.I;E(1S&&3i 1S==\'W\'){E(M.4D(1S))o U.1V(1S.2S(8G.8e(1w)))}1i U.1h(8G(1w,1S));o U}).2E(\'&\')},2C:q(){o\'#<3Y:{\'+C.2S(q(1G){o 1G.2S(M.2C).2E(\': \')}).2E(\', \')+\'}>\'},3t:q(){o M.3t(C.6t())},2F:q(){o 1t 3Y(C)}}})());3Y.1k.8w=3Y.1k.6t;3Y.aR=$H;G b1=2f.2u(2K,{2I:q(4p,58,5L){C.4p=4p;C.58=58;C.5L=5L},4m:q(1e){G I=C.4p;1N(C.1H(I)){1e(I);I=I.8m()}},1H:q(I){E(I<C.4p)o 1p;E(C.5L)o I<C.58;o I<=C.58}});G $R=q(4p,58,5L){o 1t b1(4p,58,5L)};G 1Q={b2:q(){o ai.aj(q(){o 1t b3()},q(){o 1t b4(\'ec.b5\')},q(){o 1t b4(\'ed.b5\')})||1p},8J:0};1Q.5M={6v:[],4m:q(1e){C.6v.4m(1e)},b6:q(4q){E(!C.1H(4q))C.6v.1h(4q)},ee:q(4q){C.6v=C.6v.6s(4q)},7l:q(31,2V,1Y,3p){C.1E(q(4q){E(M.2A(4q[31])){25{4q[31].3s(4q,[2V,1Y,3p])}2a(e){}}})}};M.17(1Q.5M,2K);1Q.5M.b6({7m:q(){1Q.8J++},3N:q(){1Q.8J--}});1Q.8K=2f.2u({2I:q(V){C.V={1B:\'6w\',7n:1v,6x:\'7o/x-ef-1y-eg\',8L:\'eh-8\',3B:\'\',5E:1v,8M:1v};M.17(C.V,V||{});C.V.1B=C.V.1B.2b();E(M.3k(C.V.3B))C.V.3B=C.V.3B.7h();1i E(M.8d(C.V.3B))C.V.3B=C.V.3B.6t()}});1Q.59=2f.2u(1Q.8K,{8N:1p,2I:q($4c,2W,V){$4c(V);C.1Y=1Q.b2();C.2V(2W)},2V:q(2W){C.2W=2W;C.1B=C.V.1B;G 3a=M.2F(C.V.3B);E(![\'8H\',\'6w\'].1H(C.1B)){3a[\'ei\']=C.1B;C.1B=\'6w\'}C.3B=3a;E(3a=M.4C(3a)){E(C.1B==\'8H\')C.2W+=(C.2W.1H(\'?\')?\'&\':\'?\')+3a;1i E(/ej|a9|a7/.2R(47.48))3a+=\'&6n=\'}25{G 2y=1t 1Q.8O(C);E(C.V.7m)C.V.7m(2y);1Q.5M.7l(\'7m\',C,2y);C.1Y.ek(C.1B.2o(),C.2W,C.V.7n);E(C.V.7n)C.8P.2B(C).4E(1);C.1Y.7p=C.8Q.2B(C);C.b7();C.2c=C.1B==\'6w\'?(C.V.el||3a):1j;C.1Y.em(C.2c);E(!C.V.7n&&C.1Y.b8)C.8Q()}2a(e){C.5a(e)}},8Q:q(){G 2X=C.1Y.2X;E(2X>1&&!((2X==4)&&C.8N))C.8P(C.1Y.2X)},b7:q(){G 5b={\'X-eo-ep\':\'b3\',\'X-1f-89\':1f.89,\'eq\':\'4k/er, 4k/7q, 7o/6y, 4k/6y, */*\'};E(C.1B==\'6w\'){5b[\'8R-1r\']=C.V.6x+(C.V.8L?\'; es=\'+C.V.8L:\'\');E(C.1Y.b8&&(47.48.1g(/79\\/(\\d{4})/)||[0,b9])[1]<b9)5b[\'et\']=\'eu\'}E(3i C.V.ba==\'W\'){G 5N=C.V.ba;E(M.2A(5N.1h))18(G i=0,O=5N.O;i<O;i+=2)5b[5N[i]]=5N[i+1];1i $H(5N).1E(q(1G){5b[1G.1w]=1G.I})}18(G 1d 1P 5b)C.1Y.ev(1d,5b[1d])},5c:q(){G 4I=C.6z();o!4I||(4I>=ew&&4I<ex)},6z:q(){25{o C.1Y.4I||0}2a(e){o 0}},8P:q(2X){G 6A=1Q.59.bb[2X],2y=1t 1Q.8O(C);E(6A==\'8S\'){25{C.8N=1v;(C.V[\'5O\'+2y.4I]||C.V[\'5O\'+(C.5c()?\'ey\':\'ez\')]||1f.3g)(2y,2y.7r)}2a(e){C.5a(e)}G 6x=2y.5P(\'8R-1r\');E(C.V.8M==\'bc\'||(C.V.8M&&C.7s()&&6x&&6x.1g(/^\\s*(4k|7o)\\/(x-)?(eA|eB)4W(;.*)?\\s*$/i)))C.bd()}25{(C.V[\'5O\'+6A]||1f.3g)(2y,2y.7r);1Q.5M.7l(\'5O\'+6A,C,2y,2y.7r)}2a(e){C.5a(e)}E(6A==\'8S\'){C.1Y.7p=1f.3g}},7s:q(){G m=C.2W.1g(/^\\s*eC?:\\/\\/[^\\/]*/);o!m||(m[0]==\'#{8T}//#{8U}#{7t}\'.aF({8T:7u.8T,8U:1b.8U,7t:7u.7t?\':\'+7u.7t:\'\'}))},5P:q(1d){25{o C.1Y.8V(1d)||1j}2a(e){o 1j}},bd:q(){25{o 7f((C.1Y.3b||\'\').8s())}2a(e){C.5a(e)}},5a:q(8W){(C.V.be||1f.3g)(C,8W);1Q.5M.7l(\'be\',C,8W)}});1Q.59.bb=[\'eD\',\'eE\',\'eF\',\'eG\',\'8S\'];1Q.8O=2f.2u({2I:q(2V){C.2V=2V;G 1Y=C.1Y=2V.1Y,2X=C.2X=1Y.2X;E((2X>2&&!1f.1R.3W)||2X==4){C.4I=C.6z();C.8X=C.bf();C.3b=22.5y(1Y.3b);C.7r=C.bg()}E(2X==4){G 6y=1Y.bh;C.bh=M.2D(6y)?1j:6y;C.eH=C.bi()}},4I:0,8X:\'\',6z:1Q.59.1k.6z,bf:q(){25{o C.1Y.8X||\'\'}2a(e){o\'\'}},5P:1Q.59.1k.5P,eI:q(){25{o C.8Y()}2a(e){o 1j}},8V:q(1d){o C.1Y.8V(1d)},8Y:q(){o C.1Y.8Y()},bg:q(){G 3p=C.5P(\'X-aE\');E(!3p)o 1j;3p=8l(al(3p));25{o 3p.5E(C.2V.V.bj||!C.2V.7s())}2a(e){C.2V.5a(e)}},bi:q(){G V=C.2V.V;E(!V.5E||(V.5E!=\'bc\'&&!(C.5P(\'8R-1r\')||\'\').1H(\'7o/3p\'))||C.3b.53())o 1j;25{o C.3b.5E(V.bj||!C.2V.7s())}2a(e){C.2V.5a(e)}}});1Q.bk=2f.2u(1Q.59,{2I:q($4c,3C,2W,V){C.3C={5c:(3C.5c||3C),8Z:(3C.8Z||(3C.5c?1j:3C))};V=M.2F(V);G 3N=V.3N;V.3N=(q(2y,3p){C.bl(2y.3b);E(M.2A(3N))3N(2y,3p)}).2B(C);$4c(2W,V)},bl:q(3b){G 5Q=C.3C[C.5c()?\'5c\':\'8Z\'],V=C.V;E(!V.51)3b=3b.4j();E(5Q=$(5Q)){E(V.5d){E(M.3k(V.5d)){G 5d={};5d[V.5d]=3b;5Q.3D(5d)}1i V.5d(5Q,3b)}1i 5Q.57(3b)}}});1Q.eJ=2f.2u(1Q.8K,{2I:q($4c,3C,2W,V){$4c(V);C.3N=C.V.3N;C.4h=(C.V.4h||2);C.5e=(C.V.5e||1);C.90={};C.3C=3C;C.2W=2W;C.4p()},4p:q(){C.V.3N=C.bm.2B(C);C.6k()},8i:q(){C.90.V.3N=4A;eK(C.41);(C.3N||1f.3g).3s(C,1q)},bm:q(2y){E(C.V.5e){C.5e=(2y.3b==C.bn?C.5e*C.V.5e:1);C.bn=2y.3b}C.41=C.6k.2B(C).8f(C.5e*C.4h)},6k:q(){C.90=1t 1Q.bk(C.3C,C.2W,C.V)}});q $(k){E(1q.O>1){18(G i=0,1Z=[],O=1q.O;i<O;i++)1Z.1h($(1q[i]));o 1Z}E(M.3k(k))k=1b.eL(k);o J.17(k)}E(1f.3K.7a){1b.91=q(1u,7v){G U=[];G 92=1b.2P(1u,$(7v)||1b,1j,eM.eN,1j);18(G i=0,O=92.eO;i<O;i++)U.1h(J.17(92.eP(i)));o U}}E(!1D.6B)G 6B={};E(!6B.bo){M.17(6B,{bo:1,eQ:2,bp:3,eR:4,eS:5,eT:6,eU:7,eV:8,eW:9,eX:10,eY:11,eZ:12})}(q(){G k=C.J;C.J=q(15,2p){2p=2p||{};15=15.2b();G 2Y=J.2Y;E(1f.1R.3W&&2p.1d){15=\'<\'+15+\' 1d="\'+2p.1d+\'">\';8I 2p.1d;o J.6C(1b.3X(15),2p)}E(!2Y[15])2Y[15]=J.17(1b.3X(15));o J.6C(2Y[15].f0(1p),2p)};M.17(C.J,k||{});E(k)C.J.1k=k.1k}).2L(1D);J.2Y={};J.1c={93:q(k){o $(k).Y.3E!=\'7w\'},bq:q(k){k=$(k);J[J.93(k)?\'br\':\'bs\'](k);o k},br:q(k){k=$(k);k.Y.3E=\'7w\';o k},bs:q(k){k=$(k);k.Y.3E=\'\';o k},bt:q(k){k=$(k);k.1W.6D(k);o k},57:q(k,1a){k=$(k);E(1a&&1a.3F)1a=1a.3F();E(M.4d(1a))o k.57().3D(1a);1a=M.4e(1a);k.52=1a.4j();1a.51.2B(1a).4E();o k},1T:q(k,1a){k=$(k);E(1a&&1a.3F)1a=1a.3F();1i E(!M.4d(1a)){1a=M.4e(1a);G 94=k.f1.f2();94.f3(k);1a.51.2B(1a).4E();1a=94.f4(1a.4j())}k.1W.95(1a,k);o k},3D:q(k,3O){k=$(k);E(M.3k(3O)||M.50(3O)||M.4d(3O)||(3O&&(3O.3F||3O.4e)))3O={5f:3O};G 1a,3D,15,3o;18(G 1x 1P 3O){1a=3O[1x];1x=1x.2b();3D=J.5R[1x];E(1a&&1a.3F)1a=1a.3F();E(M.4d(1a)){3D(k,1a);3P}1a=M.4e(1a);15=((1x==\'54\'||1x==\'7x\')?k.1W:k).15.2o();3o=J.7y(15,1a.4j());E(1x==\'2q\'||1x==\'7x\')3o.4n();3o.1E(3D.8e(k));1a.51.2B(1a).4E()}o k},4z:q(k,1L,2p){k=$(k);E(M.4d(1L))$(1L).6C(2p||{});1i E(M.3k(1L))1L=1t J(1L,2p);1i 1L=1t J(\'1O\',1L);E(k.1W)k.1W.95(1L,k);1L.5H(k);o 1L},2C:q(k){k=$(k);G 1s=\'<\'+k.15.2b();$H({\'1o\':\'1o\',\'1l\':\'6E\'}).1E(q(1G){G 1z=1G.3M(),1X=1G.2x();G I=(k[1z]||\'\').2J();E(I)1s+=\' \'+1X+\'=\'+I.2C(1v)});o 1s+\'>\'},7z:q(k,1z){k=$(k);G 1Z=[];1N(k=k[1z])E(k.3j==1)1Z.1h(J.17(k));o 1Z},5S:q(k){o $(k).7z(\'1W\')},96:q(k){o $(k).2G("*")},bu:q(k){k=$(k).5T;1N(k&&k.3j!=1)k=k.4r;o $(k)},f5:q(k){G 5U=$(k).96();G 1e=1;k=5U[5U.O-1e];1N(k&&k.3j!=1&&1e<=5U.O){1e++;k=5U[5U.O-1e]}o $(k)},bv:q(k){E(!(k=$(k).5T))o[];1N(k&&k.3j!=1)k=k.4r;E(k)o[k].1V($(k).4J());o[]},5V:q(k){o $(k).7z(\'bw\')},4J:q(k){o $(k).7z(\'4r\')},f6:q(k){k=$(k);o k.5V().4n().1V(k.4J())},1g:q(k,42){E(M.3k(42))42=1t 14(42);o 42.1g($(k))},f7:q(k,1u,1m){k=$(k);E(1q.O==1)o $(k.1W);G 5S=k.5S();o M.50(1u)?5S[1u]:14.5W(5S,1u,1m)},f8:q(k,1u,1m){k=$(k);E(1q.O==1)o k.bu();o M.50(1u)?k.96()[1u]:J.2G(k,1u)[1m||0]},f9:q(k,1u,1m){k=$(k);E(1q.O==1)o $(14.28.6F(k));G 5V=k.5V();o M.50(1u)?5V[1u]:14.5W(5V,1u,1m)},6G:q(k,1u,1m){k=$(k);E(1q.O==1)o $(14.28.6H(k));G 4J=k.4J();o M.50(1u)?4J[1u]:14.5W(4J,1u,1m)},2G:q(){G 1U=$A(1q),k=$(1U.4X());o 14.7A(k,1U)},5g:q(){G 1U=$A(1q),k=$(1U.4X());o 14.7A(k.1W,1U).6s(k)},97:q(k){k=$(k);G 1o=k.5h(\'1o\'),5C=1q.5A;E(1o)o 1o;do{1o=\'fa\'+5C.bx++}1N($(1o));k.6C(\'1o\',1o);o 1o},5h:q(k,1d){k=$(k);E(1f.1R.3W){G t=J.3Q.7B;E(t.1S[1d])o t.1S[1d](k,1d);E(t.3u[1d])1d=t.3u[1d];E(1d.1H(\':\')){o(!k.2p||!k.2p[1d])?1j:k.2p[1d].I}}o k.98(1d)},6C:q(k,1d,I){k=$(k);G 2p={},t=J.3Q.6I;E(3i 1d==\'W\')2p=1d;1i 2p[1d]=M.2D(I)?1v:I;18(G 2d 1P 2p){1d=t.3u[2d]||2d;I=2p[2d];E(t.1S[2d])1d=t.1S[2d](k,I);E(I===1p||I===1j)k.99(1d);1i E(I===1v)k.by(1d,1d);1i k.by(1d,I)}o k},bz:q(k){o $(k).5X().3c},bA:q(k){o $(k).5X().2j},6J:q(k){o 1t J.7C(k)},7D:q(k,1l){E(!(k=$(k)))o;G 7E=k.1l;o(7E.O>0&&(7E==1l||1t 4g("(^|\\\\s)"+1l+"(\\\\s|$)").2R(7E)))},bB:q(k,1l){E(!(k=$(k)))o;E(!k.7D(1l))k.1l+=(k.1l?\' \':\'\')+1l;o k},bC:q(k,1l){E(!(k=$(k)))o;k.1l=k.1l.1T(1t 4g("(^|\\\\s+)"+1l+"(\\\\s+|$)"),\' \').4i();o k},fb:q(k,1l){E(!(k=$(k)))o;o k[k.7D(1l)?\'bC\':\'bB\'](1l)},fc:q(k){k=$(k);G L=k.5T;1N(L){G bD=L.4r;E(L.3j==3&&!/\\S/.2R(L.4l))k.6D(L);L=bD}o k},5F:q(k){o $(k).52.53()},7F:q(k,3L){k=$(k),3L=$(3L);E(k.bE)o(k.bE(3L)&8)===8;E(3L.5i)o 3L.5i(k)&&3L!==k;1N(k=k.1W)E(k==3L)o 1v;o 1p},bF:q(k){k=$(k);G 5Y=k.4s();1D.bF(5Y[0],5Y[1]);o k},2e:q(k,Y){k=$(k);Y=Y==\'9a\'?\'7G\':Y.8n();G I=k.Y[Y];E(!I||I==\'6K\'){G 9b=1b.fd.fe(k,1j);I=9b?9b[Y]:1j}E(Y==\'3R\')o I?5j(I):1.0;o I==\'6K\'?1j:I},ff:q(k){o $(k).2e(\'3R\')},5Z:q(k,4K){k=$(k);G 9c=k.Y,1g;E(M.3k(4K)){k.Y.9d+=\';\'+4K;o 4K.1H(\'3R\')?k.60(4K.1g(/3R:\\s*(\\d?\\.?\\d*)/)[1]):k}18(G 1z 1P 4K)E(1z==\'3R\')k.60(4K[1z]);1i 9c[(1z==\'9a\'||1z==\'7G\')?(M.2D(9c.9e)?\'7G\':\'9e\'):1z]=4K[1z];o k},60:q(k,I){k=$(k);k.Y.3R=(I==1||I===\'\')?\'\':(I<0.7H)?0:I;o k},5X:q(k){k=$(k);G 3E=k.2e(\'3E\');E(3E!=\'7w\'&&3E!=1j)o{2j:k.61,3c:k.62};G 43=k.Y;G bG=43.9f;G bH=43.1x;G bI=43.3E;43.9f=\'5k\';43.1x=\'63\';43.3E=\'fg\';G bJ=k.bK;G bL=k.bM;43.3E=bI;43.1x=bH;43.9f=bG;o{2j:bJ,3c:bL}},fh:q(k){k=$(k);G 5Y=J.2e(k,\'1x\');E(5Y==\'64\'||!5Y){k.9g=1v;k.Y.1x=\'6L\';E(1f.1R.49){k.Y.2q=0;k.Y.2w=0}}o k},fi:q(k){k=$(k);E(k.9g){k.9g=4A;k.Y.1x=k.Y.2q=k.Y.2w=k.Y.5f=k.Y.5K=\'\'}o k},fj:q(k){k=$(k);E(k.5l)o k;k.5l=J.2e(k,\'9h\')||\'6K\';E(k.5l!==\'5k\')k.Y.9h=\'5k\';o k},fk:q(k){k=$(k);E(!k.5l)o k;k.Y.9h=k.5l==\'6K\'?\'\':k.5l;k.5l=1j;o k},4s:q(k){G 2M=0,2N=0;do{2M+=k.5m||0;2N+=k.5n||0;k=k.2O}1N(k);o J.4t(2N,2M)},6M:q(k){G 2M=0,2N=0;do{2M+=k.5m||0;2N+=k.5n||0;k=k.2O;E(k){E(k.15.2o()==\'bN\')2h;G p=J.2e(k,\'1x\');E(p!==\'64\')2h}}1N(k);o J.4t(2N,2M)},9i:q(k){k=$(k);E(k.2e(\'1x\')==\'63\')o k;G 9j=k.6M();G 2q=9j[1];G 2w=9j[0];G 2j=k.bK;G 3c=k.bM;k.bO=2w-5j(k.Y.2w||0);k.bP=2q-5j(k.Y.2q||0);k.bQ=k.Y.2j;k.bR=k.Y.3c;k.Y.1x=\'63\';k.Y.2q=2q+\'3q\';k.Y.2w=2w+\'3q\';k.Y.2j=2j+\'3q\';k.Y.3c=3c+\'3q\';o k},9k:q(k){k=$(k);E(k.2e(\'1x\')==\'6L\')o k;k.Y.1x=\'6L\';G 2q=5j(k.Y.2q||0)-(k.bP||0);G 2w=5j(k.Y.2w||0)-(k.bO||0);k.Y.2q=2q+\'3q\';k.Y.2w=2w+\'3q\';k.Y.3c=k.bR;k.Y.2j=k.bQ;o k},9l:q(k){G 2M=0,2N=0;do{2M+=k.4u||0;2N+=k.4v||0;k=k.1W}1N(k);o J.4t(2N,2M)},65:q(k){E(k.2O)o $(k.2O);E(k==1b.2c)o $(k);1N((k=k.1W)&&k!=1b.2c)E(J.2e(k,\'1x\')!=\'64\')o $(k);o $(1b.2c)},6N:q(9m){G 2M=0,2N=0;G k=9m;do{2M+=k.5m||0;2N+=k.5n||0;E(k.2O==1b.2c&&J.2e(k,\'1x\')==\'63\')2h}1N(k=k.2O);k=9m;do{E(!1f.1R.49||(k.15&&(k.15.2o()==\'bN\'))){2M-=k.4u||0;2N-=k.4v||0}}1N(k=k.1W);o J.4t(2N,2M)},bS:q(k,24){G V=M.17({bT:1v,bU:1v,bV:1v,bW:1v,5m:0,5n:0},1q[2]||{});24=$(24);G p=24.6N();k=$(k);G 66=[0,0];G 2Q=1j;E(J.2e(k,\'1x\')==\'63\'){2Q=k.65();66=2Q.6N()}E(2Q==1b.2c){66[0]-=1b.2c.5n;66[1]-=1b.2c.5m}E(V.bT)k.Y.2w=(p[0]-66[0]+V.5n)+\'3q\';E(V.bU)k.Y.2q=(p[1]-66[1]+V.5m)+\'3q\';E(V.bV)k.Y.2j=24.61+\'3q\';E(V.bW)k.Y.3c=24.62+\'3q\';o k}};J.1c.97.bx=1;M.17(J.1c,{fl:J.1c.2G,fm:J.1c.bv});J.3Q={6I:{3u:{1l:\'6E\',bX:\'18\'},1S:{}}};E(1f.1R.49){J.1c.2e=J.1c.2e.4z(q(2Z,k,Y){4Z(Y){2g\'2w\':2g\'2q\':2g\'5K\':2g\'5f\':E(2Z(k,\'1x\')===\'64\')o 1j;2g\'3c\':2g\'2j\':E(!J.93(k))o 1j;G 7I=bY(2Z(k,Y),10);E(7I!==k[\'3d\'+Y.6m()])o 7I+\'3q\';G 3h;E(Y===\'3c\'){3h=[\'7J-2q-2j\',\'7K-2q\',\'7K-5f\',\'7J-5f-2j\']}1i{3h=[\'7J-2w-2j\',\'7K-2w\',\'7K-5K\',\'7J-5K-2j\']}o 3h.3y(7I,q(2T,1z){G 9n=2Z(k,1z);o 9n===1j?2T:2T-bY(9n,10)})+\'3q\';67:o 2Z(k,Y)}});J.1c.5h=J.1c.5h.4z(q(2Z,k,1X){E(1X===\'7L\')o k.7L;o 2Z(k,1X)})}1i E(1f.1R.3W){J.1c.65=J.1c.65.4z(q(2Z,k){k=$(k);25{k.2O}2a(e){o $(1b.2c)}G 1x=k.2e(\'1x\');E(1x!==\'64\')o 2Z(k);k.5Z({1x:\'6L\'});G I=2Z(k);k.5Z({1x:1x});o I});$w(\'6M 6N\').1E(q(1B){J.1c[1B]=J.1c[1B].4z(q(2Z,k){k=$(k);25{k.2O}2a(e){o J.4t(0,0)}G 1x=k.2e(\'1x\');E(1x!==\'64\')o 2Z(k);G 2O=k.65();E(2O&&2O.2e(\'1x\')===\'fn\')2O.5Z({9o:1});k.5Z({1x:\'6L\'});G I=2Z(k);k.5Z({1x:1x});o I})});J.1c.4s=J.1c.4s.4z(q(2Z,k){25{k.2O}2a(e){o J.4t(0,0)}o 2Z(k)});J.1c.2e=q(k,Y){k=$(k);Y=(Y==\'9a\'||Y==\'7G\')?\'9e\':Y.8n();G I=k.Y[Y];E(!I&&k.5o)I=k.5o[Y];E(Y==\'3R\'){E(I=(k.2e(\'2i\')||\'\').1g(/9p\\(3R=(.*)\\)/))E(I[1])o 5j(I[1])/bZ;o 1.0}E(I==\'6K\'){E((Y==\'2j\'||Y==\'3c\')&&(k.2e(\'3E\')!=\'7w\'))o k[\'3d\'+Y.6m()]+\'3q\';o 1j}o I};J.1c.60=q(k,I){q 9q(2i){o 2i.1T(/9p\\([^\\)]*\\)/gi,\'\')}k=$(k);G 5o=k.5o;E((5o&&!5o.fo)||(!5o&&k.Y.9o==\'c0\'))k.Y.9o=1;G 2i=k.2e(\'2i\'),Y=k.Y;E(I==1||I===\'\'){(2i=9q(2i))?Y.2i=2i:Y.99(\'2i\');o k}1i E(I<0.7H)I=0;Y.2i=9q(2i)+\'9p(3R=\'+(I*bZ)+\')\';o k};J.3Q={7B:{3u:{\'6E\':\'1l\',\'18\':\'bX\'},1S:{7M:q(k,1X){o k.98(1X,2)},c1:q(k,1X){G L=k.c2(1X);o L?L.I:""},2r:q(k,1X){1X=k.98(1X);o 1X?1X.2J().3w(23,-2):1j},6O:q(k,1X){o $(k).3S(1X)?1X:1j},Y:q(k){o k.Y.9d.2b()},7L:q(k){o k.7L}}}};J.3Q.6I={3u:M.17({fp:\'fq\',fr:\'fs\'},J.3Q.7B.3u),1S:{3T:q(k,I){k.3T=!!I},Y:q(k,I){k.Y.9d=I?I:\'\'}}};J.3Q.9r={};$w(\'ft fu fv fw fx 7N \'+\'fy fz fA fB fC\').1E(q(2d){J.3Q.6I.3u[2d.2b()]=2d;J.3Q.9r[2d.2b()]=2d});(q(v){M.17(v,{c3:v.7M,c4:v.7M,1r:v.7M,68:v.c1,3G:v.6O,3T:v.6O,fD:v.6O,fE:v.6O,fF:v.2r,c5:v.2r,fG:v.2r,fH:v.2r,fI:v.2r,fJ:v.2r,fK:v.2r,fL:v.2r,fM:v.2r,fN:v.2r,fO:v.2r,fP:v.2r,fQ:v.2r,fR:v.2r,fS:v.2r,fT:v.2r,fU:v.2r,fV:v.2r})})(J.3Q.7B.1S)}1i E(1f.1R.79&&/fW:1\\.8\\.0/.2R(47.48)){J.1c.60=q(k,I){k=$(k);k.Y.3R=(I==1)?0.fX:(I===\'\')?\'\':(I<0.7H)?0:I;o k}}1i E(1f.1R.4a){J.1c.60=q(k,I){k=$(k);k.Y.3R=(I==1||I===\'\')?\'\':(I<0.7H)?0:I;E(I==1)E(k.15.2o()==\'c6\'&&k.2j){k.2j++;k.2j--}1i 25{G n=1b.aI(\' \');k.5H(n);k.6D(n)}2a(e){}o k};J.1c.4s=q(k){G 2M=0,2N=0;do{2M+=k.5m||0;2N+=k.5n||0;E(k.2O==1b.2c)E(J.2e(k,\'1x\')==\'63\')2h;k=k.2O}1N(k);o J.4t(2N,2M)}}E(1f.1R.3W||1f.1R.49){J.1c.57=q(k,1a){k=$(k);E(1a&&1a.3F)1a=1a.3F();E(M.4d(1a))o k.57().3D(1a);1a=M.4e(1a);G 15=k.15.2o();E(15 1P J.5R.4L){$A(k.3o).1E(q(L){k.6D(L)});J.7y(15,1a.4j()).1E(q(L){k.5H(L)})}1i k.52=1a.4j();1a.51.2B(1a).4E();o k}}E(\'c7\'1P 1b.3X(\'1O\')){J.1c.1T=q(k,1a){k=$(k);E(1a&&1a.3F)1a=1a.3F();E(M.4d(1a)){k.1W.95(1a,k);o k}1a=M.4e(1a);G 2Q=k.1W,15=2Q.15.2o();E(J.5R.4L[15]){G 4r=k.6G();G 9s=J.7y(15,1a.4j());2Q.6D(k);E(4r)9s.1E(q(L){2Q.7O(L,4r)});1i 9s.1E(q(L){2Q.5H(L)})}1i k.c7=1a.4j();1a.51.2B(1a).4E();o k}}J.4t=q(l,t){G 1s=[l,t];1s.2w=l;1s.2q=t;o 1s};J.7y=q(15,7q){G 1O=1t J(\'1O\'),t=J.5R.4L[15];E(t){1O.52=t[0]+7q+t[1];t[2].7i(q(){1O=1O.5T})}1i 1O.52=7q;o $A(1O.3o)};J.5R={54:q(k,L){k.1W.7O(L,k)},2q:q(k,L){k.7O(L,k.5T)},5f:q(k,L){k.5H(L)},7x:q(k,L){k.1W.7O(L,k.4r)},4L:{fY:[\'<4M>\',\'</4M>\',1],7P:[\'<4M><69>\',\'</69></4M>\',2],c8:[\'<4M><69><7Q>\',\'</7Q></69></4M>\',3],9t:[\'<4M><69><7Q><c9>\',\'</c9></7Q></69></4M>\',4],ca:[\'<2G>\',\'</2G>\',1]}};(q(){M.17(C.4L,{cb:C.4L.7P,cc:C.4L.7P,cd:C.4L.9t})}).2L(J.5R);J.1c.7R={3S:q(k,1X){1X=J.3Q.9r[1X]||1X;G L=$(k).c2(1X);o!!(L&&L.fZ)}};J.1c.3H={};M.17(J,J.1c);E(!1f.3K.6g&&1b.3X(\'1O\')[\'4V\']){1D.6h={};1D.6h.1k=1b.3X(\'1O\')[\'4V\'];1f.3K.6g=1v}J.17=(q(){E(1f.3K.7b)o 1f.K;G 1c={},3H=J.1c.3H;G 17=M.17(q(k){E(!k||k.7S||k.3j!=1||k==1D)o k;G 2H=M.2F(1c),15=k.15.2o(),1z,I;E(3H[15])M.17(2H,3H[15]);18(1z 1P 2H){I=2H[1z];E(M.2A(I)&&!(1z 1P k))k[1z]=I.4F()}k.7S=1f.3g;o k},{7T:q(){E(!1f.3K.6g){M.17(1c,J.1c);M.17(1c,J.1c.7R)}}});17.7T();o 17})();J.3S=q(k,1X){E(k.3S)o k.3S(1X);o J.1c.7R.3S(k,1X)};J.6i=q(2H){G F=1f.3K,T=J.1c.3H;E(!2H){M.17(1C,1C.1c);M.17(1C.J,1C.J.1c);M.17(J.1c.3H,{"g0":M.2F(1C.1c),"g1":M.2F(1C.J.1c),"ca":M.2F(1C.J.1c),"ce":M.2F(1C.J.1c)})}E(1q.O==2){G 15=2H;2H=1q[1]}E(!15)M.17(J.1c,2H||{});1i{E(M.4D(15))15.1E(17);1i 17(15)}q 17(15){15=15.2o();E(!J.1c.3H[15])J.1c.3H[15]={};M.17(J.1c.3H[15],2H)}q 7U(2H,5x,7V){7V=7V||1p;18(G 1z 1P 2H){G I=2H[1z];E(!M.2A(I))3P;E(!7V||!(1z 1P 5x))5x[1z]=I.4F()}}q cf(15){G 1M;G 9u={"g2":"g3","ce":"g4","P":"g5","g6":"g7","g8":"g9","ga":"gb","gc":"gd","ge":"gf","gg":"6a","gh":"6a","gj":"6a","gk":"6a","gl":"6a","gm":"6a","Q":"gn","go":"cg","gp":"cg","A":"gq","c6":"gr","gs":"gu","gv":"ch","gw":"ch","cb":"9v","cc":"9v","7P":"9v","c8":"gx","cd":"ci","9t":"ci","gy":"gz","gA":"gB"};E(9u[15])1M=\'9w\'+9u[15]+\'J\';E(1D[1M])o 1D[1M];1M=\'9w\'+15+\'J\';E(1D[1M])o 1D[1M];1M=\'9w\'+15.6m()+\'J\';E(1D[1M])o 1D[1M];1D[1M]={};1D[1M].1k=1b.3X(15)[\'4V\'];o 1D[1M]}E(F.6g){7U(J.1c,6h.1k);7U(J.1c.7R,6h.1k,1v)}E(F.7b){18(G 9x 1P J.1c.3H){G 1M=cf(9x);E(M.2D(1M))3P;7U(T[9x],1M.1k)}}M.17(J,J.1c);8I J.3H;E(J.17.7T)J.17.7T();J.2Y={}};1b.gC={5X:q(){G 6P={},B=1f.1R;$w(\'2j 3c\').1E(q(d){G D=d.6m();E(B.4a&&!1b.2P){6P[d]=5C[\'gD\'+D]}1i E(B.49&&5j(1D.gE.gF())<9.5){6P[d]=1b.2c[\'cj\'+D]}1i{6P[d]=1b.5p[\'cj\'+D]}});o 6P},bA:q(){o C.5X().2j},bz:q(){o C.5X().3c},gG:q(){o J.4t(1D.ck||1b.5p.4v||1b.2c.4v,1D.cl||1b.5p.4u||1b.2c.4u)}};G 14=2f.2u({2I:q(1u){C.1u=1u.4i();E(C.cm()){C.4N=\'co\'}1i E(C.cp()){C.4N=\'2s\';C.cq()}1i{C.4N="c0";C.cr()}},cp:q(){E(!1f.3K.7a)o 1p;G e=C.1u;E(1f.1R.4a&&(e.1H("-2z-1r")||e.1H(":5F")))o 1p;E((/(\\[[\\w-]*?:|:3T)/).2R(e))o 1p;o 1v},cm:q(){E(!1f.3K.aa)o 1p;E(!14.9y)14.9y=1t J(\'1O\');25{14.9y.ab(C.1u)}2a(e){o 1p}o 1v},cr:q(){G e=C.1u,4w=14.6Q,h=14.28,c=14.6r,3I,p,m;E(14.5q[e]){C.3U=14.5q[e];o}C.3U=["C.3U = q(1n) {","G r = 1n, h = 14.28, c = 1p, n;"];1N(e&&3I!=e&&(/\\S/).2R(e)){3I=e;18(G i 1P 4w){p=4w[i];E(m=e.1g(p)){C.3U.1h(M.2A(c[i])?c[i](m):1t 32(c[i]).2P(m));e=e.1T(m[0],\'\');2h}}}C.3U.1h("o h.9z(n);\\n}");7f(C.3U.2E(\'\\n\'));14.5q[C.1u]=C.3U},cq:q(){G e=C.1u,4w=14.6Q,x=14.2s,3I,m;E(14.5q[e]){C.2s=14.5q[e];o}C.3U=[\'.//*\'];1N(e&&3I!=e&&(/\\S/).2R(e)){3I=e;18(G i 1P 4w){E(m=e.1g(4w[i])){C.3U.1h(M.2A(x[i])?x[i](m):1t 32(x[i]).2P(m));e=e.1T(m[0],\'\');2h}}}C.2s=C.3U.2E(\'\');14.5q[C.1u]=C.2s},7W:q(1n){1n=1n||1b;G e=C.1u,U;4Z(C.4N){2g\'co\':E(1n!==1b){G cs=1n.1o,1o=$(1n).97();e="#"+1o+" "+e}U=$A(1n.gH(e)).2S(J.17);1n.1o=cs;o U;2g\'2s\':o 1b.91(C.2s,1n);67:o C.3U(1n)}},1g:q(k){C.9A=[];G e=C.1u,4w=14.6Q,as=14.9B;G 3I,p,m;1N(e&&3I!==e&&(/\\S/).2R(e)){3I=e;18(G i 1P 4w){p=4w[i];E(m=e.1g(p)){E(as[i]){C.9A.1h([i,M.2F(m)]);e=e.1T(m[0],\'\')}1i{o C.7W(1b).1H(k)}}}}G 1g=1v,1d,2t;18(G i=0,7X;7X=C.9A[i];i++){1d=7X[0],2t=7X[1];E(!14.9B[1d](k,2t)){1g=1p;2h}}o 1g},2J:q(){o C.1u},2C:q(){o"#<14:"+C.1u.2C()+">"}});M.17(14,{5q:{},2s:{4O:"//*",1J:"/*",5g:"/6R-4P::*[1]",6S:\'/6R-4P::*\',15:q(m){E(m[1]==\'*\')o\'\';o"[ct-1d()=\'"+m[1].2b()+"\' cu ct-1d()=\'"+m[1].2o()+"\']"},1l:"[5i(1V(\' \', @6E, \' \'), \' #{1} \')]",1o:"[@1o=\'#{1}\']",6b:q(m){m[1]=m[1].2b();o 1t 32("[@#{1}]").2P(m)},2d:q(m){m[1]=m[1].2b();m[3]=m[5]||m[6];o 1t 32(14.2s.6T[m[2]]).2P(m)},6U:q(m){G h=14.2s.2k[m[1]];E(!h)o\'\';E(M.2A(h))o h(m);o 1t 32(14.2s.2k[m[1]]).2P(m)},6T:{\'=\':"[@#{1}=\'#{3}\']",\'!=\':"[@#{1}!=\'#{3}\']",\'^=\':"[gI-gJ(@#{1}, \'#{3}\')]",\'$=\':"[5D(@#{1}, (3l-O(@#{1}) - 3l-O(\'#{3}\') + 1))=\'#{3}\']",\'*=\':"[5i(@#{1}, \'#{3}\')]",\'~=\':"[5i(1V(\' \', @#{1}, \' \'), \' #{3} \')]",\'|=\':"[5i(1V(\'-\', @#{1}, \'-\'), \'-#{3}-\')]"},2k:{\'3M-1J\':\'[4Q(9C-4P::*)]\',\'2x-1J\':\'[4Q(6R-4P::*)]\',\'6V-1J\':\'[4Q(9C-4P::* cu 6R-4P::*)]\',\'5F\':"[3x(*) = 0 6W (3x(4k()) = 0)]",\'3T\':"[@3T]",\'3G\':"[(@3G) 6W (@1r!=\'5k\')]",\'cv\':"[4Q(@3G) 6W (@1r!=\'5k\')]",\'4Q\':q(m){G e=m[6],p=14.6Q,x=14.2s,3I,v;G 9D=[];1N(e&&3I!=e&&(/\\S/).2R(e)){3I=e;18(G i 1P p){E(m=e.1g(p[i])){v=M.2A(x[i])?x[i](m):1t 32(x[i]).2P(m);9D.1h("("+v.5D(1,v.O-1)+")");e=e.1T(m[0],\'\');2h}}}o"[4Q("+9D.2E(" 6W ")+")]"},\'20-1J\':q(m){o 14.2s.2k.20("(3x(./9C-4P::*) + 1) ",m)},\'20-2x-1J\':q(m){o 14.2s.2k.20("(3x(./6R-4P::*) + 1) ",m)},\'20-2z-1r\':q(m){o 14.2s.2k.20("1x() ",m)},\'20-2x-2z-1r\':q(m){o 14.2s.2k.20("(2x() + 1 - 1x()) ",m)},\'3M-2z-1r\':q(m){m[6]="1";o 14.2s.2k[\'20-2z-1r\'](m)},\'2x-2z-1r\':q(m){m[6]="1";o 14.2s.2k[\'20-2x-2z-1r\'](m)},\'6V-2z-1r\':q(m){G p=14.2s.2k;o p[\'3M-2z-1r\'](m)+p[\'2x-2z-1r\'](m)},20:q(6c,m){G 44,1K=m[6],9E;E(1K==\'cw\')1K=\'2n+0\';E(1K==\'cx\')1K=\'2n+1\';E(44=1K.1g(/^(\\d+)$/))o\'[\'+6c+"= "+44[1]+\']\';E(44=1K.1g(/^(-?\\d*)?n(([+-])(\\d+))?/)){E(44[1]=="-")44[1]=-1;G a=44[1]?56(44[1]):1;G b=44[2]?56(44[2]):0;9E="[((#{6c} - #{b}) gK #{a} = 0) 6W "+"((#{6c} - #{b}) 1O #{a} >= 0)]";o 1t 32(9E).2P({6c:6c,a:a,b:b})}}}},6r:{15:\'n = h.15(n, r, "#{1}", c);      c = 1p;\',1l:\'n = h.1l(n, r, "#{1}", c);    c = 1p;\',1o:\'n = h.1o(n, r, "#{1}", c);           c = 1p;\',6b:\'n = h.6b(n, r, "#{1}", c); c = 1p;\',2d:q(m){m[3]=(m[5]||m[6]);o 1t 32(\'n = h.2d(n, r, "#{1}", "#{3}", "#{2}", c); c = 1p;\').2P(m)},6U:q(m){E(m[6])m[6]=m[6].1T(/"/g,\'\\\\"\');o 1t 32(\'n = h.6U(n, "#{1}", "#{6}", r, c); c = 1p;\').2P(m)},4O:\'c = "4O";\',1J:\'c = "1J";\',5g:\'c = "5g";\',6S:\'c = "6S";\'},6Q:{6S:/^\\s*~\\s*/,1J:/^\\s*>\\s*/,5g:/^\\s*\\+\\s*/,4O:/^\\s/,15:/^\\s*(\\*|[\\w\\-]+)(\\b|$)?/,1o:/^#([\\w\\-\\*]+)(\\b|$)/,1l:/^\\.([\\w\\-\\*]+)(\\b|$)/,6U:/^:((3M|2x|20|20-2x|6V)(-1J|-2z-1r)|5F|3T|(en|gL)gM|4Q)(\\((.*?)\\))?(\\b|$|(?=\\s|[:+~>]))/,6b:/^\\[((?:[\\w]+:)?[\\w]+)\\]/,2d:/\\[((?:[\\w-]*:)?[\\w-]+)\\s*(?:([!^$*~|]?=)\\s*(([\'"])([^\\4]*?)\\4|([^\'"][^\\]]*?)))?\\]/},9B:{15:q(k,2t){o 2t[1].2o()==k.15.2o()},1l:q(k,2t){o J.7D(k,2t[1])},1o:q(k,2t){o k.1o===2t[1]},6b:q(k,2t){o J.3S(k,2t[1])},2d:q(k,2t){G 4l=J.5h(k,2t[1]);o 4l&&14.6T[2t[2]](4l,2t[5]||2t[6])}},28:{1V:q(a,b){18(G i=0,L;L=b[i];i++)a.1h(L);o a},7Y:q(N){G cy=1f.3g;18(G i=0,L;L=N[i];i++)L.3V=cy;o N},5r:q(N){18(G i=0,L;L=N[i];i++)L.3V=4A;o N},1m:q(1W,4n,6X){1W.3V=1f.3g;E(4n){18(G N=1W.3o,i=N.O-1,j=1;i>=0;i--){G L=N[i];E(L.3j==1&&(!6X||L.3V))L.7Z=j++}}1i{18(G i=0,j=1,N=1W.3o;L=N[i];i++)E(L.3j==1&&(!6X||L.3V))L.7Z=j++}},9z:q(N){E(N.O==0)o N;G U=[],n;18(G i=0,l=N.O;i<l;i++)E(!(n=N[i]).3V){n.3V=1f.3g;U.1h(J.17(n))}o 14.28.5r(U)},4O:q(N){G h=14.28;18(G i=0,U=[],L;L=N[i];i++)h.1V(U,L.4x(\'*\'));o U},1J:q(N){G h=14.28;18(G i=0,U=[],L;L=N[i];i++){18(G j=0,1J;1J=L.3o[j];j++)E(1J.3j==1&&1J.15!=\'!\')U.1h(1J)}o U},5g:q(N){18(G i=0,U=[],L;L=N[i];i++){G 6G=C.6H(L);E(6G)U.1h(6G)}o U},6S:q(N){G h=14.28;18(G i=0,U=[],L;L=N[i];i++)h.1V(U,J.4J(L));o U},6H:q(L){1N(L=L.4r)E(L.3j==1)o L;o 1j},6F:q(L){1N(L=L.bw)E(L.3j==1)o L;o 1j},15:q(N,1n,15,29){G cz=15.2o();G U=[],h=14.28;E(N){E(29){E(29=="4O"){18(G i=0,L;L=N[i];i++)h.1V(U,L.4x(15));o U}1i N=C[29](N);E(15=="*")o N}18(G i=0,L;L=N[i];i++)E(L.15.2o()===cz)U.1h(L);o U}1i o 1n.4x(15)},1o:q(N,1n,1o,29){G 3e=$(1o),h=14.28;E(!3e)o[];E(!N&&1n==1b)o[3e];E(N){E(29){E(29==\'1J\'){18(G i=0,L;L=N[i];i++)E(3e.1W==L)o[3e]}1i E(29==\'4O\'){18(G i=0,L;L=N[i];i++)E(J.7F(3e,L))o[3e]}1i E(29==\'5g\'){18(G i=0,L;L=N[i];i++)E(14.28.6F(3e)==L)o[3e]}1i N=h[29](N)}18(G i=0,L;L=N[i];i++)E(L==3e)o[3e];o[]}o(3e&&J.7F(3e,1n))?[3e]:[]},1l:q(N,1n,1l,29){E(N&&29)N=C[29](N);o 14.28.cA(N,1n,1l)},cA:q(N,1n,1l){E(!N)N=14.28.4O([1n]);G cB=\' \'+1l+\' \';18(G i=0,U=[],L,6Y;L=N[i];i++){6Y=L.1l;E(6Y.O==0)3P;E(6Y==1l||(\' \'+6Y+\' \').1H(cB))U.1h(L)}o U},6b:q(N,1n,2d,29){E(!N)N=1n.4x("*");E(N&&29)N=C[29](N);G U=[];18(G i=0,L;L=N[i];i++)E(J.3S(L,2d))U.1h(L);o U},2d:q(N,1n,2d,I,cC,29){E(!N)N=1n.4x("*");E(N&&29)N=C[29](N);G 2l=14.6T[cC],U=[];18(G i=0,L;L=N[i];i++){G 4l=J.5h(L,2d);E(4l===1j)3P;E(2l(4l,I))U.1h(L)}o U},6U:q(N,1d,I,1n,29){E(N&&29)N=C[29](N);E(!N)N=1n.4x("*");o 14.2k[1d](N,I,1n)}},2k:{\'3M-1J\':q(N,I,1n){18(G i=0,U=[],L;L=N[i];i++){E(14.28.6F(L))3P;U.1h(L)}o U},\'2x-1J\':q(N,I,1n){18(G i=0,U=[],L;L=N[i];i++){E(14.28.6H(L))3P;U.1h(L)}o U},\'6V-1J\':q(N,I,1n){G h=14.28;18(G i=0,U=[],L;L=N[i];i++)E(!h.6F(L)&&!h.6H(L))U.1h(L);o U},\'20-1J\':q(N,1K,1n){o 14.2k.20(N,1K,1n)},\'20-2x-1J\':q(N,1K,1n){o 14.2k.20(N,1K,1n,1v)},\'20-2z-1r\':q(N,1K,1n){o 14.2k.20(N,1K,1n,1p,1v)},\'20-2x-2z-1r\':q(N,1K,1n){o 14.2k.20(N,1K,1n,1v,1v)},\'3M-2z-1r\':q(N,1K,1n){o 14.2k.20(N,"1",1n,1p,1v)},\'2x-2z-1r\':q(N,1K,1n){o 14.2k.20(N,"1",1n,1v,1v)},\'6V-2z-1r\':q(N,1K,1n){G p=14.2k;o p[\'2x-2z-1r\'](p[\'3M-2z-1r\'](N,1K,1n),1K,1n)},cD:q(a,b,cE){E(a==0)o b>0?[b]:[];o $R(1,cE).3y([],q(2T,i){E(0==(i-b)%a&&(i-b)/a>=0)2T.1h(i);o 2T})},20:q(N,1K,1n,4n,6X){E(N.O==0)o[];E(1K==\'cw\')1K=\'2n+0\';E(1K==\'cx\')1K=\'2n+1\';G h=14.28,U=[],9F=[],m;h.7Y(N);18(G i=0,L;L=N[i];i++){E(!L.1W.3V){h.1m(L.1W,4n,6X);9F.1h(L.1W)}}E(1K.1g(/^\\d+$/)){1K=56(1K);18(G i=0,L;L=N[i];i++)E(L.7Z==1K)U.1h(L)}1i E(m=1K.1g(/^(-?\\d*)?n(([+-])(\\d+))?/)){E(m[1]=="-")m[1]=-1;G a=m[1]?56(m[1]):1;G b=m[2]?56(m[2]):0;G 9G=14.2k.cD(a,b,N.O);18(G i=0,L,l=9G.O;L=N[i];i++){18(G j=0;j<l;j++)E(L.7Z==9G[j])U.1h(L)}}h.5r(N);h.5r(9F);o U},\'5F\':q(N,I,1n){18(G i=0,U=[],L;L=N[i];i++){E(L.15==\'!\'||L.5T)3P;U.1h(L)}o U},\'4Q\':q(N,42,1n){G h=14.28,gN,m;G 9H=1t 14(42).7W(1n);h.7Y(9H);18(G i=0,U=[],L;L=N[i];i++)E(!L.3V)U.1h(L);h.5r(9H);o U},\'cv\':q(N,I,1n){18(G i=0,U=[],L;L=N[i];i++)E(!L.3G&&(!L.1r||L.1r!==\'5k\'))U.1h(L);o U},\'3G\':q(N,I,1n){18(G i=0,U=[],L;L=N[i];i++)E(L.3G)U.1h(L);o U},\'3T\':q(N,I,1n){18(G i=0,U=[],L;L=N[i];i++)E(L.3T)U.1h(L);o U}},6T:{\'=\':q(21,v){o 21==v},\'!=\':q(21,v){o 21!=v},\'^=\':q(21,v){o 21==v||21&&21.8t(v)},\'$=\':q(21,v){o 21==v||21&&21.8u(v)},\'*=\':q(21,v){o 21==v||21&&21.1H(v)},\'$=\':q(21,v){o 21.8u(v)},\'*=\':q(21,v){o 21.1H(v)},\'~=\':q(21,v){o(\' \'+21+\' \').1H(\' \'+v+\' \')},\'|=\':q(21,v){o(\'-\'+(21||"").2o()+\'-\').1H(\'-\'+(v||"").2o()+\'-\')}},4f:q(1u){G 4R=[];1u.ar(/(([\\w#:.~>+()\\s-]+|\\*|\\[.*?\\])+)\\s*(,|$)/,q(m){4R.1h(m[1].4i())});o 4R},cF:q(1Z,1u){G 2t=$$(1u),h=14.28;h.7Y(2t);18(G i=0,U=[],k;k=1Z[i];i++)E(k.3V)U.1h(k);h.5r(2t);o U},5W:q(1Z,1u,1m){E(M.50(1u)){1m=1u;1u=1p}o 14.cF(1Z,1u||\'*\')[1m||0]},7A:q(k,4R){4R=14.4f(4R.2E(\',\'));G U=[],h=14.28;18(G i=0,l=4R.O,42;i<l;i++){42=1t 14(4R[i].4i());h.1V(U,42.7W(k))}o(l>1)?h.9z(U):U}});E(1f.1R.3W){M.17(14.28,{1V:q(a,b){18(G i=0,L;L=b[i];i++)E(L.15!=="!")a.1h(L);o a},5r:q(N){18(G i=0,L;L=N[i];i++)L.99(\'3V\');o N}})}q $$(){o 14.7A(1b,$A(1q))}G 1C={9I:q(1y){$(1y).9I();o 1y},cG:q(1Z,V){E(3i V!=\'W\')V={3z:!!V};1i E(M.2D(V.3z))V.3z=1v;G 1w,I,9J=1p,5s=V.5s;G 7g=1Z.3y({},q(1s,k){E(!k.3G&&k.1d){1w=k.1d;I=$(k).3f();E(I!=1j&&k.1r!=\'gO\'&&(k.1r!=\'5s\'||(!9J&&5s!==1p&&(!5s||1w==5s)&&(9J=1v)))){E(1w 1P 1s){E(!M.4D(1s[1w]))1s[1w]=[1s[1w]];1s[1w].1h(I)}1i 1s[1w]=I}}o 1s});o V.3z?7g:M.4C(7g)}};1C.1c={6Z:q(1y,V){o 1C.cG(1C.6d(1y),V)},6d:q(1y){o $A($(1y).4x(\'*\')).3y([],q(1Z,1J){E(1C.J.6e[1J.15.2b()])1Z.1h(J.17(1J));o 1Z})},gP:q(1y,80,1d){1y=$(1y);G 81=1y.4x(\'4y\');E(!80&&!1d)o $A(81).2S(J.17);18(G i=0,9K=[],O=81.O;i<O;i++){G 4y=81[i];E((80&&4y.1r!=80)||(1d&&4y.1d!=1d))3P;9K.1h(J.17(4y))}o 9K},9L:q(1y){1y=$(1y);1C.6d(1y).8B(\'9L\');o 1y},9M:q(1y){1y=$(1y);1C.6d(1y).8B(\'9M\');o 1y},cH:q(1y){G 1Z=$(1y).6d().5I(q(k){o\'5k\'!=k.1r&&!k.3G});G 9N=1Z.5I(q(k){o k.3S(\'7N\')&&k.7N>=0}).aO(q(k){o k.7N}).3M();o 9N?9N:1Z.8E(q(k){o[\'4y\',\'2G\',\'9O\'].1H(k.15.2b())})},gQ:q(1y){1y=$(1y);1y.cH().cI();o 1y},2V:q(1y,V){1y=$(1y),V=M.2F(V||{});G 3a=V.3B,68=1y.5h(\'68\')||\'\';E(68.53())68=1D.7u.c3;V.3B=1y.6Z(1v);E(3a){E(M.3k(3a))3a=3a.7h();M.17(V.3B,3a)}E(1y.3S(\'1B\')&&!V.1B)V.1B=1y.1B;o 1t 1Q.59(68,V)}};1C.J={9P:q(k){$(k).9P();o k},2G:q(k){$(k).2G();o k}};1C.J.1c={6Z:q(k){k=$(k);E(!k.3G&&k.1d){G I=k.3f();E(I!=4A){G 1G={};1G[k.1d]=I;o M.4C(1G)}}o\'\'},3f:q(k){k=$(k);G 1B=k.15.2b();o 1C.J.6e[1B](k)},gR:q(k,I){k=$(k);G 1B=k.15.2b();1C.J.6e[1B](k,I);o k},aS:q(k){$(k).I=\'\';o k},gS:q(k){o $(k).I!=\'\'},cI:q(k){k=$(k);25{k.9P();E(k.2G&&(k.15.2b()!=\'4y\'||![\'9Q\',\'9I\',\'5s\'].1H(k.1r)))k.2G()}2a(e){}o k},9L:q(k){k=$(k);k.3G=1v;o k},9M:q(k){k=$(k);k.3G=1p;o k}};G gT=1C.J;G $F=1C.J.1c.3f;1C.J.6e={4y:q(k,I){4Z(k.1r.2b()){2g\'cJ\':2g\'9R\':o 1C.J.6e.cK(k,I);67:o 1C.J.6e.9O(k,I)}},cK:q(k,I){E(M.2D(I))o k.3T?k.I:1j;1i k.3T=!!I},9O:q(k,I){E(M.2D(I))o k.I;1i k.I=I},2G:q(k,I){E(M.2D(I))o C[k.1r==\'2G-gU\'?\'cL\':\'cM\'](k);1i{G 3J,82,cN=!M.4D(I);18(G i=0,O=k.O;i<O;i++){3J=k.V[i];82=C.83(3J);E(cN){E(82==I){3J.9S=1v;o}}1i 3J.9S=I.1H(82)}}},cL:q(k){G 1m=k.gV;o 1m>=0?C.83(k.V[1m]):1j},cM:q(k){G 1S,O=k.O;E(!O)o 1j;18(G i=0,1S=[];i<O;i++){G 3J=k.V[i];E(3J.9S)1S.1h(C.83(3J))}o 1S},83:q(3J){o J.17(3J).3S(\'I\')?3J.I:3J.4k}};4Y.9T=2f.2u(am,{2I:q($4c,k,4h,31){$4c(31,4h);C.k=$(k);C.4S=C.3f()},8h:q(){G I=C.3f();E(M.3k(C.4S)&&M.3k(I)?C.4S!=I:22(C.4S)!=22(I)){C.31(C.k,I);C.4S=I}}});1C.J.cO=2f.2u(4Y.9T,{3f:q(){o 1C.J.3f(C.k)}});1C.cO=2f.2u(4Y.9T,{3f:q(){o 1C.6Z(C.k)}});4Y.70=2f.2u({2I:q(k,31){C.k=$(k);C.31=31;C.4S=C.3f();E(C.k.15.2b()==\'1y\')C.cP();1i C.6j(C.k)},9U:q(){G I=C.3f();E(C.4S!=I){C.31(C.k,I);C.4S=I}},cP:q(){1C.6d(C.k).1E(C.6j,C)},6j:q(k){E(k.1r){4Z(k.1r.2b()){2g\'cJ\':2g\'9R\':1F.4T(k,\'cQ\',C.9U.2B(C));2h;67:1F.4T(k,\'gW\',C.9U.2B(C));2h}}}});1C.J.70=2f.2u(4Y.70,{3f:q(){o 1C.J.3f(C.k)}});1C.70=2f.2u(4Y.70,{3f:q(){o 1C.6Z(C.k)}});E(!1D.1F)G 1F={};M.17(1F,{gX:8,gY:9,gZ:13,h0:27,h1:37,h2:38,h3:39,h4:40,h5:46,h6:36,h7:35,h8:33,h9:34,ha:45,2Y:{},9V:q(19){G k;4Z(19.1r){2g\'hb\':k=19.hc;2h;2g\'hd\':k=19.3F;2h;67:o 1j}o J.17(k)}});1F.1c=(q(){G 5t;E(1f.1R.3W){G cR={0:1,1:4,2:2};5t=q(19,5u){o 19.9Q==cR[5u]}}1i E(1f.1R.4a){5t=q(19,5u){4Z(5u){2g 0:o 19.84==1&&!19.cS;2g 1:o 19.84==1&&19.cS;67:o 1p}}}1i{5t=q(19,5u){o 19.84?(19.84===5u+1):(19.9Q===5u)}}o{he:q(19){o 5t(19,0)},hf:q(19){o 5t(19,1)},hg:q(19){o 5t(19,2)},k:q(19){19=1F.17(19);G L=19.85,1r=19.1r,4U=19.4U;E(4U&&4U.15){E(1r===\'cT\'||1r===\'hh\'||(1r===\'cQ\'&&4U.15.2b()===\'4y\'&&4U.1r===\'9R\'))L=4U}E(L.3j==6B.bp)L=L.1W;o J.17(L)},5W:q(19,1u){G k=1F.k(19);E(!1u)o k;G 1Z=[k].1V(k.5S());o 14.5W(1Z,1u,0)},5v:q(19){G 71=1b.5p,2c=1b.2c||{4v:0,4u:0};o{x:19.cU||(19.hi+(71.4v||2c.4v)-(71.hj||0)),y:19.cV||(19.hk+(71.4u||2c.4u)-(71.hl||0))}},hm:q(19){o 1F.5v(19).x},hn:q(19){o 1F.5v(19).y},8i:q(19){1F.17(19);19.cW();19.cX();19.ho=1v}}})();1F.17=(q(){G 2H=M.4b(1F.1c).3y({},q(m,1d){m[1d]=1F.1c[1d].4F();o m});E(1f.1R.3W){M.17(2H,{cX:q(){C.hp=1v},cW:q(){C.7d=1p},2C:q(){o"[W 1F]"}});o q(19){E(!19)o 1p;E(19.7S)o 19;19.7S=1f.3g;G 5v=1F.5v(19);M.17(19,{85:19.hq,9V:1F.9V(19),cU:5v.x,cV:5v.y});o M.17(19,2H)}}1i{1F.1k=1F.1k||1b.72("cY")[\'4V\'];M.17(1F.1k,2H);o 1f.K}})();M.17(1F,(q(){G 2Y=1F.2Y;q 9W(k){E(k.9X)o k.9X[0];1q.5A.1o=1q.5A.1o||1;o k.9X=[++1q.5A.1o]}q 9Y(1A){E(1A&&1A.1H(\':\'))o"cZ";o 1A}q 86(1o){o 2Y[1o]=2Y[1o]||{}}q 87(1o,1A){G c=86(1o);o c[1A]=c[1A]||[]}q d0(k,1A,2l){G 1o=9W(k);G c=87(1o,1A);E(c.5J("2l").1H(2l))o 1p;G 1L=q(19){E(!1F||!1F.17||(19.1A&&19.1A!=1A))o 1p;1F.17(19);2l.2L(k,19)};1L.2l=2l;c.1h(1L);o 1L}q 9Z(1o,1A,2l){G c=87(1o,1A);o c.8E(q(1L){o 1L.2l==2l})}q d1(1o,1A,2l){G c=86(1o);E(!c[1A])o 1p;c[1A]=c[1A].6s(9Z(1o,1A,2l))}q d2(){18(G 1o 1P 2Y)18(G 1A 1P 2Y[1o])2Y[1o][1A]=1j}E(1D.78){1D.78("c5",d2)}E(1f.1R.4a){1D.73(\'hr\',1f.3g,1p)}o{4T:q(k,1A,2l){k=$(k);G 1d=9Y(1A);G 1L=d0(k,1A,2l);E(!1L)o k;E(k.73){k.73(1d,1L,1p)}1i{k.78("5O"+1d,q(e){e.4U=k;1L(e)})}o k},5w:q(k,1A,2l){k=$(k);G 1o=9W(k),1d=9Y(1A);E(!2l&&1A){87(1o,1A).1E(q(1L){k.5w(1A,1L.2l)});o k}1i E(!1A){M.4b(86(1o)).1E(q(1A){k.5w(1A)});o k}G 1L=9Z(1o,1A,2l);E(!1L)o k;E(k.d3){k.d3(1d,1L,1p)}1i{k.hs("5O"+1d,1L)}d1(1o,1A,2l);o k},6f:q(k,1A,2T){k=$(k);E(k==1b&&1b.72&&!k.d4)k=1b.5p;G 19;E(1b.72){19=1b.72("cY");19.ht("cZ",1v,1v)}1i{19=1b.hu();19.d5="hv"}19.1A=1A;19.2T=2T||{};E(1b.72){k.d4(19)}1i{k.hw(19.d5,19)}o 1F.17(19)}}})());M.17(1F,1F.1c);J.6i({6f:1F.6f,4T:1F.4T,5w:1F.5w});M.17(1b,{6f:J.1c.6f.4F(),4T:J.1c.4T.4F(),5w:J.1c.5w.4F(),74:1p});(q(){G 41;q 75(){E(1b.74)o;E(41)1D.ao(41);1b.6f("hx:74");1b.74=1v}E(1b.73){E(1f.1R.4a){41=1D.an(q(){E(/74|d6/.2R(1b.2X))75()},0);1F.4T(1D,"cT",75)}1i{1b.73("hy",75,1p)}}1i{1b.6I("<4W 1o=d7 4E c4=//:><\\/4W>");$("d7").7p=q(){E(C.2X=="d6"){C.7p=1j;75()}}}})();3Y.4C=M.4C;G hz={3E:J.bq};J.1c.hA=J.1c.7F;G hB={hC:q(k,1a){o J.3D(k,{54:1a})},hD:q(k,1a){o J.3D(k,{2q:1a})},hE:q(k,1a){o J.3D(k,{5f:1a})},hF:q(k,1a){o J.3D(k,{7x:1a})}};G $3P=1t hG(\'"4B $3P" hH hI, hJ "o" hK\');G a0={d8:1p,a1:q(){C.d9=1D.ck||1b.5p.4v||1b.2c.4v||0;C.da=1D.cl||1b.5p.4u||1b.2c.4u||0},hL:q(k,x,y){E(C.d8)o C.db(k,x,y);C.76=x;C.77=y;C.3d=J.4s(k);o(y>=C.3d[1]&&y<C.3d[1]+k.62&&x>=C.3d[0]&&x<C.3d[0]+k.61)},db:q(k,x,y){G a2=J.9l(k);C.76=x+a2[0]-C.d9;C.77=y+a2[1]-C.da;C.3d=J.4s(k);o(C.77>=C.3d[1]&&C.77<C.3d[1]+k.62&&C.76>=C.3d[0]&&C.76<C.3d[0]+k.61)},hM:q(4N,k){E(!4N)o 0;E(4N==\'hN\')o((C.3d[1]+k.62)-C.77)/k.62;E(4N==\'hO\')o((C.3d[0]+k.61)-C.76)/k.61},4s:J.1c.4s,6M:J.1c.6M,9i:q(k){a0.a1();o J.9i(k)},9k:q(k){a0.a1();o J.9k(k)},hP:J.1c.9l,2O:J.1c.65,hQ:J.1c.6N,2F:q(24,85,V){V=V||{};o J.bS(85,24,V)}};E(!1b.88)1b.88=q(dc){q a3(1d){o 1d.53()?1j:"[5i(1V(\' \', @6E, \' \'), \' "+1d+" \')]"}dc.88=1f.3K.7a?q(k,1l){1l=1l.2J().4i();G a4=/\\s/.2R(1l)?$w(1l).2S(a3).2E(\'\'):a3(1l);o a4?1b.91(\'.//*\'+a4,k):[]}:q(k,1l){1l=1l.2J().4i();G 1Z=[],6J=(/\\s/.2R(1l)?$w(1l):1j);E(!6J&&!1l)o 1Z;G N=$(k).4x(\'*\');1l=\' \'+1l+\' \';18(G i=0,1J,cn;1J=N[i];i++){E(1J.1l&&(cn=\' \'+1J.1l+\' \')&&(cn.1H(1l)||(6J&&6J.8z(q(1d){o!1d.2J().53()&&cn.1H(\' \'+1d+\' \')}))))1Z.1h(J.17(1J))}o 1Z};o q(1l,7v){o $(7v||1b.2c).88(1l)}}(J.1c);J.7C=2f.2u();J.7C.1k={2I:q(k){C.k=$(k)},4m:q(1e){C.k.1l.4f(/\\s+/).2G(q(1d){o 1d.O>0}).4m(1e)},6u:q(1l){C.k.1l=1l},hR:q(a5){E(C.1H(a5))o;C.6u($A(C).1V(a5).2E(\' \'))},bt:q(a6){E(!C.1H(a6))o;C.6u($A(C).6s(a6).2E(\' \'))},2J:q(){o $A(C).2E(\' \')}};M.17(J.7C.1k,2K);J.6i();',62,1108,'||||||||||||||||||||element||||return||function||||||||||||this||if||var||value|Element||node|Object|nodes|length||||||results|options|object||style||||||Selector|tagName||extend|for|event|content|document|Methods|name|iterator|Prototype|match|push|else|null|prototype|className|index|root|id|false|arguments|type|result|new|expression|true|key|position|form|property|eventName|method|Form|window|each|Event|pair|include|context|child|formula|wrapper|klass|while|div|in|Ajax|Browser|values|replace|args|concat|parentNode|attribute|transport|elements|nth|nv|String||source|try|pattern||handlers|combinator|catch|toLowerCase|body|attr|getStyle|Class|case|break|filter|width|pseudos|handler|Array||toUpperCase|attributes|top|_getEv|xpath|matches|create|array|left|last|response|of|isFunction|bind|inspect|isUndefined|join|clone|select|methods|initialize|toString|Enumerable|call|valueT|valueL|offsetParent|evaluate|parent|test|map|memo|iterable|request|url|readyState|cache|proceed||callback|Template||||||||params|responseText|height|offset|targetNode|getValue|emptyFunction|properties|typeof|nodeType|isString|string|__method|gsub|childNodes|json|px|indexOf|apply|toJSON|names|replacement|slice|count|inject|hash|toArray|parameters|container|insert|display|toElement|disabled|ByTag|le|opt|BrowserFeatures|ancestor|first|onComplete|insertions|continue|_attributeTranslations|opacity|hasAttribute|checked|matcher|_countedByPrototype|IE|createElement|Hash|number||timer|selector|els|mm|||navigator|userAgent|Opera|WebKit|keys|super|isElement|toHTML|split|RegExp|frequency|strip|stripScripts|text|nodeValue|_each|reverse|_object|start|responder|nextSibling|cumulativeOffset|_returnOffset|scrollTop|scrollLeft|ps|getElementsByTagName|input|wrap|undefined|throw|toQueryString|isArray|defer|methodize|toPaddedString|parts|status|nextSiblings|styles|tags|table|mode|descendant|sibling|not|expressions|lastValue|observe|currentTarget|__proto__|script|shift|Abstract|switch|isNumber|evalScripts|innerHTML|blank|before|item|Number|update|end|Request|dispatchException|headers|success|insertion|decay|bottom|adjacent|readAttribute|contains|parseFloat|hidden|_overflow|offsetTop|offsetLeft|currentStyle|documentElement|_cache|unmark|submit|isButton|code|pointer|stopObserving|destination|interpret|str|callee|truncation|self|substring|evalJSON|empty|template|appendChild|findAll|pluck|right|exclusive|Responders|extras|on|getHeader|receiver|_insertionTranslations|ancestors|firstChild|descs|previousSiblings|findElement|getDimensions|pos|setStyle|setOpacity|offsetWidth|offsetHeight|absolute|static|getOffsetParent|delta|default|action|tbody|Heading|attrPresence|fragment|getElements|Serializers|fire|ElementExtensions|HTMLElement|addMethods|registerCallback|onTimerEvent|escapeHTML|capitalize|_|ctx|expr|fillWith|criteria|without|toObject|set|responders|post|contentType|xml|getStatus|state|Node|writeAttribute|removeChild|class|previousElementSibling|next|nextElementSibling|write|classNames|auto|relative|positionedOffset|viewportOffset|_flag|dimensions|patterns|following|laterSibling|operators|pseudo|only|and|ofType|nodeClassName|serialize|EventObserver|docElement|createEvent|addEventListener|loaded|fireContentLoadedEvent|xcomp|ycomp|attachEvent|Gecko|XPath|SpecificElementExtensions|ScriptFragment|returnValue|currentlyExecuting|eval|data|toQueryParams|times|charAt|detect|dispatch|onCreate|asynchronous|application|onreadystatechange|html|headerJSON|isSameOrigin|port|location|parentElement|none|after|_getContentFromAnonymousElement|recursivelyCollect|findChildElements|read|ClassNames|hasClassName|elementClassName|descendantOf|cssFloat|00001|dim|border|padding|title|_getAttr|tabIndex|insertBefore|TBODY|tr|Simulated|_extendedByPrototype|refresh|copy|onlyIfAbsent|findElements|token|mark|nodeIndex|typeName|inputs|currentValue|optionValue|which|target|getCacheForID|getWrappersForEventName|getElementsByClassName|Version|superclass|subclass|valueOf|isHash|curry|delay|_methodized|execute|stop|prepareReplacement|stripTags|decodeURIComponent|succ|camelize|len|camelized|escapedString|character|unfilterJSON|startsWith|endsWith|lastIndexOf|toTemplateReplacements|slices|collect|all|found|invoke|trues|falses|find|_reverse|toQueryPair|get|delete|activeRequestCount|Base|encoding|evalJS|_complete|Response|respondToReadyState|onStateChange|Content|Complete|protocol|domain|getResponseHeader|exception|statusText|getAllResponseHeaders|failure|updater|_getElementsByXPath|query|visible|range|replaceChild|descendants|identify|getAttribute|removeAttribute|float|css|elementStyle|cssText|styleFloat|visibility|_madePositioned|overflow|absolutize|offsets|relativize|cumulativeScrollOffset|forElement|val|zoom|alpha|stripAlpha|has|fragments|TD|trans|TableSection|HTML|tag|_div|unique|tokens|assertions|preceding|exclusion|predicate|indexed|indices|exclusions|reset|submitted|matchingInputs|disable|enable|firstByIndex|textarea|focus|button|radio|selected|TimedObserver|onElementEvent|relatedTarget|getEventID|_prototypeEventID|getDOMEventName|findWrapper|Position|prepare|offsetcache|iter|cond|classNameToAdd|classNameToRemove|KHTML|MobileSafari|Safari|SelectorsAPI|querySelector|JSONFilter|subclasses|argumentNames|instanceof|timeout|1000|Try|these|lambda|escape|PeriodicalExecuter|setInterval|clearInterval|specialChar|sub|scan||img|extractScripts|matchAll|matchOne|scriptTag|unescapeHTML|separator|charCodeAt|useDoubleQuotes|isJSON|sanitize|JSON|interpolate|amp|lt|createTextNode|Pattern|exec|comp|eachSlice|any|sortBy|collections|size|from|clear|flatten|inline|uniq|sorted|forEach|arrayLength|radix|encodeURIComponent|ObjectRange|getTransport|XMLHttpRequest|ActiveXObject|XMLHTTP|register|setRequestHeaders|overrideMimeType|2005|requestHeaders|Events|force|evalResponse|onException|getStatusText|_getHeaderJSON|responseXML|_getResponseJSON|sanitizeJSON|Updater|updateContent|updateComplete|lastText|ELEMENT_NODE|TEXT_NODE|toggle|hide|show|remove|firstDescendant|immediateDescendants|previousSibling|counter|setAttribute|getHeight|getWidth|addClassName|removeClassName|nextNode|compareDocumentPosition|scrollTo|originalVisibility|originalPosition|originalDisplay|originalWidth|clientWidth|originalHeight|clientHeight|BODY|_originalLeft|_originalTop|_originalWidth|_originalHeight|clonePosition|setLeft|setTop|setWidth|setHeight|htmlFor|parseInt|100|normal|_getAttrNode|getAttributeNode|href|src|onunload|IMG|outerHTML|TR|td|SELECT|THEAD|TFOOT|TH|TEXTAREA|findDOMClass|Mod|TableCol|TableCell|client|pageXOffset|pageYOffset|shouldUseSelectorsAPI||selectorsAPI|shouldUseXPath|compileXPathMatcher|compileMatcher|oldId|local|or|enabled|even|odd|_true|uTagName|byClassName|needle|operator|getIndices|total|matchElements|serializeElements|findFirstElement|activate|checkbox|inputSelector|selectOne|selectMany|single|Observer|registerFormCallbacks|click|buttonMap|metaKey|load|pageX|pageY|preventDefault|stopPropagation|HTMLEvents|dataavailable|createWrapper|destroyWrapper|destroyCache|removeEventListener|dispatchEvent|eventType|complete|__onDOMContentLoaded|includeScrollOffsets|deltaX|deltaY|withinIncludingScrolloffsets|instanceMethods|AppleWebKit|Apple|Mobile|secure|constructor|RangeError|unknown|boolean|splice|Function|bindAsEventListener||setTimeout|01|Date|getUTCFullYear|getUTCMonth|getUTCDate|getUTCHours|getUTCMinutes|getUTCSeconds|finally|truncate|im|fromCharCode|underscore|dasherize|x00|x1f|u00|Eaeflnr|SyntaxError|Badly|formed|parseQuery|grep|inGroupsOf|max|min|partition|reject|sort|zip|pop|member|entries|every|some|compact|reduce|intersect|isNaN|toColorPart|isFinite|abs|round|ceil|floor|Math|unset|merge|Msxml2|Microsoft|unregister|www|urlencoded|UTF|_method|Konqueror|open|postBody|send||Requested|With|Accept|javascript|charset|Connection|close|setRequestHeader|200|300|Success|Failure|java|ecma|https|Uninitialized|Loading|Loaded|Interactive|responseJSON|getAllHeaders|PeriodicalUpdater|clearTimeout|getElementById|XPathResult|ORDERED_NODE_SNAPSHOT_TYPE|snapshotLength|snapshotItem|ATTRIBUTE_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|cloneNode|ownerDocument|createRange|selectNode|createContextualFragment|lastDescendant|siblings|up|down|previous|anonymous_element_|toggleClassName|cleanWhitespace|defaultView|getComputedStyle|getOpacity|block|makePositioned|undoPositioned|makeClipping|undoClipping|getElementsBySelector|childElements|fixed|hasLayout|cellpadding|cellPadding|cellspacing|cellSpacing|colSpan|rowSpan|vAlign|dateTime|accessKey|encType|maxLength|readOnly|longDesc|frameBorder|readonly|multiple|onload|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onfocus|onblur|onkeypress|onkeydown|onkeyup|onsubmit|onreset|onselect|onchange|rv|999999|TABLE|specified|FORM|INPUT|OPTGROUP|OptGroup|TextArea|Paragraph|FIELDSET|FieldSet|UL|UList|OL|OList|DL|DList|DIR|Directory|H1|H2||H3|H4|H5|H6|Quote|INS|DEL|Anchor|Image|CAPTION||TableCaption|COL|COLGROUP|TableRow|FRAMESET|FrameSet|IFRAME|IFrame|viewport|inner|opera|version|getScrollOffsets|querySelectorAll|starts|with|mod|dis|abled|selectorType|file|getInputs|focusFirstElement|setValue|present|Field|one|selectedIndex|change|KEY_BACKSPACE|KEY_TAB|KEY_RETURN|KEY_ESC|KEY_LEFT|KEY_UP|KEY_RIGHT|KEY_DOWN|KEY_DELETE|KEY_HOME|KEY_END|KEY_PAGEUP|KEY_PAGEDOWN|KEY_INSERT|mouseover|fromElement|mouseout|isLeftClick|isMiddleClick|isRightClick|error|clientX|clientLeft|clientY|clientTop|pointerX|pointerY|stopped|cancelBubble|srcElement|unload|detachEvent|initEvent|createEventObject|ondataavailable|fireEvent|dom|DOMContentLoaded|Toggle|childOf|Insertion|Before|Top|Bottom|After|Error|is|deprecated|use|instead|within|overlap|vertical|horizontal|realOffset|page|add'.split('|'),0,{}))

// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// Contributors:
//  Justin Palmer (http://encytemedia.com/)
//  Mark Pilgrim (http://diveintomark.org/)
//  Martin Bialasinki
// 
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/ 

// converts rgb() and #xxx to #xxxxxx format,  
// returns self (or first argument) if not convertable  
String.prototype.parseColor = function() {  
  var color = '#';
  if (this.slice(0,4) == 'rgb(') {  
    var cols = this.slice(4,this.length-1).split(',');  
    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  
  } else {  
    if (this.slice(0,1) == '#') {  
      if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  
      if (this.length==7) color = this.toLowerCase();  
    }  
  }  
  return (color.length==7 ? color : (arguments[0] || this));  
};

/*--------------------------------------------------------------------------*/

Element.collectTextNodes = function(element) {  
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue : 
      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
  }).flatten().join('');
};

Element.collectTextNodesIgnoreClass = function(element, className) {  
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue : 
      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? 
        Element.collectTextNodesIgnoreClass(node, className) : ''));
  }).flatten().join('');
};

Element.setContentZoom = function(element, percent) {
  element = $(element);  
  element.setStyle({fontSize: (percent/100) + 'em'});   
  if (Prototype.Browser.WebKit) window.scrollBy(0,0);
  return element;
};

Element.getInlineOpacity = function(element){
  return $(element).style.opacity || '';
};

Element.forceRerendering = function(element) {
  try {
    element = $(element);
    var n = document.createTextNode(' ');
    element.appendChild(n);
    element.removeChild(n);
  } catch(e) { }
};

/*--------------------------------------------------------------------------*/

var Effect = {
  _elementDoesNotExistError: {
    name: 'ElementDoesNotExistError',
    message: 'The specified DOM element does not exist, but is required for this effect to operate'
  },
  Transitions: {
    linear: Prototype.K,
    sinoidal: function(pos) {
      return (-Math.cos(pos*Math.PI)/2) + 0.5;
    },
    reverse: function(pos) {
      return 1-pos;
    },
    flicker: function(pos) {
      var pos = ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
      return pos > 1 ? 1 : pos;
    },
    wobble: function(pos) {
      return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
    },
    pulse: function(pos, pulses) { 
      pulses = pulses || 5; 
      return (
        ((pos % (1/pulses)) * pulses).round() == 0 ? 
              ((pos * pulses * 2) - (pos * pulses * 2).floor()) : 
          1 - ((pos * pulses * 2) - (pos * pulses * 2).floor())
        );
    },
    spring: function(pos) { 
      return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6)); 
    },
    none: function(pos) {
      return 0;
    },
    full: function(pos) {
      return 1;
    }
  },
  DefaultOptions: {
    duration:   1.0,   // seconds
    fps:        100,   // 100= assume 66fps max.
    sync:       false, // true for combining
    from:       0.0,
    to:         1.0,
    delay:      0.0,
    queue:      'parallel'
  },
  tagifyText: function(element) {
    var tagifyStyle = 'position:relative';
    if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';
    
    element = $(element);
    $A(element.childNodes).each( function(child) {
      if (child.nodeType==3) {
        child.nodeValue.toArray().each( function(character) {
          element.insertBefore(
            new Element('span', {style: tagifyStyle}).update(
              character == ' ' ? String.fromCharCode(160) : character), 
              child);
        });
        Element.remove(child);
      }
    });
  },
  multiple: function(element, effect) {
    var elements;
    if (((typeof element == 'object') || 
        Object.isFunction(element)) && 
       (element.length))
      elements = element;
    else
      elements = $(element).childNodes;
      
    var options = Object.extend({
      speed: 0.1,
      delay: 0.0
    }, arguments[2] || { });
    var masterDelay = options.delay;

    $A(elements).each( function(element, index) {
      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
    });
  },
  PAIRS: {
    'slide':  ['SlideDown','SlideUp'],
    'blind':  ['BlindDown','BlindUp'],
    'appear': ['Appear','Fade']
  },
  toggle: function(element, effect) {
    element = $(element);
    effect = (effect || 'appear').toLowerCase();
    var options = Object.extend({
      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
    }, arguments[2] || { });
    Effect[element.visible() ? 
      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
  }
};

Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;

/* ------------- core effects ------------- */

Effect.ScopedQueue = Class.create(Enumerable, {
  initialize: function() {
    this.effects  = [];
    this.interval = null;    
  },
  _each: function(iterator) {
    this.effects._each(iterator);
  },
  add: function(effect) {
    var timestamp = new Date().getTime();
    
    var position = Object.isString(effect.options.queue) ? 
      effect.options.queue : effect.options.queue.position;
    
    switch(position) {
      case 'front':
        // move unstarted effects after this effect  
        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
            e.startOn  += effect.finishOn;
            e.finishOn += effect.finishOn;
          });
        break;
      case 'with-last':
        timestamp = this.effects.pluck('startOn').max() || timestamp;
        break;
      case 'end':
        // start effect after last queued effect has finished
        timestamp = this.effects.pluck('finishOn').max() || timestamp;
        break;
    }
    
    effect.startOn  += timestamp;
    effect.finishOn += timestamp;

    if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
      this.effects.push(effect);
    
    if (!this.interval)
      this.interval = setInterval(this.loop.bind(this), 15);
  },
  remove: function(effect) {
    this.effects = this.effects.reject(function(e) { return e==effect });
    if (this.effects.length == 0) {
      clearInterval(this.interval);
      this.interval = null;
    }
  },
  loop: function() {
    var timePos = new Date().getTime();
    for(var i=0, len=this.effects.length;i<len;i++) 
      this.effects[i] && this.effects[i].loop(timePos);
  }
});

Effect.Queues = {
  instances: $H(),
  get: function(queueName) {
    if (!Object.isString(queueName)) return queueName;
    
    return this.instances.get(queueName) ||
      this.instances.set(queueName, new Effect.ScopedQueue());
  }
};
Effect.Queue = Effect.Queues.get('global');

Effect.Base = Class.create({
  position: null,
  start: function(options) {
    function codeForEvent(options,eventName){
      return (
        (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +
        (options[eventName] ? 'this.options.'+eventName+'(this);' : '')
      );
    }
    if (options && options.transition === false) options.transition = Effect.Transitions.linear;
    this.options      = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
    this.currentFrame = 0;
    this.state        = 'idle';
    this.startOn      = this.options.delay*1000;
    this.finishOn     = this.startOn+(this.options.duration*1000);
    this.fromToDelta  = this.options.to-this.options.from;
    this.totalTime    = this.finishOn-this.startOn;
    this.totalFrames  = this.options.fps*this.options.duration;
    
    eval('this.render = function(pos){ '+
      'if (this.state=="idle"){this.state="running";'+
      codeForEvent(this.options,'beforeSetup')+
      (this.setup ? 'this.setup();':'')+ 
      codeForEvent(this.options,'afterSetup')+
      '};if (this.state=="running"){'+
      'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+
      'this.position=pos;'+
      codeForEvent(this.options,'beforeUpdate')+
      (this.update ? 'this.update(pos);':'')+
      codeForEvent(this.options,'afterUpdate')+
      '}}');
    
    this.event('beforeStart');
    if (!this.options.sync)
      Effect.Queues.get(Object.isString(this.options.queue) ? 
        'global' : this.options.queue.scope).add(this);
  },
  loop: function(timePos) {
    if (timePos >= this.startOn) {
      if (timePos >= this.finishOn) {
        this.render(1.0);
        this.cancel();
        this.event('beforeFinish');
        if (this.finish) this.finish(); 
        this.event('afterFinish');
        return;  
      }
      var pos   = (timePos - this.startOn) / this.totalTime,
          frame = (pos * this.totalFrames).round();
      if (frame > this.currentFrame) {
        this.render(pos);
        this.currentFrame = frame;
      }
    }
  },
  cancel: function() {
    if (!this.options.sync)
      Effect.Queues.get(Object.isString(this.options.queue) ? 
        'global' : this.options.queue.scope).remove(this);
    this.state = 'finished';
  },
  event: function(eventName) {
    if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
    if (this.options[eventName]) this.options[eventName](this);
  },
  inspect: function() {
    var data = $H();
    for(property in this)
      if (!Object.isFunction(this[property])) data.set(property, this[property]);
    return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
  }
});

Effect.Parallel = Class.create(Effect.Base, {
  initialize: function(effects) {
    this.effects = effects || [];
    this.start(arguments[1]);
  },
  update: function(position) {
    this.effects.invoke('render', position);
  },
  finish: function(position) {
    this.effects.each( function(effect) {
      effect.render(1.0);
      effect.cancel();
      effect.event('beforeFinish');
      if (effect.finish) effect.finish(position);
      effect.event('afterFinish');
    });
  }
});

Effect.Tween = Class.create(Effect.Base, {
  initialize: function(object, from, to) {
    object = Object.isString(object) ? $(object) : object;
    var args = $A(arguments), method = args.last(), 
      options = args.length == 5 ? args[3] : null;
    this.method = Object.isFunction(method) ? method.bind(object) :
      Object.isFunction(object[method]) ? object[method].bind(object) : 
      function(value) { object[method] = value };
    this.start(Object.extend({ from: from, to: to }, options || { }));
  },
  update: function(position) {
    this.method(position);
  }
});

Effect.Event = Class.create(Effect.Base, {
  initialize: function() {
    this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
  },
  update: Prototype.emptyFunction
});

Effect.Opacity = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    // make this work on IE on elements without 'layout'
    if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
      this.element.setStyle({zoom: 1});
    var options = Object.extend({
      from: this.element.getOpacity() || 0.0,
      to:   1.0
    }, arguments[1] || { });
    this.start(options);
  },
  update: function(position) {
    this.element.setOpacity(position);
  }
});

Effect.Move = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      x:    0,
      y:    0,
      mode: 'relative'
    }, arguments[1] || { });
    this.start(options);
  },
  setup: function() {
    this.element.makePositioned();
    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
    if (this.options.mode == 'absolute') {
      this.options.x = this.options.x - this.originalLeft;
      this.options.y = this.options.y - this.originalTop;
    }
  },
  update: function(position) {
    this.element.setStyle({
      left: (this.options.x  * position + this.originalLeft).round() + 'px',
      top:  (this.options.y  * position + this.originalTop).round()  + 'px'
    });
  }
});

// for backwards compatibility
Effect.MoveBy = function(element, toTop, toLeft) {
  return new Effect.Move(element, 
    Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
};

Effect.Scale = Class.create(Effect.Base, {
  initialize: function(element, percent) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      scaleX: true,
      scaleY: true,
      scaleContent: true,
      scaleFromCenter: false,
      scaleMode: 'box',        // 'box' or 'contents' or { } with provided values
      scaleFrom: 100.0,
      scaleTo:   percent
    }, arguments[2] || { });
    this.start(options);
  },
  setup: function() {
    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
    this.elementPositioning = this.element.getStyle('position');
    
    this.originalStyle = { };
    ['top','left','width','height','fontSize'].each( function(k) {
      this.originalStyle[k] = this.element.style[k];
    }.bind(this));
      
    this.originalTop  = this.element.offsetTop;
    this.originalLeft = this.element.offsetLeft;
    
    var fontSize = this.element.getStyle('font-size') || '100%';
    ['em','px','%','pt'].each( function(fontSizeType) {
      if (fontSize.indexOf(fontSizeType)>0) {
        this.fontSize     = parseFloat(fontSize);
        this.fontSizeType = fontSizeType;
      }
    }.bind(this));
    
    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
    
    this.dims = null;
    if (this.options.scaleMode=='box')
      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
    if (/^content/.test(this.options.scaleMode))
      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
    if (!this.dims)
      this.dims = [this.options.scaleMode.originalHeight,
                   this.options.scaleMode.originalWidth];
  },
  update: function(position) {
    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
    if (this.options.scaleContent && this.fontSize)
      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
  },
  finish: function(position) {
    if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
  },
  setDimensions: function(height, width) {
    var d = { };
    if (this.options.scaleX) d.width = width.round() + 'px';
    if (this.options.scaleY) d.height = height.round() + 'px';
    if (this.options.scaleFromCenter) {
      var topd  = (height - this.dims[0])/2;
      var leftd = (width  - this.dims[1])/2;
      if (this.elementPositioning == 'absolute') {
        if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
        if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
      } else {
        if (this.options.scaleY) d.top = -topd + 'px';
        if (this.options.scaleX) d.left = -leftd + 'px';
      }
    }
    this.element.setStyle(d);
  }
});

Effect.Highlight = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
    this.start(options);
  },
  setup: function() {
    // Prevent executing on elements not in the layout flow
    if (this.element.getStyle('display')=='none') { this.cancel(); return; }
    // Disable background image during the effect
    this.oldStyle = { };
    if (!this.options.keepBackgroundImage) {
      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
      this.element.setStyle({backgroundImage: 'none'});
    }
    if (!this.options.endcolor)
      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
    if (!this.options.restorecolor)
      this.options.restorecolor = this.element.getStyle('background-color');
    // init color calculations
    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
  },
  update: function(position) {
    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
      return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
  },
  finish: function() {
    this.element.setStyle(Object.extend(this.oldStyle, {
      backgroundColor: this.options.restorecolor
    }));
  }
});

Effect.ScrollTo = function(element) {
  var options = arguments[1] || { },
    scrollOffsets = document.viewport.getScrollOffsets(),
    elementOffsets = $(element).cumulativeOffset(),
    max = (window.height || document.body.scrollHeight) - document.viewport.getHeight();  

  if (options.offset) elementOffsets[1] += options.offset;

  return new Effect.Tween(null,
    scrollOffsets.top,
    elementOffsets[1] > max ? max : elementOffsets[1],
    options,
    function(p){ scrollTo(scrollOffsets.left, p.round()) }
  );
};

/* ------------- combination effects ------------- */

Effect.Fade = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  var options = Object.extend({
    from: element.getOpacity() || 1.0,
    to:   0.0,
    afterFinishInternal: function(effect) { 
      if (effect.options.to!=0) return;
      //effect.element.hide().setStyle({opacity: oldOpacity}); 
    },
	beforeSetup: function(effect) {
	
	  if (effect.element.getOpacity() > .05) {
	  	effect.element.setOpacity(1).show();
	  }
	}
  }, arguments[1] || { });
  return new Effect.Opacity(element,options);
};

Effect.FadeAndHide = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  var options = Object.extend({
    from: element.getOpacity() || 1.0,
    to:   0.0,
    afterFinishInternal: function(effect) { 
      if (effect.options.to!=0) return;
      effect.element.hide().setStyle({opacity: oldOpacity}); 
    },
	beforeSetup: function(effect) {
		effect.element.setOpacity(1).show();
	}
  }, arguments[1] || { });
  return new Effect.Opacity(element,options);
};

Effect.Appear = function(element) {
  element = $(element);
  var options = Object.extend({
  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
  to:   1.0,
  // force Safari to render floated elements properly
  afterFinishInternal: function(effect) {
    //effect.element.forceRerendering();
  },
  beforeSetup: function(effect) {
    effect.element.setOpacity(effect.options.from).show(); 
  }}, arguments[1] || { });
  return new Effect.Opacity(element,options);
};

Effect.Puff = function(element) {
  element = $(element);
  var oldStyle = { 
    opacity: element.getInlineOpacity(), 
    position: element.getStyle('position'),
    top:  element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height
  };
  return new Effect.Parallel(
   [ new Effect.Scale(element, 200, 
      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), 
     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], 
     Object.extend({ duration: 1.0, 
      beforeSetupInternal: function(effect) {
        Position.absolutize(effect.effects[0].element)
      },
      afterFinishInternal: function(effect) {
         effect.effects[0].element.hide().setStyle(oldStyle); }
     }, arguments[1] || { })
   );
};

Effect.BlindUp = function(element) {
  element = $(element);
  element.makeClipping();
  return new Effect.Scale(element, 0,
    Object.extend({ scaleContent: false, 
      scaleX: false, 
      restoreAfterFinish: true,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping();
      } 
    }, arguments[1] || { })
  );
};

Effect.BlindDown = function(element) {
  element = $(element);
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleX: false,
    scaleFrom: 0,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
    },  
    afterFinishInternal: function(effect) {
      effect.element.undoClipping();
    }
  }, arguments[1] || { }));
};

Effect.SwitchOff = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  return new Effect.Appear(element, Object.extend({
    duration: 0.4,
    from: 0,
    transition: Effect.Transitions.flicker,
    afterFinishInternal: function(effect) {
      new Effect.Scale(effect.element, 1, { 
        duration: 0.3, scaleFromCenter: true,
        scaleX: false, scaleContent: false, restoreAfterFinish: true,
        beforeSetup: function(effect) { 
          effect.element.makePositioned().makeClipping();
        },
        afterFinishInternal: function(effect) {
          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
        }
      })
    }
  }, arguments[1] || { }));
};

Effect.DropOut = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left'),
    opacity: element.getInlineOpacity() };
  return new Effect.Parallel(
    [ new Effect.Move(element, {x: 0, y: 100, sync: true }), 
      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
    Object.extend(
      { duration: 0.5,
        beforeSetup: function(effect) {
          effect.effects[0].element.makePositioned(); 
        },
        afterFinishInternal: function(effect) {
          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
        } 
      }, arguments[1] || { }));
};

Effect.Shake = function(element) {
  element = $(element);
  var options = Object.extend({
    distance: 20,
    duration: 0.5
  }, arguments[1] || {});
  var distance = parseFloat(options.distance);
  var split = parseFloat(options.duration) / 10.0;
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left') };
    return new Effect.Move(element,
      { x:  distance, y: 0, duration: split, afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
        effect.element.undoPositioned().setStyle(oldStyle);
  }}) }}) }}) }}) }}) }});
};

Effect.SlideDown = function(element) {
  element = $(element).cleanWhitespace();
  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleX: false, 
    scaleFrom: window.opera ? 0 : 1,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if (window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
    },
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' }); 
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
    }, arguments[1] || { })
  );
};

Effect.SlideUp = function(element) {
  element = $(element).cleanWhitespace();
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, window.opera ? 0 : 1,
   Object.extend({ scaleContent: false, 
    scaleX: false, 
    scaleMode: 'box',
    scaleFrom: 100,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if (window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().show();
    },  
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' });
    },
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
    }
   }, arguments[1] || { })
  );
};

// Bug in opera makes the TD containing this element expand for a instance after finish 
Effect.Squish = function(element) {
  return new Effect.Scale(element, window.opera ? 1 : 0, { 
    restoreAfterFinish: true,
    beforeSetup: function(effect) {
      effect.element.makeClipping(); 
    },  
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping(); 
    }
  });
};

Effect.Grow = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.full
  }, arguments[1] || { });
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();    
  var initialMoveX, initialMoveY;
  var moveX, moveY;
  
  switch (options.direction) {
    case 'top-left':
      initialMoveX = initialMoveY = moveX = moveY = 0; 
      break;
    case 'top-right':
      initialMoveX = dims.width;
      initialMoveY = moveY = 0;
      moveX = -dims.width;
      break;
    case 'bottom-left':
      initialMoveX = moveX = 0;
      initialMoveY = dims.height;
      moveY = -dims.height;
      break;
    case 'bottom-right':
      initialMoveX = dims.width;
      initialMoveY = dims.height;
      moveX = -dims.width;
      moveY = -dims.height;
      break;
    case 'center':
      initialMoveX = dims.width / 2;
      initialMoveY = dims.height / 2;
      moveX = -dims.width / 2;
      moveY = -dims.height / 2;
      break;
  }
  
  return new Effect.Move(element, {
    x: initialMoveX,
    y: initialMoveY,
    duration: 0.01, 
    beforeSetup: function(effect) {
      effect.element.hide().makeClipping().makePositioned();
    },
    afterFinishInternal: function(effect) {
      new Effect.Parallel(
        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
          new Effect.Scale(effect.element, 100, {
            scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, 
            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
        ], Object.extend({
             beforeSetup: function(effect) {
               effect.effects[0].element.setStyle({height: '0px'}).show(); 
             },
             afterFinishInternal: function(effect) {
               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); 
             }
           }, options)
      )
    }
  });
};

Effect.Shrink = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.none
  }, arguments[1] || { });
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();
  var moveX, moveY;
  
  switch (options.direction) {
    case 'top-left':
      moveX = moveY = 0;
      break;
    case 'top-right':
      moveX = dims.width;
      moveY = 0;
      break;
    case 'bottom-left':
      moveX = 0;
      moveY = dims.height;
      break;
    case 'bottom-right':
      moveX = dims.width;
      moveY = dims.height;
      break;
    case 'center':  
      moveX = dims.width / 2;
      moveY = dims.height / 2;
      break;
  }
  
  return new Effect.Parallel(
    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
    ], Object.extend({            
         beforeStartInternal: function(effect) {
           effect.effects[0].element.makePositioned().makeClipping(); 
         },
         afterFinishInternal: function(effect) {
           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
       }, options)
  );
};

Effect.Pulsate = function(element) {
  element = $(element);
  var options    = arguments[1] || { };
  var oldOpacity = element.getInlineOpacity();
  var transition = options.transition || Effect.Transitions.sinoidal;
  var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) };
  reverser.bind(transition);
  return new Effect.Opacity(element, 
    Object.extend(Object.extend({  duration: 2.0, from: 0,
      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
    }, options), {transition: reverser}));
};

Effect.Fold = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height };
  element.makeClipping();
  return new Effect.Scale(element, 5, Object.extend({   
    scaleContent: false,
    scaleX: false,
    afterFinishInternal: function(effect) {
    new Effect.Scale(element, 1, { 
      scaleContent: false, 
      scaleY: false,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping().setStyle(oldStyle);
      } });
  }}, arguments[1] || { }));
};

Effect.Morph = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      style: { }
    }, arguments[1] || { });
    
    if (!Object.isString(options.style)) this.style = $H(options.style);
    else {
      if (options.style.include(':'))
        this.style = options.style.parseStyle();
      else {
        this.element.addClassName(options.style);
        this.style = $H(this.element.getStyles());
        this.element.removeClassName(options.style);
        var css = this.element.getStyles();
        this.style = this.style.reject(function(style) {
          return style.value == css[style.key];
        });
        options.afterFinishInternal = function(effect) {
          effect.element.addClassName(effect.options.style);
          effect.transforms.each(function(transform) {
            effect.element.style[transform.style] = '';
          });
        }
      }
    }
    this.start(options);
  },
  
  setup: function(){
    function parseColor(color){
      if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
      color = color.parseColor();
      return $R(0,2).map(function(i){
        return parseInt( color.slice(i*2+1,i*2+3), 16 ) 
      });
    }
    this.transforms = this.style.map(function(pair){
      var property = pair[0], value = pair[1], unit = null;

      if (value.parseColor('#zzzzzz') != '#zzzzzz') {
        value = value.parseColor();
        unit  = 'color';
      } else if (property == 'opacity') {
        value = parseFloat(value);
        if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
          this.element.setStyle({zoom: 1});
      } else if (Element.CSS_LENGTH.test(value)) {
          var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
          value = parseFloat(components[1]);
          unit = (components.length == 3) ? components[2] : null;
      }

      var originalValue = this.element.getStyle(property);
      return { 
        style: property.camelize(), 
        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), 
        targetValue: unit=='color' ? parseColor(value) : value,
        unit: unit
      };
    }.bind(this)).reject(function(transform){
      return (
        (transform.originalValue == transform.targetValue) ||
        (
          transform.unit != 'color' &&
          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
        )
      )
    });
  },
  update: function(position) {
    var style = { }, transform, i = this.transforms.length;
    while(i--)
      style[(transform = this.transforms[i]).style] = 
        transform.unit=='color' ? '#'+
          (Math.round(transform.originalValue[0]+
            (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
          (Math.round(transform.originalValue[1]+
            (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
          (Math.round(transform.originalValue[2]+
            (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
        (transform.originalValue +
          (transform.targetValue - transform.originalValue) * position).toFixed(3) + 
            (transform.unit === null ? '' : transform.unit);
    this.element.setStyle(style, true);
  }
});

Effect.Transform = Class.create({
  initialize: function(tracks){
    this.tracks  = [];
    this.options = arguments[1] || { };
    this.addTracks(tracks);
  },
  addTracks: function(tracks){
    tracks.each(function(track){
      track = $H(track);
      var data = track.values().first();
      this.tracks.push($H({
        ids:     track.keys().first(),
        effect:  Effect.Morph,
        options: { style: data }
      }));
    }.bind(this));
    return this;
  },
  play: function(){
    return new Effect.Parallel(
      this.tracks.map(function(track){
        var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
        var elements = [$(ids) || $$(ids)].flatten();
        return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
      }).flatten(),
      this.options
    );
  }
});


Element.CSS_PROPERTIES = $w(
  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + 
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
  'fontSize fontWeight height left letterSpacing lineHeight ' +
  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
  'right textIndent top width wordSpacing zIndex');
  
Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;

String.__parseStyleElement = document.createElement('div');
String.prototype.parseStyle = function(){
  var style, styleRules = $H();
  if (Prototype.Browser.WebKit)
    style = new Element('div',{style:this}).style;
  else {
    String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
    style = String.__parseStyleElement.childNodes[0].style;
  }
  
  Element.CSS_PROPERTIES.each(function(property){
    if (style[property]) styleRules.set(property, style[property]); 
  });
  
  if (Prototype.Browser.IE && this.include('opacity'))
    styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);

  return styleRules;
};

if (document.defaultView && document.defaultView.getComputedStyle) {
  Element.getStyles = function(element) {
    var css = document.defaultView.getComputedStyle($(element), null);
    return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
      styles[property] = css[property];
      return styles;
    });
  };
} else {
  Element.getStyles = function(element) {
    element = $(element);
    var css = element.currentStyle, styles;
    styles = Element.CSS_PROPERTIES.inject({ }, function(hash, property) {
      hash.set(property, css[property]);
      return hash;
    });
    if (!styles.opacity) styles.set('opacity', element.getOpacity());
    return styles;
  };
};

Effect.Methods = {
  morph: function(element, style) {
    element = $(element);
    new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
    return element;
  },
  visualEffect: function(element, effect, options) {
    element = $(element)
    var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
    new Effect[klass](element, options);
    return element;
  },
  highlight: function(element, options) {
    element = $(element);
    new Effect.Highlight(element, options);
    return element;
  }
};

$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
  'pulsate shake puff squish switchOff dropOut').each(
  function(effect) { 
    Effect.Methods[effect] = function(element, options){
      element = $(element);
      Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
      return element;
    }
  }
);

$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each( 
  function(f) { Effect.Methods[f] = Element[f]; }
);

Element.addMethods(Effect.Methods);


// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

function setFocus(obj){

	var inputs = obj.element.getElementsByTagName("input");
	for (i = 0; i < inputs.length; i++) {
		if (inputs[i].id == "picture_title") {
			inputs[i].focus();	
			break;
		}
	}
}
	
function changeVisibility(id, visible)
{
	if (visible == true)
	{
		document.getElementById(id).style.visibility = 'visible';	
	}
	else
	{
		document.getElementById(id).style.visibility = 'hidden';	
	}	
}

function hideTextField(id, visible)
{
	if (visible)
	{
		document.getElementById(id).style.display = "inline";
	}
	else
	{
		document.getElementById(id).style.display = "none";
	}
}

function changeDisplay(id, display)
{	
	if (document.getElementById(id) != null)
	{
		document.getElementById(id).style.display = display;	
	}
	
}

function enableField(id, enabled)
{
	document.getElementById(id).disabled = !enabled;
}

function changeColor(id, color) 
{
	element = document.getElementById(id);
	element.style.backgroundColor = color;
} 

function populateTextAreaField(id, msg_enabled, msg_disabled, enabled)
{
	var container = document.getElementById(id);
	if (enabled)
	{
		container.innerHTML = msg_enabled;
		container.value = msg_enabled;
	}
	else
	{
		container.innerHTML = msg_disabled;	
		container.value = msg_disabled;
	}
}

function updateDivContent(id, content)
{
	document.getElementById(id).innerHTML = content;
}
function updateLoginStatus(login)
{

	document.getElementById("status").innerHTML = login;
}

function isValidEmail(email)
{
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    var address = email;
    if(reg.test(address) == false) {
      return false;
    }
	return true;
}

var firstFocusForAddFriendsField = false;

function deleteAddFriendsTextOnFirstFocus()
{
	if (!firstFocusForAddFriendsField)
	{
		document.getElementById("friends-input").value = "";
		document.getElementById("friends-input").innerHTML = "";
	}
	firstFocusForAddFriendsField = true;
}

function hideFlashAfterDelay(delay)
{
	setTimeout("changeDisplay('FlashMessage', 'none');", delay);
}

function getIndexFromCountryId(country_id)
{

	for (var i = 0; i < $('country_id').length; i++) 
	{
		if ($('country_id').options[i].value == country_id) {
			
			return i;
		}
	}
	return -1;
	
}

function setStateMaxLengthFromCountryId(country_id) 
{
	if (country_id == 1 || country_id == 2) {
		$('state').maxLength = 2;
	} else {
		$('state').maxLength = 100;
	}
	
}

function updatePlanPrices(mailings)
{
	mailings = parseInt(mailings)
	if (isNaN(mailings) || mailings > 4 || mailings < 1) {
		mailings = 1
	}
	//$('recipient_0').innerHTML = plans[mailings][0];
	$('recipient_1').innerHTML = plans[mailings][1];
	$('recipient_2').innerHTML = plans[mailings][2];
	$('recipient_3').innerHTML = plans[mailings][3];

	$('mailings').selectedIndex = mailings - 1;
}

function updatePlanLinks(mailings)
{
	mailings = parseInt(mailings)
	if (isNaN(mailings) || mailings > 4 || mailings < 1) {
		mailings = 1
	}

	//$('link_0').innerHTML = planLinks[mailings][0];
	$('link_1').innerHTML = planLinks[mailings][1];
	$('link_2').innerHTML = planLinks[mailings][2];
	$('link_3').innerHTML = planLinks[mailings][3];
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function setCookie(c_name,value,expiredays)
{

var exdate=new Date();
var domain=".picwing.com";
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString()) + 
((domain==null) ? "" : ";domain="+domain);
}

function showClass(name) {

	if (name == "role-guest") {
		document.getElementById("role-guest").style.display = "inline";
		document.getElementById("role-user").style.display = "none";
	} else if (name == "role-user") {
		document.getElementById("role-guest").style.display = "none";
		document.getElementById("role-user").style.display = "inline";
	} 
}   
			
var currentPlanType = 0;

function showPlanType2(type) {

	if (currentPlanType == 0) {
		if ($('MonthlyPlanDescription') != null) {
			$('MonthlyPlanDescription').style.display = "none";	
		}
		if ($('Monthly') != null) {
			$('Monthly').style.height = "50px";
			$('Monthly').style.backgroundColor  = "#ffffff"; 
			$('Monthly').style.border = "1px solid #aaaaaa";
			$('Monthly').style.color = "#333333"; 
		}
		
		if ($('PayAsYouGoPlanDescription') != null) {
			$('PayAsYouGoPlanDescription').style.display = "none";
		}
		if ($('PayAsYouGo') != null) {
			$('PayAsYouGo').style.height = "50px";
			$('PayAsYouGo').style.backgroundColor  = "#ffffff"; 
			$('PayAsYouGo').style.border = "1px solid #aaaaaa";
			$('PayAsYouGo').style.color = "#333333"; 
		}
		
		
		if (type == 1) {
			if ($('Monthly') != null) {
	  		$('Monthly').style.backgroundColor = "#FFC425"; 
				$('Monthly').style.border = "1px solid #000000";
				$('Monthly').style.color = "#000000"; 
			}
			
			
			if ($('MonthlyConfigurator') != null) {
		  	/*
				new Effect.Appear("MonthlyConfigurator", {
					queue: { position: 'end', scope: 'header' },
					afterFinish: function (effect) { recipients_slider.recalculate(); frequency_slider.recalculate(); },
					duration: 0
		  	});
				*/
				
				
				new Effect.Opacity(
				   'MonthlyConfigurator', { 
				      from: 0.0, 
				      to: 1.0,
				      duration: .3,
							beforeSetup: function (effect) {
								$('MonthlyConfigurator').setStyle({display: 'inline'});
								recipients_slider.recalculate(); 
								frequency_slider.recalculate();
							}
				   }
				);
				
	  	}
			
			if ($('MonthlyFooter') != null) {
		  	new Effect.Appear("MonthlyFooter", {
		  		duration: .3
		  	});
	  	}
			
			if ($('MonthlyPricingSideBar') != null) {
				new Effect.Appear("MonthlyPricingSideBar", {
					duration: .3
				});
			}
			currentPlanType = 1;
		} else if (type == 2) {
			if ($('PayAsYouGo') != null) {
	  		$('PayAsYouGo').style.backgroundColor  = "#FFC425"; 
				$('PayAsYouGo').style.border = "1px solid #000000";
				$('PayAsYouGo').style.color = "#000000"; 
			}
			
			/*
			if ($('PayAsYouGoConfigurator') != null) {
				new Effect.Appear("PayAsYouGoConfigurator", {
		  		duration: .3
		  	});
			}
			*/
			
			
			
			new Effect.Opacity(
			   'PayAsYouGoConfigurator', { 
			      from: 0.0, 
			      to: 1.0,
			      duration: .3,
						beforeSetup: function (effect) {
								$('PayAsYouGoConfigurator').setStyle({display: 'inline'});
							}
			   }
			);
			
			if ($('PayAsYouGoFooter') != null) {
		  	new Effect.Appear("PayAsYouGoFooter", {
		  		duration: .3
		  	});
	  	}
			
			if ($('PayAsYouGoPricingSideBar') != null) {
				new Effect.Appear("PayAsYouGoPricingSideBar", {
					duration: .3
				});
			}
		
			currentPlanType = 2;
		}
		
	} else {
		if (currentPlanType == type) {
			/*
			if ($('PayAsYouGo') != null) {
	  		$('PayAsYouGo').style.backgroundColor  = "#ffffff"; 
				$('PayAsYouGo').style.border = "1px solid #aaaaaa";
				$('PayAsYouGo').style.color = "#333333";
				$('PayAsYouGo').style.height = "50px"; 
			}
			 
			if ($('PayAsYouGoPlanDescription') != null) {
	  		$('PayAsYouGoPlanDescription').style.display = "inline";
	  	}
			
			
			if ($('Monthly') != null) {
		  	$('Monthly').style.backgroundColor  = "#ffffff"; 
				$('Monthly').style.border = "1px solid #aaaaaa";
				$('Monthly').style.color = "#333333"; 
				$('Monthly').style.height = "50px"; 
	  	}
			
			if ($('MonthlyPlanDescription') != null) {
		  	$('MonthlyPlanDescription').style.display = "inline";
		  }
			if ($('PayAsYouGoConfigurator') != null) {
				
				
				new Effect.Opacity(
				   'PayAsYouGoConfigurator', { 
				      from: 1.0, 
				      to: 0.0,
				      duration: .3,
							afterFinish: function (effect) {  
								$('PayAsYouGoConfigurator').setStyle({display: 'none'});
								//$('PayAsYouGoConfigurator').setStyle({visibility: 'hidden'});
							}
				   }
				);
			}
			
			
			
			
			
			if ($('PayAsYouGoFooter') != null) {
				new Effect.FadeAndHide('PayAsYouGoFooter', {
		  		duration: .3
		  	});
			}
			
			
			if ($('MonthlyConfigurator') != null) {
				
				new Effect.Opacity(
				   'MonthlyConfigurator', { 
				      from: 1.0, 
				      to: 0.0,
				      duration: .3,
							afterFinish: function (effect) {  
								$('MonthlyConfigurator').setStyle({display: 'none'});
								//$('MonthlyConfigurator').setStyle({visibility: 'hidden'});
							}
				   }
				);
			}
			
			if ($('MonthlyFooter') != null) {
				new Effect.FadeAndHide('MonthlyFooter', {
		  		duration: .3
		  	});
			}
			
			if ($('MonthlyPricingSideBar') != null) {
				new Effect.FadeAndHide('MonthlyPricingSideBar', {
		  		duration: .3
		  	});
			}
			
			if ($('PayAsYouGoPricingSideBar') != null) {
				new Effect.FadeAndHide('PayAsYouGoPricingSideBar', {
		  		duration: .3
		  	});
			}
			
			currentPlanType = 0;
			*/
		}
	}
	
	if (currentPlanType != type && currentPlanType != 0)
	{
		if ($('MonthlyPlanDescription') != null) {
			$('MonthlyPlanDescription').style.display = "none";
		}
		
		if ($('Monthly') != null) {
			$('Monthly').style.height = "50px";
			$('Monthly').style.backgroundColor  = "#ffffff"; 
			$('Monthly').style.border = "1px solid #aaaaaa";
			$('Monthly').style.color = "#333333"; 
		}
		
		if ($('PayAsYouGoPlanDescription') != null) {
			$('PayAsYouGoPlanDescription').style.display = "none";
		}
		
		if ($('PayAsYouGo') != null) {
			$('PayAsYouGo').style.height = "50px";
			$('PayAsYouGo').style.backgroundColor  = "#ffffff"; 
			$('PayAsYouGo').style.border = "1px solid #aaaaaa";
			$('PayAsYouGo').style.color = "#333333"; 	
		}
		
		
		
		
		if (type == 1) {
			if ($('Monthly') != null) {
		  	$('Monthly').style.backgroundColor = "#FFC425"; 
				$('Monthly').style.border = "1px solid #000000";
				$('Monthly').style.color = "#000000"; 
			}
			
			
			if ($('PayAsYouGoConfigurator') != null) {
				/*
				new Effect.FadeAndHide('PayAsYouGoConfigurator', {
		  		queue: { position: 'end', scope: 'header' },
		  		duration: .3
		  	});
		  	*/
				
				new Effect.Opacity(
				   'PayAsYouGoConfigurator', { 
					 		queue: { position: 'end', scope: 'header' },
				      from: 1.0, 
				      to: 0.0,
				      duration: .3,
							afterFinish: function (effect) {  
								$('PayAsYouGoConfigurator').setStyle({display: 'none'});
								//$('PayAsYouGoConfigurator').setStyle({visibility: 'hidden'});
							}
				   }
				);
			}
			
			if ($('PayAsYouGoFooter') != null) {
				new Effect.FadeAndHide('PayAsYouGoFooter', {
		  		queue: { position: 'end', scope: 'footer' },
		  		duration: .3
		  	});
			}
			if ($('PayAsYouGoPricingSideBar') != null) {
				new Effect.FadeAndHide('PayAsYouGoPricingSideBar', {
		  		queue: { position: 'end', scope: 'payasyougosidebar' },
		  		duration: .3
		  	});
			}
			
			if ($('MonthlyConfigurator') != null) {
				/*
		  	new Effect.Appear("MonthlyConfigurator", {
		  		queue: { position: 'end', scope: 'header' },
					afterFinish: function (effect) { recipients_slider.recalculate(); frequency_slider.recalculate(); },
		  		duration: .3
		  	});
		  	*/
				
				//$('MonthlyConfigurator').setStyle({visibility: 'visible'});
				
				new Effect.Opacity(
				   'MonthlyConfigurator', {
					 		queue: { position: 'end', scope: 'header' }, 
				      from: 0.0, 
				      to: 1.0,
				      duration: .3,
							beforeSetup: function (effect) {
								$('MonthlyConfigurator').setStyle({display: 'inline'});
								recipients_slider.recalculate(); 
								frequency_slider.recalculate();
							}
				   }
				);
			}
			
			if ($('MonthlyFooter') != null) {
				new Effect.Appear("MonthlyFooter", {
		  		queue: { position: 'end', scope: 'footer' },
		  		duration: .3
		  	});
			}
			if ($('MonthlyPricingSideBar') != null) {
				new Effect.Appear('MonthlyPricingSideBar', {
		  		queue: { position: 'end', scope: 'monthlysidebar' },
		  		duration: .3
		  	});
	  	}
			currentPlanType = 1;
		} else if (type == 2) {
			if ($('PayAsYouGo') != null) {
		 	  $('PayAsYouGo').style.backgroundColor  = "#FFC425"; 
				$('PayAsYouGo').style.border = "1px solid #000000";
				$('PayAsYouGo').style.color = "#000000"; 
			}
			
			
			if ($('MonthlyConfigurator') != null) {
				/*
				new Effect.FadeAndHide('MonthlyConfigurator', {
		  		queue: { position: 'end', scope: 'header' },
		  		duration: .3
		  	});
		  	*/
				
				new Effect.Opacity(
				   'MonthlyConfigurator', {
					 		queue: { position: 'end', scope: 'header' }, 
				      from: 1.0, 
				      to: 0.0,
				      duration: .3,
							afterFinish: function (effect) {  
								
								$('MonthlyConfigurator').setStyle({display: 'none'});
								//$('MonthlyConfigurator').setStyle({visibility: 'hidden'});
								
							}
				   }
				);
			}
			
			if ($('MonthlyFooter') != null) {
				new Effect.FadeAndHide('MonthlyFooter', {
		  		queue: { position: 'end', scope: 'footer' },
		  		duration: .3
		  	});
			}
			if ($('MonthlyPricingSideBar') != null) {
				new Effect.FadeAndHide('MonthlyPricingSideBar', {
		  		queue: { position: 'end', scope: 'monthlysidebar' },
		  		duration: .3
		  	});
			}
			
			if ($('PayAsYouGoConfigurator') != null) {
				/*
		  	new Effect.Appear("PayAsYouGoConfigurator", {
		  		queue: { position: 'end', scope: 'header' },
		  		duration: .3
		  	});
		  	*/
				
				
				//$('PayAsYouGoConfigurator').setStyle({visibility: 'visible'});
	
				new Effect.Opacity(
				   'PayAsYouGoConfigurator', { 
					 		queue: { position: 'end', scope: 'header' },
				      from: 0.0, 
				      to: 1.0,
				      duration: .3,
							
							beforeSetup: function (effect) {
								$('PayAsYouGoConfigurator').setStyle({display: 'inline'});
							}
				   }
				);
			}
			
			if ($('PayAsYouGoFooter') != null) {
				new Effect.Appear("PayAsYouGoFooter", {
		  		queue: { position: 'end', scope: 'footer' },
		  		duration: .3
		  	});
			}
			
			if ($('PayAsYouGoPricingSideBar') != null) {
				new Effect.Appear('PayAsYouGoPricingSideBar', {
		  		queue: { position: 'end', scope: 'payasyougosidebar' },
		  		duration: .3
		  	});
			}
			
			currentPlanType = 2;
		}
		
	}
	
	
}


function calculatePrice(recipients, frequency) {

	if (frequency == 1) {
  	switch (recipients) {
			case 1:
				return "4.95";
				break;
			case 2:
				return "9.95";
				break;
			case 3:
				return "14.95";
				break;
			case 4:
				return "19.95";
				break;
			case 5:
				return "24.95";
				break;
			case 6:
				return "29.95";
				break;
			default: 
				return "N/A";
		}
	} else if (frequency == 2) {
		switch (recipients) {
			case 1:
				return "6.95";
				break;
			case 2:
				return "11.95";
				break;
			case 3:
				return "16.95";
				break;
			case 4:
				return "27.95";
				break;
			case 5:
				return "34.95";
				break;
			case 6:
				return "41.95";
				break;
			default:
				return "N/A";
		}
	} else {
			return "N/A";
	}
	
	
}

function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

function selectWidget(selected, userInitiated) {
	if (userInitiated) {
		for (var i = 0; i < timers.length; i++) {
			clearTimeout(timers[i]);
		}
	}
	
	if (selectedWidget == null) {
		if (selected.id != 'iPhoneWidgetPreview') Effect.Fade('iPhoneWidgetPreview', { duration: 0.5, to: .30 });
		if (selected.id != 'AndroidWidgetPreview') Effect.Fade('AndroidWidgetPreview', { duration: 0.5, to: .30 });
		if (selected.id != 'EmailWidgetPreview') Effect.Fade('EmailWidgetPreview', { duration: 0.5, to: .30 });
		if (selected.id != 'PicasaWidgetPreview') Effect.Fade('PicasaWidgetPreview', { duration: 0.5, to: .30 });
		if (selected.id != 'DesktopWidgetPreview') Effect.Fade('DesktopWidgetPreview', { duration: 0.5, to: .30 });
		if (selected.id != 'WebWidgetPreview') Effect.Fade('WebWidgetPreview', { duration: 0.5, to: .30 });	
	} else {
		if (selected != selectedWidget) {
			Effect.Fade(selectedWidget, { duration: 0.5, to: .30 });	
		}
		
	}
	
	if (selected != null) {
		if (selected == selectedWidget) {
			selected = null;
		} else {
			Effect.Appear(selected, { duration: 0.5, to: .99 });	
		}
			
	}
	
	$$('.SelectedWidget').each(function(elem) {
	  //elem.fade({ duration: 0.5, queue: 'end', afterFinish: function() { elem.hide(); } });
		elem.hide();
		elem.className = "Widget";
	});
	
	if (selected == null) {
		Effect.Appear('iPhoneWidgetPreview', { duration: 0.5, to: .99 });	
		Effect.Appear('AndroidWidgetPreview', { duration: 0.5, to: .99 });	
		Effect.Appear('EmailWidgetPreview', { duration: 0.5, to: .99 });	
		Effect.Appear('PicasaWidgetPreview', { duration: 0.5, to: .99 });	
		Effect.Appear('DesktopWidgetPreview', { duration: 0.5, to: .99 });	
		Effect.Appear('WebWidgetPreview', { duration: 0.5, to: .99 });	
		$('Grandparents').show();
		$('Grandparents').className = "SelectedWidget";
	} else {
		switch (selected.id) {
			case "iPhoneWidgetPreview":
				$('iPhoneWidget').appear({ duration: 0.5, to: .99 });
				$('iPhoneWidget').className = "SelectedWidget";
			break;
			case "AndroidWidgetPreview":
				$('AndroidWidget').appear({ duration: 0.5, to: .99 });
				$('AndroidWidget').className = "SelectedWidget";
			break;
			case "EmailWidgetPreview":
				$('EmailWidget').appear({ duration: 0.5, to: .99 });
				$('EmailWidget').className = "SelectedWidget";
			break;
			case "PicasaWidgetPreview":
				$('PicasaWidget').appear({ duration: 0.5, to: .99 });
				$('PicasaWidget').className = "SelectedWidget";
			break;
			case "DesktopWidgetPreview":
				$('DesktopWidget').appear({ duration: 0.5, to: .99 });
				$('DesktopWidget').className = "SelectedWidget";
			break;
			case "WebWidgetPreview":
				$('WebWidget').appear({ duration: 0.5, to: .99 });
				$('WebWidget').className = "SelectedWidget";
			break;
			default:
			break;
		}	
	}
	

	selectedWidget = selected;
}


var firstFocusForAlbumEmailField = false;
var firstUpdateForAlbumEmailField = false;

function updateUrl()
{
  var urlContainer = document.getElementById("url");
	
	var albumEmail = document.getElementById("AlbumEmailField").value
	
	var containerHTML = '';
	containerHTML += albumEmail;
	containerHTML += '.picwing.com';
	
	urlContainer.innerHTML = containerHTML;	
	
}



function firstUpdate()
{
	if (!firstUpdateForAlbumEmailField) {
		firstUpdateForAlbumEmailField = true;
	}

}

function validateAlbumName()
{
	
	var albumNameValidateContainer = document.getElementById("album-name-validate");
	var albumName = document.getElementById("AlbumNameField").value
	
	var containerHTML = '<table><tr><td>';
	containerHTML += '<img src="images/layout/';
	
	var valid = albumNameIsValid(albumName);
	
	if (valid == "") 
	{
		containerHTML += 'ok.gif" />';

		containerHTML += "</td><td>"
		containerHTML += '<span class="invalid-text">&nbsp;</span>';
		containerHTML += '</td>';
	}
	else
	{
		containerHTML += 'not-ok.gif" />';
		containerHTML += "</td><td>";
		containerHTML += '<span class="invalid-text">' + valid + '</span>';
		containerHTML += '</td>';
	}
	containerHTML += '</tr></table>';

	albumNameValidateContainer.innerHTML = containerHTML;	
}

function albumNameIsValid(albumName)
{
	var valid = "";

	if (albumName.length > 0)
	{
		valid = "";
	}
	else
	{
		valid = "Please enter an album name";
	}
	
	return(valid)
}

var currentSelectedPicture = 0;
var pictureCount = 0;
var currentlyUploading = false;
var queueSignupMessage = false;
var flash_expanded = false;

function getCurrentSelectedPicture()
{
	return currentSelectedPicture;
}

function setCurrentSelectedPicture(id)
{
	currentSelectedPicture = id;
}


function pictureChanged(picture_id, modifiable, title, filename, full_name, user_id, created_at)
{

	
	setCurrentSelectedPicture(picture_id);

	if (full_name == "")
	{
		updateDivContent("By", "&nbsp;");
	}
	else
	{
		updateDivContent("By", "by " + full_name);
	}
	updateDivContent("Added", "Added " + created_at + " ago")

	
	new Ajax.Request('/new_comment', {
		asynchronous: true,
		evalScripts: true,
		method: 'get',
		parameters: 'picture_id=' + getCurrentSelectedPicture()
	});
		
	if (modifiable == "true" || modifiable == true)
	{
		changeVisibility("DeleteLink", true);
		changeVisibility("EditPictureLink", true);
	}
	else
	{
		changeVisibility("DeleteLink", false);
		changeVisibility("EditPictureLink", false);
	}

}


function setPictureCount(count)
{
	pictureCount = count;
	if (!flash_expanded) {
		if (pictureCount == 0) {
		
			
			if (document.getElementById("contribute-message") != null) {
				changeDisplay("contribute-message", "none");
			}
			
			if (document.getElementById("UploadMessage") != null) {
				changeDisplay("UploadMessage", "none");
			}
			if (document.getElementById("ReorderMessage") != null) {
				changeDisplay("ReorderMessage", "none");
			}
			if (document.getElementById("PrintMessage") != null) {
				changeDisplay("PrintMessage", "none");
			}
			if (document.getElementById("LayoutSelector") != null) {
				changeDisplay("LayoutSelector", "none");
			}
		}
	}
}


function updatePictureCount(count)
{

	var previousPictureCount = getPictureCount();
	setPictureCount(count);
	
	
	
	if (getPictureCount() == 0)
	{
		changeVisibility("DeleteLink", false);
		changeVisibility("EditPictureLink", false);
	}
	else
	{
		if (previousPictureCount == 0)
		{
			queueSignupMessage = true;
		
			changeDisplay("contribute-message", "inline");
			changeDisplay("UploadMessage", "inline");
			changeDisplay("ReorderMessage", "inline");
			changeDisplay("PrintMessage", "inline");
			changeDisplay("NewAlbumMessage", "none");
			changeDisplay("LayoutSelector", "inline");
			expandFlash();
		}
		
		
		if (queueSignupMessage && !currentlyUploading)
		{	
			new Ajax.Request('/display_register_message', {
				asynchronous: true,
				evalScripts: true,
				method: 'get',
				parameters: ''
			});		
		
		}
		
		updateAllocaitonPictureUsed();
		
	}
}


function getPictureCount()
{
	
	return pictureCount;
	
}

function getFlashMovie(movieName) {
	var isIE = navigator.appName.indexOf("Microsoft") != -1;
	return (isIE) ? window[movieName] : document[movieName];
}

function callUploadFlash(movieName) {
     getFlashMovie(movieName).uploadPressed();
}

function uploadIsStarting()
{

	currentlyUploading = true;
	pictureCountBeforeUpload = pictureCount;
	document.getElementById('UploadButton').disabled = true;
	
	if (pictureCount == 0 || pictureCount == "0")
	{
		
		changeDisplay("contribute-message", "inline");
		
		changeDisplay("UploadMessage", "inline");
		changeDisplay("ReorderMessage", "inline");
		
		changeDisplay("PrintMessage", "inline");
		changeDisplay("NewAlbumMessage", "none");
		changeDisplay("LayoutSelector", "inline")
			
		if (!flash_expanded) {
			expandFlash();
		}
		
	}
	else 
	{
		
		showUploadingDialog();
		
	}

}

function showUploadingDialog(){
		document.getElementById("UploaderContainer").style.left = "-300px";
		document.getElementById("UploaderContainer").style.top = "160px";
		getFlashMovie("Uploader").width = "290px";
		getFlashMovie("Uploader").height = "180px";	
}

function expandFlash()
{
	document.getElementById("FlashContainer").style.width = "100%";
	document.getElementById("FlashContainer").style.height = "510px";
	getFlashMovie("PhotoStream").height= "460px";
	document.getElementById("FlashContainerPicture").style.display = "inline";
	flash_expanded = true;
}
function uploadComplete()
{	
	getFlashMovie("PhotoStream").refreshData();
	currentlyUploading = false;
	document.getElementById('UploadButton').disabled = false;
	
	if (queueSignupMessage && !currentlyUploading)
	{	
		new Ajax.Request('/display_register_message', {
			asynchronous: true,
			evalScripts: true,
			method: 'get',
			parameters: ''
		});		
	
	}
		
	hideUploadingDialog();	
}

function updateAllocaitonPictureUsed()
{
	new Ajax.Request('/get_allocation_pictures_used', {
			asynchronous: true,
			evalScripts: true, 
			method: 'get', 
			parameters: ''
	});
	getFlashMovie('Uploader').refreshRemainingPictures();
}

function hideUploadingDialog(){
	document.getElementById("UploaderContainer").style.left = "0px";
	document.getElementById("UploaderContainer").style.top = "0px";
	if (extended_upload_button == true)
		getFlashMovie("Uploader").width = "160px";
	else
		getFlashMovie("Uploader").width = "110px";
	getFlashMovie("Uploader").height = "20px";
}

function changePictureTitle(movieName, newTitle){
	unescapedTitle = unescape(newTitle);
	getFlashMovie(movieName).pictureTitleChanged(currentSelectedPicture, unescapedTitle);
}

function pictureDeleted(movieName, picture_id){
	getFlashMovie(movieName).pictureDeleted(picture_id);
	new Ajax.Request('/get_allocation_pictures_used', {
			asynchronous: true,
			evalScripts: true, 
			method: 'get', 
			parameters: ''
	})
	getFlashMovie('Uploader').refreshRemainingPictures();	
}


function refreshPage(){
	location.reload();
}

var currentDescriptionFocus = "";
function selectNewAlbumGuide(step) {
	currentDescriptionFocus = "NewAlbum" + step;
	changeDisplay("NewAlbumName", "none");
	changeDisplay("NewAlbumSubmissionEmailAddress", "none");
	changeDisplay("NewAlbumURL", "none");
	changeDisplay("NewAlbumDescription", "none");
	
	if (currentDescriptionFocus == "NewAlbumName")
	{
		new Effect.Appear("NewAlbumName", {
			duration: 0.7
		});
	}
	else if (currentDescriptionFocus == "NewAlbumSubmissionEmailAddress")
	{
		new Effect.Appear("NewAlbumSubmissionEmailAddress", {
			duration: 0.7
		});
		new Effect.Appear("NewAlbumURL", {
			duration: 0.7
		});
		
	}
	else if (currentDescriptionFocus == "NewAlbumDescription")
	{
		new Effect.Appear("NewAlbumDescription", {
			duration: 0.7
		});
	}

}

function updateSlideShowAttributes(movieName, allow_navigation, play_speed, initial_transition_time, final_scale, initial_scale, transition_time){

	getFlashMovie(movieName).updateSlideShowAttributes(allow_navigation, play_speed, initial_transition_time, final_scale, initial_scale, transition_time);
}

function applySlideShowChanges()
{
	var playSpeed = document.getElementById("slide_show_play_speed").value;
	var finalScale = document.getElementById("slide_show_final_scale").value / 10;
	var transitionTime = document.getElementById("slide_show_transition_time").value;
	var initialTransitionTime = document.getElementById("slide_show_initial_transition_time").value;
	var initialScale = document.getElementById("slide_show_initial_scale").value;
	var allowNavigation = document.getElementById("slide_show_allow_navigation").checked == true ? "1" : "0";
	updateSlideShowAttributes('e_picwing', allowNavigation, playSpeed, initialTransitionTime, finalScale, initialScale, transitionTime)
}

function show_picture_print_status(picture_id)
{
	window.open("/pictures/show_print_status?id=" + picture_id,'Picture_print_status','height=500,width=410,scrollbars=yes');return false;
}

function gotoHtmlPicture(picture_id){
	location = "/pictures/" + picture_id;
	
}

function setLayoutField(layout)
{
	if ($("LayoutSelectorField") != null) 
	{
		if (layout == "normal") 
		{

			$("LayoutSelectorField").selectedIndex = 0;

		} 
		else if (layout == "journal")
		{
			$("LayoutSelectorField").selectedIndex = 1;
		}
		else if (layout == "simple") 
		{
			$("LayoutSelectorField").selectedIndex = 2;
		} 
		else 
		{
			
		}
		
	}
}

function hasRemovedRequiredRecipients(numRequired) {
	removed = 0;

  for (var i = 0; i < $('form').elements.length; i++ ) {
    if ($('form').elements[i].type == 'checkbox') {
      if ($('form').elements[i].checked == true) {
				removed++;
      }
    }
  }
	if (removed >= numRequired) {
		$('submit').disabled = false;		
		
	} else {
		$('submit').disabled = true;

	}

}
