

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 1k={7p:\'1.5.1.1\',1X:{4c:!!(1p.7q&&!1p.4d),aH:!!1p.4d,3U:5f.6x.2y(\'ib/\')>-1,7r:5f.6x.2y(\'7r\')>-1&&5f.6x.2y(\'dD\')==-1},5H:{aI:!!1c.3u,7s:!!1p.7t,aJ:(1c.23(\'2O\').7u!==1c.23(\'1U\').7u)},8P:\'<4r[^>]*>([\\\\S\\\\s]*?)<\\/4r>\',dE:/^\\/\\*-ic-([\\s\\S]*)\\*\\/\\s*$/,4e:D(){},K:D(x){E x}};G 1H={1E:D(){E D(){C.1Q.3V(C,1b)}}};G 2W=18 V();V.O=D(a,b){1g(G c in b){a[c]=b[c]}E a};V.O(V,{2i:D(a){2z{if(a===1M)E\'1M\';if(a===1h)E\'1h\';E a.2i?a.2i():a.3v()}2H(e){if(e 4s ie)E\'...\';2p e;}},2X:D(a){G b=1m a;4N(b){1F\'1M\':1F\'D\':1F\'ig\':E;1F\'ih\':E a.3v()}if(a===1h)E\'1h\';if(a.2X)E a.2X();if(a.aK===1c)E;G c=[];1g(G d in a){G e=V.2X(a[d]);if(e!==1M)c.1f(d.2X()+\': \'+e)}E\'{\'+c.2j(\', \')+\'}\'},aL:D(a){G b=[];1g(G c in a)b.1f(c);E b},29:D(a){G b=[];1g(G c in a)b.1f(a[c]);E b},3W:D(a){E V.O({},a)}});dF.1d.1o=D(){G a=C,4t=$A(1b),3X=4t.8Q();E D(){E a.3V(3X,4t.2e($A(1b)))}};dF.1d.2P=D(b){G c=C,4t=$A(1b),b=4t.8Q();E D(a){E c.3V(b,[a||1p.4f].2e(4t))}};V.O(6y.1d,{6z:D(){E C.5g(2,16)},aM:D(){E C+1},8R:D(a){$R(0,C,19).1j(a);E C},5g:D(a,b){G c=C.3v(b||10);E\'0\'.8R(a-c.Y)+c},2X:D(){E ii(C)?C.3v():\'1h\'}});7v.1d.2X=D(){E\'"\'+C.ij()+\'-\'+(C.ik()+1).5g(2)+\'-\'+C.il().5g(2)+\'T\'+C.io().5g(2)+\':\'+C.ip().5g(2)+\':\'+C.iq().5g(2)+\'"\'};G dG={dH:D(){G a;1g(G i=0,Y=1b.Y;i<Y;i++){G b=1b[i];2z{a=b();1B}2H(e){}}E a}};G dI=1H.1E();dI.1d={1Q:D(a,b){C.3d=a;C.4u=b;C.8S=17;C.5I()},5I:D(){C.4g=8T(C.4O.1o(C),C.4u*2Q)},2I:D(){if(!C.4g)E;aN(C.4g);C.4g=1h},4O:D(){if(!C.8S){2z{C.8S=19;C.3d(C)}ir{C.8S=17}}}};V.O(2A,{aO:D(a){E a==1h?\'\':2A(a)},dJ:{\'\\b\':\'\\\\b\',\'\\t\':\'\\\\t\',\'\\n\':\'\\\\n\',\'\\f\':\'\\\\f\',\'\\r\':\'\\\\r\',\'\\\\\':\'\\\\\\\\\'}});V.O(2A.1d,{3w:D(a,b){G c=\'\',5h=C,1w;b=1b.8U.aP(b);1R(5h.Y>0){if(1w=5h.1w(a)){c+=5h.3x(0,1w.2q);c+=2A.aO(b(1w));5h=5h.3x(1w.2q+1w[0].Y)}1e{c+=5h,5h=\'\'}}E c},dK:D(b,c,d){c=C.3w.aP(c);d=d===1M?1:d;E C.3w(b,D(a){if(--d<0)E a[0];E c(a)})},dL:D(a,b){C.3w(a,b);E C},it:D(a,b){a=a||30;b=b===1M?\'...\':b;E C.Y>a?C.3x(0,a-b.Y)+b:C},5i:D(){E C.1I(/^\\s+/,\'\').1I(/\\s+$/,\'\')},8V:D(){E C.1I(/<\\/?[^>]+>/gi,\'\')},4v:D(){E C.1I(18 3e(1k.8P,\'dM\'),\'\')},dN:D(){G b=18 3e(1k.8P,\'dM\');G c=18 3e(1k.8P,\'im\');E(C.1w(b)||[]).1P(D(a){E(a.1w(c)||[\'\',\'\'])[1]})},4P:D(){E C.dN().1P(D(a){E 7w(a)})},7x:D(){G a=1b.8U;a.3Y.dO=C;E a.2O.2r},dP:D(){G c=1c.23(\'2O\');c.2r=C.8V();E c.2k[0]?(c.2k.Y>1?$A(c.2k).4w(\'\',D(a,b){E a+b.5j}):c.2k[0].5j):\'\'},8W:D(e){G f=C.5i().1w(/([^?#]*)(#.*)?$/);if(!f)E{};E f[1].4x(e||\'&\').4w({},D(a,b){if((b=b.4x(\'=\'))[0]){G c=dQ(b.8Q());G d=b.Y>1?b.2j(\'=\'):b[0];if(d!=1M)d=dQ(d);if(c in a){if(a[c].5k!=1V)a[c]=[a[c]];a[c].1f(d)}1e a[c]=d}E a})},3y:D(){E C.4x(\'\')},aM:D(){E C.3x(0,C.Y-1)+2A.dR(C.dS(C.Y-1)+1)},8R:D(a){G b=\'\';1g(G i=0;i<a;i++)b+=C;E b},6A:D(){G a=C.4x(\'-\'),7y=a.Y;if(7y==1)E a[0];G b=C.5J(0)==\'-\'?a[0].5J(0).2f()+a[0].6B(1):a[0];1g(G i=1;i<7y;i++)b+=a[i].5J(0).2f()+a[i].6B(1);E b},aQ:D(){E C.5J(0).2f()+C.6B(1).2s()},iu:D(){E C.3w(/::/,\'/\').3w(/([A-Z]+)([A-Z][a-z])/,\'#{1}3Z#{2}\').3w(/([a-z\\d])([A-Z])/,\'#{1}3Z#{2}\').3w(/-/,\'3Z\').2s()},dT:D(){E C.3w(/3Z/,\'-\')},2i:D(c){G d=C.3w(/[\\iv-\\iw\\\\]/,D(a){G b=2A.dJ[a[0]];E b?b:\'\\\\ix\'+a[0].dS().5g(2,16)});if(c)E\'"\'+d.1I(/"/g,\'\\\\"\')+\'"\';E"\'"+d.1I(/\'/g,\'\\\\\\\'\')+"\'"},2X:D(){E C.2i(19)},aR:D(a){E C.dK(a||1k.dE,\'#{1}\')},dU:D(){G a=C.1I(/\\\\./g,\'@\').1I(/"[^"\\\\\\n\\r]*"/g,\'\');E(/^[,:{}\\[\\]0-9.\\-+iy-u \\n\\r\\t]*$/).41(a)},8X:D(a){G b=C.aR();2z{if(!a||b.dU())E 7w(\'(\'+b+\')\')}2H(e){}2p 18 iz(\'iA iB dV 2J: \'+C.2i());},24:D(a){E C.2y(a)>-1},dW:D(a){E C.2y(a)===0},dX:D(a){G d=C.Y-a.Y;E d>=0&&C.dY(a)===d},7z:D(){E C==\'\'},dZ:D(){E/^\\s*$/.41(C)}});if(1k.1X.3U||1k.1X.4c){V.O(2A.1d,{7x:D(){E C.1I(/&/g,\'&e0;\').1I(/</g,\'&lt;\').1I(/>/g,\'&gt;\')},dP:D(){E C.1I(/&e0;/g,\'&\').1I(/&lt;/g,\'<\').1I(/&gt;/g,\'>\')}})}2A.1d.3w.aP=D(b){if(1m b==\'D\')E b;G c=18 2Y(b);E D(a){E c.3u(a)}};2A.1d.iC=2A.1d.8W;V.O(2A.1d.7x,{2O:1c.23(\'2O\'),3Y:1c.4Q(\'\')});5K(2A.1d.7x)2O.25(3Y);G 2Y=1H.1E();2Y.e1=/(^|.|\\r|\\n)(#\\{(.*?)\\})/;2Y.1d={1Q:D(a,b){C.7A=a.3v();C.8Y=b||2Y.e1},3u:D(c){E C.7A.3w(C.8Y,D(a){G b=a[1];if(b==\'\\\\\')E a[2];E b+2A.aO(c[a[3]])})}};G $1B={};G $3z=18 e2(\'"2p $3z" is iD, iE "E" iF\');G 3f={1j:D(b){G c=0;2z{C.3A(D(a){b(a,c++)})}2H(e){if(e!=$1B)2p e;}E C},e3:D(a,b){G c=-a,aS=[],6C=C.3y();1R((c+=a)<6C.Y)aS.1f(6C.3x(c,c+a));E aS.1P(b)},iG:D(c){G d=19;C.1j(D(a,b){d=d&&!!(c||1k.K)(a,b);if(!d)2p $1B;});E d},iH:D(c){G d=17;C.1j(D(a,b){if(d=!!(c||1k.K)(a,b))2p $1B;});E d},7B:D(c){G d=[];C.1j(D(a,b){d.1f((c||1k.K)(a,b))});E d},6D:D(c){G d;C.1j(D(a,b){if(c(a,b)){d=a;2p $1B;}});E d},8Z:D(c){G d=[];C.1j(D(a,b){if(c(a,b))d.1f(a)});E d},iI:D(d,e){G f=[];C.1j(D(a,b){G c=a.3v();if(c.1w(d))f.1f((e||1k.K)(a,b))});E f},24:D(b){G c=17;C.1j(D(a){if(a==b){c=19;2p $1B;}});E c},iJ:D(b,c){c=c===1M?1h:c;E C.e3(b,D(a){1R(a.Y<b)a.1f(c);E a})},4w:D(c,d){C.1j(D(a,b){c=d(c,a,b)});E c},7C:D(b){G c=$A(1b).3x(1);E C.1P(D(a){E a[b].3V(a,c)})},5L:D(c){G d;C.1j(D(a,b){a=(c||1k.K)(a,b);if(d==1M||a>=d)d=a});E d},7D:D(c){G d;C.1j(D(a,b){a=(c||1k.K)(a,b);if(d==1M||a<d)d=a});E d},iK:D(c){G d=[],aT=[];C.1j(D(a,b){((c||1k.K)(a,b)?d:aT).1f(a)});E[d,aT]},5M:D(c){G d=[];C.1j(D(a,b){d.1f(a[c])});E d},6E:D(c){G d=[];C.1j(D(a,b){if(!c(a,b))d.1f(a)});E d},aU:D(e){E C.1P(D(a,b){E{1l:a,7E:e(a,b)}}).iL(D(c,d){G a=c.7E,b=d.7E;E a<b?-1:a>b?1:0}).5M(\'1l\')},3y:D(){E C.1P()},iM:D(){G c=1k.K,4t=$A(1b);if(1m 4t.2u()==\'D\')c=4t.iN();G d=[C].2e(4t).1P($A);E C.1P(D(a,b){E c(d.5M(b))})},7F:D(){E C.3y().Y},2i:D(){E\'#<3f:\'+C.3y().2i()+\'>\'}};V.O(3f,{1P:3f.7B,e4:3f.6D,2B:3f.8Z,iO:3f.24,iP:3f.3y});G $A=1V.2Z=D(a){if(!a)E[];if(a.3y){E a.3y()}1e{G b=[];1g(G i=0,Y=a.Y;i<Y;i++)b.1f(a[i]);E b}};if(1k.1X.3U){$A=1V.2Z=D(a){if(!a)E[];if(!(1m a==\'D\'&&a==\'[3X iQ]\')&&a.3y){E a.3y()}1e{G b=[];1g(G i=0,Y=a.Y;i<Y;i++)b.1f(a[i]);E b}}}V.O(1V.1d,3f);if(!1V.1d.aV)1V.1d.aV=1V.1d.5N;V.O(1V.1d,{3A:D(a){1g(G i=0,Y=C.Y;i<Y;i++)a(C[i])},e5:D(){C.Y=0;E C},3B:D(){E C[0]},2u:D(){E C[C.Y-1]},iR:D(){E C.2B(D(a){E a!=1h})},4h:D(){E C.4w([],D(a,b){E a.2e(b&&b.5k==1V?b.4h():[b])})},aW:D(){G b=$A(1b);E C.2B(D(a){E!b.24(a)})},2y:D(a){1g(G i=0,Y=C.Y;i<Y;i++)if(C[i]==a)E i;E-1},5N:D(a){E(a!==17?C:C.3y()).aV()},iS:D(){E C.Y>1?C:C[0]},iT:D(d){E C.4w([],D(a,b,c){if(0==c||(d?a.2u()!=b:!a.24(b)))a.1f(b);E a})},3W:D(){E[].2e(C)},7F:D(){E C.Y},2i:D(){E\'[\'+C.1P(V.2i).2j(\', \')+\']\'},2X:D(){G c=[];C.1j(D(a){G b=V.2X(a);if(b!==1M)c.1f(b)});E\'[\'+c.2j(\', \')+\']\'}});1V.1d.3y=1V.1d.3W;D $w(a){a=a.5i();E a?a.4x(/\\s+/):[]}if(1k.1X.aH){1V.1d.2e=D(){G a=[];1g(G i=0,Y=C.Y;i<Y;i++)a.1f(C[i]);1g(G i=0,Y=1b.Y;i<Y;i++){if(1b[i].5k==1V){1g(G j=0,e6=1b[i].Y;j<e6;j++)a.1f(1b[i][j])}1e{a.1f(1b[i])}}E a}}G 2K=D(a){if(a 4s 2K)C.e7(a);1e V.O(C,a||{})};V.O(2K,{5O:D(d){G e=[];e.42=1b.8U.e8;C.1d.3A.90(d,D(b){if(!b.4i)E;G c=b.1l;if(c&&1m c==\'3X\'){if(c.5k==1V)c.1j(D(a){e.42(b.4i,a)});E}e.42(b.4i,c)});E e.2j(\'&\')},2X:D(c){G d=[];C.1d.3A.90(c,D(a){G b=V.2X(a.1l);if(b!==1M)d.1f(a.4i.2X()+\': \'+b)});E\'{\'+d.2j(\', \')+\'}\'}});2K.5O.e8=D(a,b,c){a=4R(a);if(b===1M)C.1f(a);1e C.1f(a+\'=\'+(b==1h?\'\':4R(b)))};V.O(2K.1d,3f);V.O(2K.1d,{3A:D(a){1g(G b in C){G c=C[b];if(c&&c==2K.1d[b])3z;G d=[b,c];d.4i=b;d.1l=c;a(d)}},aL:D(){E C.5M(\'4i\')},29:D(){E C.5M(\'1l\')},e7:D(c){E $H(c).4w(C,D(a,b){a[b.4i]=b.1l;E a})},3C:D(){G a;1g(G i=0,Y=1b.Y;i<Y;i++){G b=C[1b[i]];if(b!==1M){if(a===1M)a=b;1e{if(a.5k!=1V)a=[a];a.1f(b)}}91 C[1b[i]]}E a},5O:D(){E 2K.5O(C)},2i:D(){E\'#<2K:{\'+C.1P(D(a){E a.1P(V.2i).2j(\': \')}).2j(\', \')+\'}>\'},2X:D(){E 2K.2X(C)}});D $H(a){if(a 4s 2K)E a;E 18 2K(a)};if(D(){G i=0,aX=D(a){C.4i=a};aX.1d.4i=\'iU\';1g(G b in 18 aX(\'iV\'))i++;E i>1}())2K.1d.3A=D(a){G b=[];1g(G c in C){G d=C[c];if((d&&d==2K.1d[c])||b.24(c))3z;b.1f(c);G e=[c,d];e.4i=c;e.1l=d;a(e)}};92=1H.1E();V.O(92.1d,3f);V.O(92.1d,{1Q:D(a,b,c){C.1S=a;C.3g=b;C.e9=c},3A:D(a){G b=C.1S;1R(C.24(b)){a(b);b=b.aM()}},24:D(a){if(a<C.1S)E 17;if(C.e9)E a<C.3g;E a<=C.3g}});G $R=D(a,b,c){E 18 92(a,b,c)};G 1t={aY:D(){E dG.dH(D(){E 18 ea()},D(){E 18 eb(\'iW.ec\')},D(){E 18 eb(\'ed.ec\')})||17},aZ:0};1t.6F={7G:[],3A:D(a){C.7G.3A(a)},93:D(a){if(!C.24(a))C.7G.1f(a)},b0:D(a){C.7G=C.7G.aW(a)},94:D(b,c,d,f){C.1j(D(a){if(1m a[b]==\'D\'){2z{a[b].3V(a,[c,d,f])}2H(e){}}})}};V.O(1t.6F,3f);1t.6F.93({95:D(){1t.aZ++},2g:D(){1t.aZ--}});1t.2C=D(){};1t.2C.1d={5P:D(a){C.J={2R:\'7H\',5Q:19,ee:\'b1/x-iX-1U-iY\',b2:\'iZ-8\',3h:\'\'};V.O(C.J,a||{});C.J.2R=C.J.2R.2s();if(1m C.J.3h==\'2J\')C.J.3h=C.J.3h.8W()}};1t.4S=1H.1E();1t.4S.ef=[\'j0\',\'eg\',\'j1\',\'j2\',\'b3\'];1t.4S.1d=V.O(18 1t.2C(),{b4:17,1Q:D(a,b){C.2l=1t.aY();C.5P(b);C.96(a)},96:D(a){C.31=a;C.2R=C.J.2R;G b=V.3W(C.J.3h);if(![\'6G\',\'7H\'].24(C.2R)){b[\'j3\']=C.2R;C.2R=\'7H\'}C.3h=b;if(b=2K.5O(b)){if(C.2R==\'6G\')C.31+=(C.31.24(\'?\')?\'&\':\'?\')+b;1e if(/j4|j5|dD/.41(5f.6x))b+=\'&3Z=\'}2z{if(C.J.95)C.J.95(C.2l);1t.6F.94(\'95\',C,C.2l);C.2l.j6(C.2R.2f(),C.31,C.J.5Q);if(C.J.5Q)3D(D(){C.b5(1)}.1o(C),10);C.2l.eh=C.b6.1o(C);C.ei();C.26=C.2R==\'7H\'?(C.J.j7||b):1h;C.2l.j8(C.26);if(!C.J.5Q&&C.2l.ej)C.b6()}2H(e){C.7I(e)}},b6:D(){G a=C.2l.ek;if(a>1&&!((a==4)&&C.b4))C.b5(C.2l.ek)},ei:D(){G b={\'X-j9-ja\':\'ea\',\'X-1k-7p\':1k.7p,\'jb\':\'3Y/b7, 3Y/jc, b1/el, 3Y/el, */*\'};if(C.2R==\'7H\'){b[\'eo-1O\']=C.J.ee+(C.J.b2?\'; jd=\'+C.J.b2:\'\');if(C.2l.ej&&(5f.6x.1w(/7r\\/(\\d{4})/)||[0,ep])[1]<ep)b[\'je\']=\'jf\'}if(1m C.J.eq==\'3X\'){G c=C.J.eq;if(1m c.1f==\'D\')1g(G i=0,Y=c.Y;i<Y;i+=2)b[c[i]]=c[i+1];1e $H(c).1j(D(a){b[a.4i]=a.1l})}1g(G d in b)C.2l.jg(d,b[d])},4T:D(){E!C.2l.97||(C.2l.97>=er&&C.2l.97<jh)},b5:D(a){G b=1t.4S.ef[a];G c=C.2l,98=C.8X();if(b==\'b3\'){2z{C.b4=19;(C.J[\'5R\'+C.2l.97]||C.J[\'5R\'+(C.4T()?\'ji\':\'jj\')]||1k.4e)(c,98)}2H(e){C.7I(e)}G d=C.b8(\'eo-1O\');if(d&&d.5i().1w(/^(3Y|b1)\\/(x-)?(jk|jl)4r(;.*)?$/i))C.es()}2z{(C.J[\'5R\'+b]||1k.4e)(c,98);1t.6F.94(\'5R\'+b,C,c,98)}2H(e){C.7I(e)}if(b==\'b3\'){C.2l.eh=1k.4e}},b8:D(a){2z{E C.2l.jm(a)}2H(e){E 1h}},8X:D(){2z{G a=C.b8(\'X-dV\');E a?a.8X():1h}2H(e){E 1h}},es:D(){2z{E 7w((C.2l.5S||\'\').aR())}2H(e){C.7I(e)}},7I:D(a){(C.J.et||1k.4e)(C,a);1t.6F.94(\'et\',C,a)}});1t.99=1H.1E();V.O(V.O(1t.99.1d,1t.4S.1d),{1Q:D(c,d,e){C.5l={4T:(c.4T||c),7J:(c.7J||(c.4T?1h:c))};C.2l=1t.aY();C.5P(e);G f=C.J.2g||1k.4e;C.J.2g=(D(a,b){C.eu();f(a,b)}).1o(C);C.96(d)},eu:D(){G a=C.5l[C.4T()?\'4T\':\'7J\'];G b=C.2l.5S;if(!C.J.4P)b=b.4v();if(a=$(a)){if(C.J.ev)18 C.J.ev(a,b);1e a.1G(b)}if(C.4T()){if(C.2g)3D(C.2g.1o(C),10)}}});1t.ew=1H.1E();1t.ew.1d=V.O(18 1t.2C(),{1Q:D(a,b,c){C.5P(c);C.2g=C.J.2g;C.4u=(C.J.4u||2);C.5T=(C.J.5T||1);C.b9={};C.5l=a;C.31=b;C.1S()},1S:D(){C.J.2g=C.ey.1o(C);C.4O()},2I:D(){C.b9.J.2g=1M;9a(C.4g);(C.2g||1k.4e).3V(C,1b)},ey:D(a){if(C.J.5T){C.5T=(a.5S==C.ez?C.5T*C.J.5T:1);C.ez=a.5S}C.4g=3D(C.4O.1o(C),C.5T*C.4u*2Q)},4O:D(){C.b9=18 1t.99(C.5l,C.31,C.J)}});D $(a){if(1b.Y>1){1g(G i=0,7K=[],Y=1b.Y;i<Y;i++)7K.1f($(1b[i]));E 7K}if(1m a==\'2J\')a=1c.jn(a);E N.O(a)}if(1k.5H.aI){1c.ba=D(a,b){G c=[];G d=1c.3u(a,$(b)||1c,1h,jo.jp,1h);1g(G i=0,Y=d.jq;i<Y;i++)c.1f(d.jr(i));E c};1c.6H=D(a,b){G q=".//*[7L(2e(\' \', @7M, \' \'), \' "+a+" \')]";E 1c.ba(q,b)}}1e{1c.6H=D(a,b){G c=($(b)||1c.26).3E(\'*\');G d=[],1Y,8Y=18 3e("(^|\\\\s)"+a+"(\\\\s|$)");1g(G i=0,Y=c.Y;i<Y;i++){1Y=c[i];G e=1Y.2v;if(e.Y==0)3z;if(e==a||e.1w(8Y))d.1f(N.O(1Y))}E d}}if(!1p.N)G N={};N.O=D(a){G F=1k.5H;if(!a||!a.1N||a.3F==3||a.eA||F.aJ||a==1p)E a;G b={},1N=a.1N,7N=N.O.7N,T=N.1u.4U;if(!F.7s){V.O(b,N.1u),V.O(b,N.1u.9b)}if(T[1N])V.O(b,T[1N]);1g(G c in b){G d=b[c];if(1m d==\'D\'&&!(c in a))a[c]=7N.bb(d)}a.eA=1k.4e;E a};N.O.7N={bb:D(a){E C[a]=C[a]||D(){E a.3V(1h,[C].2e($A(1b)))}}};N.1u={9c:D(a){E $(a).12.3i!=\'43\'},bc:D(a){a=$(a);N[N.9c(a)?\'1Z\':\'2w\'](a);E a},1Z:D(a){$(a).12.3i=\'43\';E a},2w:D(a){$(a).12.3i=\'\';E a},3C:D(a){a=$(a);a.1A.7O(a);E a},1G:D(a,b){b=1m b==\'1M\'?\'\':b.3v();$(a).2r=b.4v();3D(D(){b.4P()},10);E a},1I:D(a,b){a=$(a);b=1m b==\'1M\'?\'\':b.3v();if(a.bd){a.bd=b.4v()}1e{G c=a.aK.eB();c.be(a);a.1A.jt(c.eC(b.4v()),a)}3D(D(){b.4P()},10);E a},2i:D(d){d=$(d);G e=\'<\'+d.1N.2s();$H({\'id\':\'id\',\'2v\':\'7M\'}).1j(D(a){G b=a.3B(),5U=a.2u();G c=(d[b]||\'\').3v();if(c)e+=\' \'+5U+\'=\'+c.2i(19)});E e+\'>\'},9d:D(a,b){a=$(a);G c=[];1R(a=a[b])if(a.3F==1)c.1f(N.O(a));E c},eD:D(a){E $(a).9d(\'1A\')},eE:D(a){E $A($(a).3E(\'*\')).1j(N.O)},eF:D(a){a=$(a).4y;1R(a&&a.3F!=1)a=a.5V;E $(a)},eG:D(a){if(!(a=$(a).4y))E[];1R(a&&a.3F!=1)a=a.5V;if(a)E[a].2e($(a).7P());E[]},bf:D(a){E $(a).9d(\'bg\')},7P:D(a){E $(a).9d(\'5V\')},ju:D(a){a=$(a);E a.bf().5N().2e(a.7P())},1w:D(a,b){if(1m b==\'2J\')b=18 1i(b);E b.1w($(a))},jv:D(a,b,c){a=$(a);if(1b.Y==1)E $(a.1A);G d=a.eD();E b?1i.5m(d,b,c):d[c||0]},32:D(a,b,c){a=$(a);if(1b.Y==1)E a.eF();G d=a.eE();E b?1i.5m(d,b,c):d[c||0]},jw:D(a,b,c){a=$(a);if(1b.Y==1)E $(1i.2m.7Q(a));G d=a.bf();E b?1i.5m(d,b,c):d[c||0]},jx:D(a,b,c){a=$(a);if(1b.Y==1)E $(1i.2m.7R(a));G d=a.7P();E b?1i.5m(d,b,c):d[c||0]},jy:D(){G a=$A(1b),M=$(a.8Q());E 1i.bh(M,a)},6H:D(a,b){E 1c.6H(b,a)},bi:D(a,b){a=$(a);if(1k.1X.4c){if(!a.eH)E 1h;G t=N.9e;if(t.29[b])E t.29[b](a,b);if(t.9f[b])b=t.9f[b];G c=a.eH[b];E c?c.5j:1h}E a.eI(b)},jz:D(a){E $(a).5W().1q},jA:D(a){E $(a).5W().1C},6I:D(a){E 18 N.9g(a)},bj:D(a,b){if(!(a=$(a)))E;G c=a.2v;if(c.Y==0)E 17;if(c==b||c.1w(18 3e("(^|\\\\s)"+b+"(\\\\s|$)")))E 19;E 17},4z:D(a,b){if(!(a=$(a)))E;N.6I(a).42(b);E a},5X:D(a,b){if(!(a=$(a)))E;N.6I(a).3C(b);E a},jB:D(a,b){if(!(a=$(a)))E;N.6I(a)[a.bj(b)?\'3C\':\'42\'](b);E a},21:D(){1a.21.3V(1a,1b);E $A(1b).3B()},2D:D(){1a.2D.3V(1a,1b);E $A(1b).3B()},6J:D(a){a=$(a);G b=a.4y;1R(b){G c=b.5V;if(b.3F==3&&!/\\S/.41(b.5j))a.7O(b);b=c}E a},7z:D(a){E $(a).2r.dZ()},9h:D(a,b){a=$(a),b=$(b);1R(a=a.1A)if(a==b)E 19;E 17},7S:D(a){a=$(a);G b=1x.3G(a);1p.7S(b[0],b[1]);E a},1v:D(a,b){a=$(a);b=b==\'bk\'?\'9i\':b.6A();G c=a.12[b];if(!c){G d=1c.jC.jD(a,1h);c=d?d[b]:1h}if(b==\'2d\')E c?3H(c):1.0;E c==\'9j\'?1h:c},7T:D(a){E $(a).1v(\'2d\')},1J:D(a,b,c){a=$(a);G d=a.12;1g(G e in b)if(e==\'2d\')a.6K(b[e]);1e d[(e==\'bk\'||e==\'9i\')?(d.bl===1M?\'9i\':\'bl\'):(c?e:e.6A())]=b[e];E a},6K:D(a,b){a=$(a);a.12.2d=(b==1||b===\'\')?\'\':(b<0.bm)?0:b;E a},5W:D(a){a=$(a);G b=$(a).1v(\'3i\');if(b!=\'43\'&&b!=1h)E{1C:a.3I,1q:a.3j};G c=a.12;G d=c.5Y;G e=c.1D;G f=c.3i;c.5Y=\'5n\';c.1D=\'3k\';c.3i=\'jE\';G g=a.7U;G h=a.4V;c.3i=f;c.1D=e;c.5Y=d;E{1C:g,1q:h}},3J:D(a){a=$(a);G b=N.1v(a,\'1D\');if(b==\'bn\'||!b){a.bo=19;a.12.1D=\'6L\';if(1p.4d){a.12.1r=0;a.12.1s=0}}E a},4A:D(a){a=$(a);if(a.bo){a.bo=1M;a.12.1D=a.12.1r=a.12.1s=a.12.3K=a.12.5Z=\'\'}E a},4B:D(a){a=$(a);if(a.6M)E a;a.6M=a.12.9k||\'9j\';if((N.1v(a,\'9k\')||\'9c\')!=\'5n\')a.12.9k=\'5n\';E a},4C:D(a){a=$(a);if(!a.6M)E a;a.12.9k=a.6M==\'9j\'?\'\':a.6M;a.6M=1h;E a}};V.O(N.1u,{eJ:N.1u.9h,jF:N.1u.eG});if(1k.1X.aH){N.1u.bp=N.1u.1v;N.1u.1v=D(a,b){4N(b){1F\'1s\':1F\'1r\':1F\'5Z\':1F\'3K\':if(N.bp(a,\'1D\')==\'bn\')E 1h;60:E N.bp(a,b)}}}1e if(1k.1X.4c){N.1u.1v=D(a,b){a=$(a);b=(b==\'bk\'||b==\'9i\')?\'bl\':b.6A();G c=a.12[b];if(!c&&a.9l)c=a.9l[b];if(b==\'2d\'){if(c=(a.1v(\'7V\')||\'\').1w(/9m\\(2d=(.*)\\)/))if(c[1])E 3H(c[1])/3L;E 1.0}if(c==\'9j\'){if((b==\'1C\'||b==\'1q\')&&(a.1v(\'3i\')!=\'43\'))E a[\'2E\'+b.aQ()]+\'1K\';E 1h}E c};N.1u.6K=D(a,b){a=$(a);G c=a.1v(\'7V\'),12=a.12;if(b==1||b===\'\'){12.7V=c.1I(/9m\\([^\\)]*\\)/gi,\'\');E a}1e if(b<0.bm)b=0;12.7V=c.1I(/9m\\([^\\)]*\\)/gi,\'\')+\'9m(2d=\'+(b*3L)+\')\';E a};N.1u.1G=D(b,c){b=$(b);c=1m c==\'1M\'?\'\':c.3v();G d=b.1N.2f();if([\'7W\',\'6N\',\'6O\',\'7X\'].24(d)){G e=1c.23(\'2O\');4N(d){1F\'7W\':1F\'6N\':e.2r=\'<2L><5o>\'+c.4v()+\'</5o></2L>\';9n=2;1B;1F\'6O\':e.2r=\'<2L><5o><9o>\'+c.4v()+\'</9o></5o></2L>\';9n=3;1B;1F\'7X\':e.2r=\'<2L><5o><9o><eK>\'+c.4v()+\'</eK></9o></5o></2L>\';9n=4}$A(b.2k).1j(D(a){b.7O(a)});9n.8R(D(){e=e.4y});$A(e.2k).1j(D(a){b.25(a)})}1e{b.2r=c.4v()}3D(D(){c.4P()},10);E b}}1e if(1k.1X.7r){N.1u.6K=D(a,b){a=$(a);a.12.2d=(b==1)?0.jG:(b===\'\')?\'\':(b<0.bm)?0:b;E a}}N.9e={9f:{jH:"jI",jJ:"jK",jL:"jM",jN:"jO",jP:"jQ",jR:"jS",jT:"jU",jV:"jW",eL:"jX",jY:"jZ"},29:{9p:D(a,b){E a.eI(b,2)},7Y:D(a,b){E $(a).4W(b)?b:1h},12:D(a){E a.12.eM.2s()},bq:D(a){G b=a.eN(\'bq\');E b.bs?b.5j:1h}}};(D(){V.O(C,{bt:C.9p,4X:C.9p,1O:C.9p,2x:C.7Y,61:C.7Y,eL:C.7Y,eO:C.7Y})}).90(N.9e.29);N.1u.9b={4W:D(a,b){G t=N.9e,14;b=t.9f[b]||b;14=$(a).eN(b);E 14&&14.bs}};N.1u.4U={};V.O(N,N.1u);if(!1k.5H.7s&&1c.23(\'2O\').7u){1p.7t={};1p.7t.1d=1c.23(\'2O\').7u;1k.5H.7s=19}N.4W=D(a,b){if(a.4W)E a.4W(b);E N.1u.9b.4W(a,b)};N.bu=D(g){G F=1k.5H,T=N.1u.4U;if(!g){V.O(1y,1y.1u);V.O(1y.N,1y.N.1u);V.O(N.1u.4U,{"eP":V.3W(1y.1u),"bv":V.3W(1y.N.1u),"bw":V.3W(1y.N.1u),"9q":V.3W(1y.N.1u)})}if(1b.Y==2){G h=g;g=1b[1]}if(!h)V.O(N.1u,g||{});1e{if(h.5k==1V)h.1j(O);1e O(h)}D O(a){a=a.2f();if(!N.1u.4U[a])N.1u.4U[a]={};V.O(N.1u.4U[a],g)}D 9r(a,b,c){c=c||17;G d=N.O.7N;1g(G e in a){G f=a[e];if(!c||!(e in b))b[e]=d.bb(f)}}D eQ(a){G b;G c={"bx":"k0","9q":"k1","P":"k2","eR":"k3","eS":"k4","eT":"k5","eU":"k6","eV":"k7","eW":"6P","eX":"6P","eY":"6P","eZ":"6P","f0":"6P","f1":"6P","Q":"k8","f2":"f3","f4":"f3","A":"k9","f5":"ka","by":"kb","bz":"f6","bA":"f6","7W":"bB","bC":"bB","6N":"bB","6O":"kc","bD":"f7","7X":"f7","f8":"kd","f9":"ke"};if(c[a])b=\'9s\'+c[a]+\'N\';if(1p[b])E 1p[b];b=\'9s\'+a+\'N\';if(1p[b])E 1p[b];b=\'9s\'+a.aQ()+\'N\';if(1p[b])E 1p[b];1p[b]={};1p[b].1d=1c.23(a).7u;E 1p[b]}if(F.7s){9r(N.1u,7t.1d);9r(N.1u.9b,7t.1d,19)}if(F.aJ){1g(G i in N.1u.4U){G j=eQ(i);if(1m j=="1M")3z;9r(T[i],j.1d)}}V.O(N,N.1u);91 N.4U};G kf={3i:N.bc};2W.2M=D(a){C.bE=a};2W.2M.1d={1Q:D(a,b){C.M=$(a);C.7Z=b.4v();if(C.bE&&C.M.fa){2z{C.M.fa(C.bE,C.7Z)}2H(e){G c=C.M.1N.2f();if([\'6N\',\'6O\'].24(c)){C.6Q(C.fb())}1e{2p e;}}}1e{C.28=C.M.aK.eB();if(C.6R)C.6R();C.6Q([C.28.eC(C.7Z)])}3D(D(){b.4P()},10)},fb:D(){G a=1c.23(\'2O\');a.2r=\'<2L><5o>\'+C.7Z+\'</5o></2L>\';E $A(a.2k[0].2k[0].2k)}};G 2M=18 V();2M.fc=1H.1E();2M.fc.1d=V.O(18 2W.2M(\'kg\'),{6R:D(){C.28.kh(C.M)},6Q:D(b){b.1j((D(a){C.M.1A.4Y(a,C.M)}).1o(C))}});2M.fd=1H.1E();2M.fd.1d=V.O(18 2W.2M(\'ki\'),{6R:D(){C.28.be(C.M);C.28.fe(19)},6Q:D(b){b.5N(17).1j((D(a){C.M.4Y(a,C.M.4y)}).1o(C))}});2M.bF=1H.1E();2M.bF.1d=V.O(18 2W.2M(\'kj\'),{6R:D(){C.28.be(C.M);C.28.fe(C.M)},6Q:D(b){b.1j((D(a){C.M.25(a)}).1o(C))}});2M.bG=1H.1E();2M.bG.1d=V.O(18 2W.2M(\'kk\'),{6R:D(){C.28.kl(C.M)},6Q:D(b){b.1j((D(a){C.M.1A.4Y(a,C.M.5V)}).1o(C))}});N.9g=1H.1E();N.9g.1d={1Q:D(a){C.M=$(a)},3A:D(b){C.M.2v.4x(/\\s+/).2B(D(a){E a.Y>0}).3A(b)},bH:D(a){C.M.2v=a},42:D(a){if(C.24(a))E;C.bH($A(C).2e(a).2j(\' \'))},3C:D(a){if(!C.24(a))E;C.bH($A(C).aW(a).2j(\' \'))},3v:D(){E $A(C).2j(\' \')}};V.O(N.9g.1d,3f);G 1i=1H.1E();1i.1d={1Q:D(a){C.5p=a.5i();C.ff()},ff:D(){if(1k.5H.aI&&!(/\\[[\\w-]*?:/).41(C.5p))E C.fg();G e=C.5p,6S=1i.9t,h=1i.2m,c=1i.7E,le,p,m;if(1i.62[e]){C.4j=1i.62[e];E}C.4j=["C.4j = D(fh) {","G r = fh, h = 1i.2m, c = 17, n;"];1R(e&&le!=e&&(/\\S/).41(e)){le=e;1g(G i in 6S){p=6S[i];if(m=e.1w(p)){C.4j.1f(1m c[i]==\'D\'?c[i](m):18 2Y(c[i]).3u(m));e=e.1I(m[0],\'\');1B}}}C.4j.1f("E h.bI(n);\\n}");7w(C.4j.2j(\'\\n\'));1i.62[C.5p]=C.4j},fg:D(){G e=C.5p,6S=1i.9t,x=1i.2F,le,m;if(1i.62[e]){C.2F=1i.62[e];E}C.4j=[\'.//*\'];1R(e&&le!=e&&(/\\S/).41(e)){le=e;1g(G i in 6S){if(m=e.1w(6S[i])){C.4j.1f(1m x[i]==\'D\'?x[i](m):18 2Y(x[i]).3u(m));e=e.1I(m[0],\'\');1B}}}C.2F=C.4j.2j(\'\');1i.62[C.5p]=C.2F},4k:D(a){a=a||1c;if(C.2F)E 1c.ba(C.2F,a);E C.4j(a)},1w:D(a){E C.4k(1c).24(a)},3v:D(){E C.5p},2i:D(){E"#<1i:"+C.5p.2i()+">"}};V.O(1i,{62:{},2F:{5q:"//*",1Y:"/*",6T:"/80-5r::*[1]",81:\'/80-5r::*\',1N:D(m){if(m[1]==\'*\')E\'\';E"[fi-3a()=\'"+m[1].2s()+"\' bJ fi-3a()=\'"+m[1].2f()+"\']"},2v:"[7L(2e(\' \', @7M, \' \'), \' #{1} \')]",id:"[@id=\'#{1}\']",82:"[@#{1}]",4Z:D(m){m[3]=m[5]||m[6];E 18 2Y(1i.2F.9u[m[2]]).3u(m)},83:D(m){G h=1i.2F.2t[m[1]];if(!h)E\'\';if(1m h===\'D\')E h(m);E 18 2Y(1i.2F.2t[m[1]]).3u(m)},9u:{\'=\':"[@#{1}=\'#{3}\']",\'!=\':"[@#{1}!=\'#{3}\']",\'^=\':"[km-5K(@#{1}, \'#{3}\')]",\'$=\':"[6B(@#{1}, (2J-Y(@#{1}) - 2J-Y(\'#{3}\') + 1))=\'#{3}\']",\'*=\':"[7L(@#{1}, \'#{3}\')]",\'~=\':"[7L(2e(\' \', @#{1}, \' \'), \' #{3} \')]",\'|=\':"[7L(2e(\'-\', @#{1}, \'-\'), \'-#{3}-\')]"},2t:{\'3B-1Y\':\'[51(bK-5r::*)]\',\'2u-1Y\':\'[51(80-5r::*)]\',\'44-1Y\':\'[51(bK-5r::* bJ 80-5r::*)]\',\'7z\':"[9v(*) = 0 bL (9v(3Y()) = 0 bJ kn(3Y(), \' \\t\\r\\n\', \'\') = \'\')]",\'61\':"[@61]",\'2x\':"[@2x]",\'fj\':"[51(@2x)]",\'51\':D(m){G e=m[6],p=1i.9t,x=1i.2F,le,m,v;G a=[];1R(e&&le!=e&&(/\\S/).41(e)){le=e;1g(G i in p){if(m=e.1w(p[i])){v=1m x[i]==\'D\'?x[i](m):18 2Y(x[i]).3u(m);a.1f("("+v.6B(1,v.Y-1)+")");e=e.1I(m[0],\'\');1B}}}E"[51("+a.2j(" bL ")+")]"},\'2a-1Y\':D(m){E 1i.2F.2t.2a("(9v(./bK-5r::*) + 1) ",m)},\'2a-2u-1Y\':D(m){E 1i.2F.2t.2a("(9v(./80-5r::*) + 1) ",m)},\'2a-2N-1O\':D(m){E 1i.2F.2t.2a("1D() ",m)},\'2a-2u-2N-1O\':D(m){E 1i.2F.2t.2a("(2u() + 1 - 1D()) ",m)},\'3B-2N-1O\':D(m){m[6]="1";E 1i.2F.2t[\'2a-2N-1O\'](m)},\'2u-2N-1O\':D(m){m[6]="1";E 1i.2F.2t[\'2a-2u-2N-1O\'](m)},\'44-2N-1O\':D(m){G p=1i.2F.2t;E p[\'3B-2N-1O\'](m)+p[\'2u-2N-1O\'](m)},2a:D(c,m){G d,63=m[6],bM;if(63==\'fk\')63=\'2n+0\';if(63==\'fl\')63=\'2n+1\';if(d=63.1w(/^(\\d+)$/))E\'[\'+c+"= "+d[1]+\']\';if(d=63.1w(/^(-?\\d*)?n(([+-])(\\d+))?/)){if(d[1]=="-")d[1]=-1;G a=d[1]?6y(d[1]):1;G b=d[2]?6y(d[2]):0;bM="[((#{bN} - #{b}) ko #{a} = 0) bL "+"((#{bN} - #{b}) 2O #{a} >= 0)]";E 18 2Y(bM).3u({bN:c,a:a,b:b})}}}},7E:{1N:\'n = h.1N(n, r, "#{1}", c);   c = 17;\',2v:\'n = h.2v(n, r, "#{1}", c); c = 17;\',id:\'n = h.id(n, r, "#{1}", c);        c = 17;\',82:\'n = h.82(n, r, "#{1}"); c = 17;\',4Z:D(m){m[3]=(m[5]||m[6]);E 18 2Y(\'n = h.4Z(n, r, "#{1}", "#{3}", "#{2}"); c = 17;\').3u(m)},83:D(m){if(m[6])m[6]=m[6].1I(/"/g,\'\\\\"\');E 18 2Y(\'n = h.83(n, "#{1}", "#{6}", r, c); c = 17;\').3u(m)},5q:\'c = "5q";\',1Y:\'c = "1Y";\',6T:\'c = "6T";\',81:\'c = "81";\'},9t:{81:18 3e(\'^\\\\s\'+\'*\'+\'~\\\\s*\'),1Y:18 3e(\'^\\\\s\'+\'*\'+\'>\\\\s*\'),6T:18 3e(\'^\\\\s\'+\'*\'+\'\\\\+\\\\s*\'),5q:/^\\s/,1N:18 3e(\'^\\\\s*\'+\'(\\\\\'+\'*|[\\\\w\\\\-]+)(\\\\b|$)?\'),id:18 3e(\'^#([\\\\w\\\\-\\\\\'+\'*]+)(\\\\b|$)\'),2v:18 3e(\'^\\\\.([\\\\w\\\\-\\\\\'+\'*]+)(\\\\b|$)\'),83:18 3e(\'^:((3B|2u|2a|2a-2u|44)(-1Y|-2N-1O)|7z|61|(en|kp)kq|51)(\\\\((.*?)\\\\))?(\\\\b|$|\\\\s|(?=:))\'),82:18 3e(\'^\\\\[([\\\\w]+)\\\\]\'),4Z:18 3e(\'\\\\[((?:[\\\\w-]*:)?[\\\\w-]+)\\\\s*(?:([!^$*~|]?=)\\\\s*(([\\\'"])([^\\\\]]*?)\\\\4|([^\\\'"][^\\\\]]*?)))?\\\\]\')},2m:{2e:D(a,b){1g(G i=0,14;14=b[i];i++)a.1f(14);E a},64:D(a){1g(G i=0,14;14=a[i];i++)14.4D=19;E a},5s:D(a){1g(G i=0,14;14=a[i];i++)14.4D=1M;E a},2q:D(a,b,c){a.4D=19;if(b){1g(G d=a.2k,i=d.Y-1,j=1;i>=0;i--){14=d[i];if(14.3F==1&&(!c||14.4D))14.9w=j++}}1e{1g(G i=0,j=1,d=a.2k;14=d[i];i++)if(14.3F==1&&(!c||14.4D))14.9w=j++}},bI:D(a){if(a.Y==0)E a;G b=[],n;1g(G i=0,l=a.Y;i<l;i++)if(!(n=a[i]).4D){n.4D=19;b.1f(N.O(n))}E 1i.2m.5s(b)},5q:D(a){G h=1i.2m;1g(G i=0,1n=[],14;14=a[i];i++)h.2e(1n,14.3E(\'*\'));E 1n},1Y:D(a){G h=1i.2m;1g(G i=0,1n=[],14;14=a[i];i++){1g(G j=0,65=[],1Y;1Y=14.2k[j];j++)if(1Y.3F==1&&1Y.1N!=\'!\')1n.1f(1Y)}E 1n},6T:D(a){1g(G i=0,1n=[],14;14=a[i];i++){G b=C.7R(14);if(b)1n.1f(b)}E 1n},81:D(a){G h=1i.2m;1g(G i=0,1n=[],14;14=a[i];i++)h.2e(1n,N.7P(14));E 1n},7R:D(a){1R(a=a.5V)if(a.3F==1)E a;E 1h},7Q:D(a){1R(a=a.bg)if(a.3F==1)E a;E 1h},1N:D(a,b,c,d){c=c.2f();G e=[],h=1i.2m;if(a){if(d){if(d=="5q"){1g(G i=0,14;14=a[i];i++)h.2e(e,14.3E(c));E e}1e a=C[d](a);if(c=="*")E a}1g(G i=0,14;14=a[i];i++)if(14.1N.2f()==c)e.1f(14);E e}1e E b.3E(c)},id:D(a,b,c,d){G e=$(c),h=1i.2m;if(!a&&b==1c)E e?[e]:[];if(a){if(d){if(d==\'1Y\'){1g(G i=0,14;14=a[i];i++)if(e.1A==14)E[e]}1e if(d==\'5q\'){1g(G i=0,14;14=a[i];i++)if(N.9h(e,14))E[e]}1e if(d==\'6T\'){1g(G i=0,14;14=a[i];i++)if(1i.2m.7Q(e)==14)E[e]}1e a=h[d](a)}1g(G i=0,14;14=a[i];i++)if(14==e)E[e];E[]}E(e&&N.9h(e,b))?[e]:[]},2v:D(a,b,c,d){if(a&&d)a=C[d](a);E 1i.2m.fm(a,b,c)},fm:D(a,b,c){if(!a)a=1i.2m.5q([b]);G d=\' \'+c+\' \';1g(G i=0,1n=[],14,84;14=a[i];i++){84=14.2v;if(84.Y==0)3z;if(84==c||(\' \'+84+\' \').24(d))1n.1f(14)}E 1n},82:D(a,b,c){G d=[];1g(G i=0,14;14=a[i];i++)if(N.4W(14,c))d.1f(14);E d},4Z:D(a,b,c,d,e){if(!a)a=b.3E("*");G f=1i.9u[e],1n=[];1g(G i=0,14;14=a[i];i++){G g=N.bi(14,c);if(g===1h)3z;if(f(g,d))1n.1f(14)}E 1n},83:D(a,b,c,d,e){if(a&&e)a=C[e](a);if(!a)a=d.3E("*");E 1i.2t[b](a,c,d)}},2t:{\'3B-1Y\':D(a,b,c){1g(G i=0,1n=[],14;14=a[i];i++){if(1i.2m.7Q(14))3z;1n.1f(14)}E 1n},\'2u-1Y\':D(a,b,c){1g(G i=0,1n=[],14;14=a[i];i++){if(1i.2m.7R(14))3z;1n.1f(14)}E 1n},\'44-1Y\':D(a,b,c){G h=1i.2m;1g(G i=0,1n=[],14;14=a[i];i++)if(!h.7Q(14)&&!h.7R(14))1n.1f(14);E 1n},\'2a-1Y\':D(a,b,c){E 1i.2t.2a(a,b,c)},\'2a-2u-1Y\':D(a,b,c){E 1i.2t.2a(a,b,c,19)},\'2a-2N-1O\':D(a,b,c){E 1i.2t.2a(a,b,c,17,19)},\'2a-2u-2N-1O\':D(a,b,c){E 1i.2t.2a(a,b,c,19,19)},\'3B-2N-1O\':D(a,b,c){E 1i.2t.2a(a,"1",c,17,19)},\'2u-2N-1O\':D(a,b,c){E 1i.2t.2a(a,"1",c,19,19)},\'44-2N-1O\':D(a,b,c){G p=1i.2t;E p[\'2u-2N-1O\'](p[\'3B-2N-1O\'](a,b,c),b,c)},fn:D(a,b,d){if(a==0)E b>0?[b]:[];E $R(1,d).4w([],D(c,i){if(0==(i-b)%a&&(i-b)/a>=0)c.1f(i);E c})},2a:D(c,d,e,f,g){if(c.Y==0)E[];if(d==\'fk\')d=\'2n+0\';if(d==\'fl\')d=\'2n+1\';G h=1i.2m,1n=[],bO=[],m;h.64(c);1g(G i=0,14;14=c[i];i++){if(!14.1A.4D){h.2q(14.1A,f,g);bO.1f(14.1A)}}if(d.1w(/^\\d+$/)){d=6y(d);1g(G i=0,14;14=c[i];i++)if(14.9w==d)1n.1f(14)}1e if(m=d.1w(/^(-?\\d*)?n(([+-])(\\d+))?/)){if(m[1]=="-")m[1]=-1;G a=m[1]?6y(m[1]):1;G b=m[2]?6y(m[2]):0;G k=1i.2t.fn(a,b,c.Y);1g(G i=0,14,l=k.Y;14=c[i];i++){1g(G j=0;j<l;j++)if(14.9w==k[j])1n.1f(14)}}h.5s(c);h.5s(bO);E 1n},\'7z\':D(a,b,c){1g(G i=0,1n=[],14;14=a[i];i++){if(14.1N==\'!\'||(14.4y&&!14.2r.1w(/^\\s*$/)))3z;1n.1f(14)}E 1n},\'51\':D(a,b,c){G h=1i.2m,kr,m;G d=18 1i(b).4k(c);h.64(d);1g(G i=0,1n=[],14;14=a[i];i++)if(!14.4D)1n.1f(14);h.5s(d);E 1n},\'fj\':D(a,b,c){1g(G i=0,1n=[],14;14=a[i];i++)if(!14.2x)1n.1f(14);E 1n},\'2x\':D(a,b,c){1g(G i=0,1n=[],14;14=a[i];i++)if(14.2x)1n.1f(14);E 1n},\'61\':D(a,b,c){1g(G i=0,1n=[],14;14=a[i];i++)if(14.61)1n.1f(14);E 1n}},9u:{\'=\':D(a,v){E a==v},\'!=\':D(a,v){E a!=v},\'^=\':D(a,v){E a.dW(v)},\'$=\':D(a,v){E a.dX(v)},\'*=\':D(a,v){E a.24(v)},\'~=\':D(a,v){E(\' \'+a+\' \').24(\' \'+v+\' \')},\'|=\':D(a,v){E(\'-\'+a.2f()+\'-\').24(\'-\'+v.2f()+\'-\')}},fo:D(a,b){G c=18 1i(b).4k(),h=1i.2m;h.64(c);1g(G i=0,1n=[],M;M=a[i];i++)if(M.4D)1n.1f(M);h.5s(c);E 1n},5m:D(a,b,c){if(1m b==\'bP\'){c=b;b=17}E 1i.fo(a,b||\'*\')[c||0]},bh:D(a,b){G c=b.2j(\',\'),b=[];c.dL(/(([\\w#:.~>+()\\s-]+|\\*|\\[.*?\\])+)\\s*(,|$)/,D(m){b.1f(m[1].5i())});G d=[],h=1i.2m;1g(G i=0,l=b.Y,67;i<l;i++){67=18 1i(b[i].5i());h.2e(d,67.4k(a))}E(l>1)?h.bI(d):d}});D $$(){E 1i.bh(1c,$A(1b))}G 1y={85:D(a){$(a).85();E a},fp:D(d,e){G f=d.4w({},D(a,b){if(!b.2x&&b.3a){G c=b.3a,1l=$(b).3l();if(1l!=1h){if(c in a){if(a[c].5k!=1V)a[c]=[a[c]];a[c].1f(1l)}1e a[c]=1l}}E a});E e?f:2K.5O(f)}};1y.1u={4E:D(a,b){E 1y.fp(1y.6U(a),b)},6U:D(c){E $A($(c).3E(\'*\')).4w([],D(a,b){if(1y.N.86[b.1N.2s()])a.1f(N.O(b));E a})},ks:D(a,b,c){a=$(a);G d=a.3E(\'68\');if(!b&&!c)E $A(d).1P(N.O);1g(G i=0,bQ=[],Y=d.Y;i<Y;i++){G e=d[i];if((b&&e.1O!=b)||(c&&e.3a!=c))3z;bQ.1f(N.O(e))}E bQ},9x:D(a){a=$(a);1y.6U(a).7C(\'9x\');E a},9y:D(a){a=$(a);1y.6U(a).7C(\'9y\');E a},fq:D(b){E $(b).6U().e4(D(a){E a.1O!=\'5n\'&&!a.2x&&[\'68\',\'2B\',\'69\'].24(a.1N.2s())})},kt:D(a){a=$(a);a.fq().5t();E a},96:D(a,b){a=$(a),b=V.3W(b||{});G c=b.3h;b.3h=a.4E(19);if(c){if(1m c==\'2J\')c=c.8W();V.O(b.3h,c)}if(a.4W(\'2R\')&&!b.2R)b.2R=a.2R;E 18 1t.4S(a.bi(\'ku\'),b)}};1y.N={6V:D(a){$(a).6V();E a},2B:D(a){$(a).2B();E a}};1y.N.1u={4E:D(a){a=$(a);if(!a.2x&&a.3a){G b=a.3l();if(b!=1M){G c={};c[a.3a]=b;E 2K.5O(c)}}E\'\'},3l:D(a){a=$(a);G b=a.1N.2s();E 1y.N.86[b](a)},e5:D(a){$(a).1l=\'\';E a},kv:D(a){E $(a).1l!=\'\'},5t:D(a){a=$(a);2z{a.6V();if(a.2B&&(a.1N.2s()!=\'68\'||![\'bR\',\'85\',\'bS\'].24(a.1O)))a.2B()}2H(e){}E a},9x:D(a){a=$(a);a.fr();a.2x=19;E a},9y:D(a){a=$(a);a.2x=17;E a}};G 87=1y.N;G $F=1y.N.1u.3l;1y.N.86={68:D(a){4N(a.1O.2s()){1F\'fs\':1F\'ft\':E 1y.N.86.fu(a);60:E 1y.N.86.69(a)}},fu:D(a){E a.61?a.1l:1h},69:D(a){E a.1l},2B:D(a){E C[a.1O==\'2B-kw\'?\'fv\':\'fw\'](a)},fv:D(a){G b=a.kx;E b>=0?C.bT(a.J[b]):1h},fw:D(a){G b,Y=a.Y;if(!Y)E 1h;1g(G i=0,b=[];i<Y;i++){G c=a.J[i];if(c.6a)b.1f(C.bT(c))}E b},bT:D(a){E N.O(a).4W(\'1l\')?a.1l:a.3Y}};2W.9z=D(){};2W.9z.1d={1Q:D(a,b,c){C.4u=b;C.M=$(a);C.3d=c;C.3m=C.3l();C.5I()},5I:D(){8T(C.4O.1o(C),C.4u*2Q)},4O:D(){G a=C.3l();G b=(\'2J\'==1m C.3m&&\'2J\'==1m a?C.3m!=a:2A(C.3m)!=2A(a));if(b){C.3d(C.M,a);C.3m=a}}};1y.N.9A=1H.1E();1y.N.9A.1d=V.O(18 2W.9z(),{3l:D(){E 1y.N.3l(C.M)}});1y.9A=1H.1E();1y.9A.1d=V.O(18 2W.9z(),{3l:D(){E 1y.4E(C.M)}});2W.5u=D(){};2W.5u.1d={1Q:D(a,b){C.M=$(a);C.3d=b;C.3m=C.3l();if(C.M.1N.2s()==\'1U\')C.fx();1e C.5I(C.M)},bU:D(){G a=C.3l();if(C.3m!=a){C.3d(C.M,a);C.3m=a}},fx:D(){1y.6U(C.M).1j(C.5I.1o(C))},5I:D(a){if(a.1O){4N(a.1O.2s()){1F\'fs\':1F\'ft\':1a.21(a,\'6W\',C.bU.1o(C));1B;60:1a.21(a,\'88\',C.bU.1o(C));1B}}}};1y.N.5u=1H.1E();1y.N.5u.1d=V.O(18 2W.5u(),{3l:D(){E 1y.N.3l(C.M)}});1y.5u=1H.1E();1y.5u.1d=V.O(18 2W.5u(),{3l:D(){E 1y.4E(C.M)}});if(!1p.1a){G 1a=18 V()}V.O(1a,{ky:8,bV:9,bW:13,bX:27,fy:37,fz:38,fA:39,fB:40,kz:46,kA:36,kB:35,kC:33,kD:34,M:D(a){E $(a.kE||a.kF)},bY:D(a){E(((a.fC)&&(a.fC==1))||((a.bR)&&(a.bR==1)))},6b:D(a){E a.kG||(a.kH+(1c.3n.45||1c.26.45))},6c:D(a){E a.kI||(a.kJ+(1c.3n.3M||1c.26.3M))},2I:D(a){if(a.fD){a.fD();a.kK()}1e{a.kL=17;a.kM=19}},5m:D(a,b){G c=1a.M(a);1R(c.1A&&(!c.1N||(c.1N.2f()!=b.2f())))c=c.1A;E c},2S:17,fE:D(a,b,c,d){if(!C.2S)C.2S=[];if(a.fF){C.2S.1f([a,b,c,d]);a.fF(b,c,d)}1e if(a.7q){C.2S.1f([a,b,c,d]);a.7q(\'5R\'+b,c)}},fG:D(){if(!1a.2S)E;1g(G i=0,Y=1a.2S.Y;i<Y;i++){1a.2D.3V(C,1a.2S[i]);1a.2S[i][0]=1h}1a.2S=17},21:D(a,b,c,d){a=$(a);d=d||17;if(b==\'89\'&&(1k.1X.3U||a.7q))b=\'fH\';1a.fE(a,b,c,d)},2D:D(a,b,c,d){a=$(a);d=d||17;if(b==\'89\'&&(1k.1X.3U||a.7q))b=\'fH\';if(a.fI){a.fI(b,c,d)}1e if(a.fJ){2z{a.fJ(\'5R\'+b,c)}2H(e){}}}});if(1k.1X.4c)1a.21(1p,\'kN\',1a.fG,17);G 1x={fK:17,52:D(){C.8a=1p.kO||1c.3n.45||1c.26.45||0;C.8b=1p.kP||1c.3n.3M||1c.26.3M||0},bZ:D(a){G b=0,2T=0;do{b+=a.3M||0;2T+=a.45||0;a=a.1A}1R(a);E[2T,b]},3G:D(a){G b=0,2T=0;do{b+=a.53||0;2T+=a.5v||0;a=a.4F}1R(a);E[2T,b]},fL:D(a){G b=0,2T=0;do{b+=a.53||0;2T+=a.5v||0;a=a.4F;if(a){if(a.1N==\'9B\')1B;G p=N.1v(a,\'1D\');if(p==\'6L\'||p==\'3k\')1B}}1R(a);E[2T,b]},4F:D(a){if(a.4F)E a.4F;if(a==1c.26)E a;1R((a=a.1A)&&a!=1c.26)if(N.1v(a,\'1D\')!=\'bn\')E a;E 1c.26},c0:D(a,x,y){if(C.fK)E C.fM(a,x,y);C.8c=x;C.8d=y;C.2E=C.3G(a);E(y>=C.2E[1]&&y<C.2E[1]+a.3j&&x>=C.2E[0]&&x<C.2E[0]+a.3I)},fM:D(a,x,y){G b=C.bZ(a);C.8c=x+b[0]-C.8a;C.8d=y+b[1]-C.8b;C.2E=C.3G(a);E(C.8d>=C.2E[1]&&C.8d<C.2E[1]+a.3j&&C.8c>=C.2E[0]&&C.8c<C.2E[0]+a.3I)},3N:D(a,b){if(!a)E 0;if(a==\'6X\')E((C.2E[1]+b.3j)-C.8d)/b.3j;if(a==\'9C\')E((C.2E[0]+b.3I)-C.8c)/b.3I},9D:D(a){G b=0,2T=0;G c=a;do{b+=c.53||0;2T+=c.5v||0;if(c.4F==1c.26)if(N.1v(c,\'1D\')==\'3k\')1B}1R(c=c.4F);c=a;do{if(!1p.4d||c.1N==\'9B\'){b-=c.3M||0;2T-=c.45||0}}1R(c=c.1A);E[2T,b]},3W:D(a,b){G c=V.O({fN:19,c1:19,fO:19,c2:19,53:0,5v:0},1b[2]||{});a=$(a);G p=1x.9D(a);b=$(b);G d=[0,0];G e=1h;if(N.1v(b,\'1D\')==\'3k\'){e=1x.4F(b);d=1x.9D(e)}if(e==1c.26){d[0]-=1c.26.5v;d[1]-=1c.26.53}if(c.fN)b.12.1s=(p[0]-d[0]+c.5v)+\'1K\';if(c.c1)b.12.1r=(p[1]-d[1]+c.53)+\'1K\';if(c.fO)b.12.1C=a.3I+\'1K\';if(c.c2)b.12.1q=a.3j+\'1K\'},c3:D(a){a=$(a);if(a.12.1D==\'3k\')E;1x.52();G b=1x.fL(a);G c=b[1];G d=b[0];G e=a.7U;G f=a.4V;a.fP=d-3H(a.12.1s||0);a.fQ=c-3H(a.12.1r||0);a.fR=a.12.1C;a.fS=a.12.1q;a.12.1D=\'3k\';a.12.1r=c+\'1K\';a.12.1s=d+\'1K\';a.12.1C=e+\'1K\';a.12.1q=f+\'1K\'},fT:D(a){a=$(a);if(a.12.1D==\'6L\')E;1x.52();a.12.1D=\'6L\';G b=3H(a.12.1r||0)-(a.fQ||0);G c=3H(a.12.1s||0)-(a.fP||0);a.12.1r=b+\'1K\';a.12.1s=c+\'1K\';a.12.1q=a.fS;a.12.1C=a.fR}};if(1k.1X.3U){1x.3G=D(a){G b=0,2T=0;do{b+=a.53||0;2T+=a.5v||0;if(a.4F==1c.26)if(N.1v(a,\'1D\')==\'3k\')1B;a=a.4F}1R(a);E[2T,b]}}N.bu();G 8e={7p:"1.7.kQ",fU:D(a){1c.kR("<4r 1O=\\"3Y/b7\\" 4X=\\""+a+"\\"></4r>")},c4:"1.5.1",c5:D(){D c6(a){G r=a.4x(".");E 3O(r[0])*kS+3O(r[1])*2Q+3O(r[2])}if(1m 1k=="1M"||1m N=="1M"||1m N.1u=="1M"||c6(1k.7p)<c6(8e.c4)){2p"4r.9E.9F 9G fV 1k kT kU >= "+8e.c4;}$A(1c.3E("4r")).8Z(D(s){E s.4X&&s.4X.1w(/(fW|fX)fY[a-z\\-]*\\.js(\\?.*)?$/)}).1j(D(s){G b=s.4X.1I(/(fW|fX)fY[a-z\\-]*\\.js(\\?.*)?$/,"");G c=(s.4X.1w(/\\?.*c5=([a-z,]*)/)||[,""])[1];c.4x(",").1j(D(a){8e.fU(b+a+".js")})})}};G 54={fZ:{g0:"1P",by:"2L",bz:"2L",bA:"2L",g1:"kV",bx:"2B",c7:"2B",g2:"3X",6N:"2L",7X:"2L",bC:"2L",bD:"2L",7W:"2L",6O:"2L"},14:D(a){a=a.2f();G b=C.fZ[a]||"2O";G c=1c.23(b);2z{c.2r="<"+a+"></"+a+">"}2H(e){}G d=c.4y||1h;if(d&&d.1N.2f()!=a){d=d.3E(a)[0]}if(!d){d=1c.23(a)}if(!d){E}if(1b[1]){if(C.9H(1b[1])||1b[1]4s 1V||1b[1].1N){C.c8(d,1b[1])}1e{G f=C.g3(1b[1]);if(f.Y){2z{c.2r="<"+a+" "+f+"></"+a+">"}2H(e){}d=c.4y||1h;if(!d){d=1c.23(a);1g(4Z in 1b[1]){d[4Z=="7M"?"2v":4Z]=1b[1][4Z]}}if(d.1N.2f()!=a){d=c.3E(a)[0]}}}}if(1b[2]){C.c8(d,1b[2])}E d},c9:D(a){E 1c.4Q(a)},ca:{2v:"7M",kW:"1g"},g3:D(a){G b=[];1g(5U in a){b.1f((5U in C.ca?C.ca[5U]:5U)+"=\\""+a[5U].3v().7x().3w(/"/,"&kX;")+"\\"")}E b.2j(" ")},c8:D(a,b){if(b.1N){a.25(b);E}if(1m b=="3X"){b.4h().1j(D(e){if(1m e=="3X"){a.25(e)}1e if(54.9H(e)){a.25(54.c9(e))}})}1e if(54.9H(b)){a.25(54.c9(b))}},9H:D(a){E 1m a=="2J"||1m a=="bP"},kY:D(a){G b=C.14("2O");$(b).1G(a.5i());E b.32()},kZ:D(b){if(1m b!="3X"&&1m b!="D"){b=1p}G c="A l0 l1 l2 l3 g0 B l4 l5 l6 l7 l8 9B l9 g4 by la lb lc bz bA ld f4 lf eV g5 eU lg lh eR lj eP lk f8 eW eX eY eZ f0 f1 ll lm 9s I f9 f5 bv f2 ln lo lp g1 cb lq lr ls lu lv lw lx eT bx c7 P g2 ly Q S lz lA bw lB lC lD lE lF lG lH lI 6N 7X 9q bC bD 7W lJ 6O lK U eS lL".4x(/\\s+/);c.1j(D(a){b[a]=D(){E 54.14.3V(54,[a].2e($A(1b)))}})}};2A.1d.5w=D(){G a="#";if(C.3x(0,4)=="lM("){G b=C.3x(4,C.Y-1).4x(",");G i=0;do{a+=3O(b[i]).6z()}1R(++i<3)}1e{if(C.3x(0,1)=="#"){if(C.Y==4){1g(G i=1;i<4;i++){a+=(C.5J(i)+C.5J(i)).2s()}}if(C.Y==7){a=C.2s()}}}E a.Y==7?a:1b[0]||C};N.9I=D(b){E $A($(b).2k).7B(D(a){E a.3F==3?a.5j:a.cc()?N.9I(a):""}).4h().2j("")};N.9J=D(b,c){E $A($(b).2k).7B(D(a){E a.3F==3?a.5j:a.cc()&&!N.bj(a,c)?N.9J(a,c):""}).4h().2j("")};N.g6=D(a,b){a=$(a);a.1J({6d:b/3L+"em"});if(1k.1X.3U){1p.cd(0,0)}E a};N.55=D(a){E $(a).12.2d||""};N.ce=D(a){2z{a=$(a);G n=1c.4Q(" ");a.25(n);a.7O(n)}2H(e){}};1V.1d.90=D(){G a=1b;C.1j(D(f){f.3V(C,a)})};G 11={6Y:{3a:"lN",lO:"lP bs lQ M lR 51 lS, lT is lU 1g C 6Z 3o lV"},g7:D(c){if(1m 54=="1M"){2p"11.g7 9G cf 4r.9E.9F\' lW.js cg";}G d="1D:6L";if(1k.1X.4c){d+=";ch:1"}c=$(c);$A(c.2k).1j(D(b){if(b.3F==3){b.5j.3y().1j(D(a){c.4Y(54.14("lX",{12:d},a==" "?2A.dR(lY):a),b)});N.3C(b)}})},eO:D(c,d){G e;if((1m c=="3X"||1m c=="D")&&c.Y){e=c}1e{e=$(c).2k}G f=V.O({g8:0.1,3P:0},1b[2]||{});G g=f.3P;$A(e).1j(D(a,b){18 d(a,V.O(f,{3P:b*f.g8+g}))})},ci:{lZ:["g9","ga"],m0:["gb","gc"],gd:["9K","cj"]},bc:D(a,b){a=$(a);b=(b||"gd").2s();G c=V.O({3Q:{1D:"3g",8f:a.id||"8g",ck:1}},1b[2]||{});11[a.9c()?11.ci[b][1]:11.ci[b][0]](a,c)}};G m1=11;11.47={ge:1k.K,6e:D(a){E-1T.cl(a*1T.cn)/2+0.5},5N:D(a){E 1-a},gf:D(a){G a=-1T.cl(a*1T.cn)/4+0.75+1T.m2()/4;E a>1?1:a},m3:D(a){E-1T.cl(a*1T.cn*(9*a))/2+0.5},gg:D(a,b){b=b||5;E 1T.3p(a%(1/b)*b)==0?a*b*2-1T.gh(a*b*2):1-(a*b*2-1T.gh(a*b*2))},43:D(a){E 0},gj:D(a){E 1}};11.co=1H.1E();V.O(V.O(11.co.1d,3f),{1Q:D(){C.22=[];C.8h=1h},3A:D(a){C.22.3A(a)},42:D(a){G b=(18 7v).gk();G c=1m a.J.3Q=="2J"?a.J.3Q:a.J.3Q.1D;4N(c){1F"m4":C.22.8Z(D(e){E e.70=="cp"}).1j(D(e){e.5x+=a.5y;e.5y+=a.5y});1B;1F"5K-2u":b=C.22.5M("5x").5L()||b;1B;1F"3g":b=C.22.5M("5y").5L()||b;1B;60:}a.5x+=b;a.5y+=b;if(!a.J.3Q.ck||C.22.Y<a.J.3Q.ck){C.22.1f(a)}if(!C.8h){C.8h=8T(C.71.1o(C),15)}},3C:D(a){C.22=C.22.6E(D(e){E e==a});if(C.22.Y==0){aN(C.8h);C.8h=1h}},71:D(){G a=(18 7v).gk();1g(G i=0,7y=C.22.Y;i<7y;i++){C.22[i]&&C.22[i].71(a)}}});11.9L={9M:$H(),6G:D(a){if(1m a!="2J"){E a}if(!C.9M[a]){C.9M[a]=18 11.co}E C.9M[a]}};11.m5=11.9L.6G("8g");11.gl={3R:11.47.6e,2o:1,gm:3L,3q:17,2Z:0,3o:1,3P:0,3Q:"m6"};11.2C=D(){};11.2C.1d={1D:1h,1S:D(c){D 8i(a,b){E(a[b+"9N"]?"C.J."+b+"9N(C);":"")+(a[b]?"C.J."+b+"(C);":"")}if(c.3R===17){c.3R=11.47.ge}C.J=V.O(V.O({},11.gl),c||{});C.cq=0;C.70="cp";C.5x=C.J.3P*2Q;C.5y=C.5x+C.J.2o*2Q;C.gn=C.J.3o-C.J.2Z;C.go=C.5y-C.5x;C.gp=C.J.gm*C.J.2o;7w("C.4G = D(8j){ "+"if(C.70==\\"cp\\"){C.70=\\"gq\\";"+8i(c,"6f")+(C.6g?"C.6g();":"")+8i(c,"cr")+"};if(C.70==\\"gq\\"){"+"8j=C.J.3R(8j)*"+C.gn+"+"+C.J.2Z+";"+"C.1D=8j;"+8i(c,"m7")+(C.1G?"C.1G(8j);":"")+8i(c,"m8")+"}}");C.4f("m9");if(!C.J.3q){11.9L.6G(1m C.J.3Q=="2J"?"8g":C.J.3Q.8f).42(C)}},71:D(a){if(a>=C.5x){if(a>=C.5y){C.4G(1);C.72();C.4f("gr");if(C.6h){C.6h()}C.4f("cs");E}G b=(a-C.5x)/C.go,ct=1T.3p(b*C.gp);if(ct>C.cq){C.4G(b);C.cq=ct}}},72:D(){if(!C.J.3q){11.9L.6G(1m C.J.3Q=="2J"?"8g":C.J.3Q.8f).3C(C)}C.70="ma"},4f:D(a){if(C.J[a+"9N"]){C.J[a+"9N"](C)}if(C.J[a]){C.J[a](C)}},2i:D(){G a=$H();1g(9O in C){if(1m C[9O]!="D"){a[9O]=C[9O]}}E"#<11:"+a.2i()+",J:"+$H(C.J).2i()+">"}};11.6i=1H.1E();V.O(V.O(11.6i.1d,11.2C.1d),{1Q:D(a){C.22=a||[];C.1S(1b[1])},1G:D(a){C.22.7C("4G",a)},6h:D(b){C.22.1j(D(a){a.4G(1);a.72();a.4f("gr");if(a.6h){a.6h(b)}a.4f("cs")})}});11.1a=1H.1E();V.O(V.O(11.1a.1d,11.2C.1d),{1Q:D(){G a=V.O({2o:0},1b[0]||{});C.1S(a)},1G:1k.4e});11.4l=1H.1E();V.O(V.O(11.4l.1d,11.2C.1d),{1Q:D(a){C.M=$(a);if(!C.M){2p 11.6Y;}if(1k.1X.4c&&!C.M.9l.gs){C.M.1J({ch:1})}G b=V.O({2Z:C.M.7T()||0,3o:1},1b[1]||{});C.1S(b)},1G:D(a){C.M.6K(a)}});11.3r=1H.1E();V.O(V.O(11.3r.1d,11.2C.1d),{1Q:D(a){C.M=$(a);if(!C.M){2p 11.6Y;}G b=V.O({x:0,y:0,gu:"6L"},1b[1]||{});C.1S(b)},6g:D(){C.M.3J();C.8k=3H(C.M.1v("1s")||"0");C.8l=3H(C.M.1v("1r")||"0");if(C.J.gu=="3k"){C.J.x=C.J.x-C.8k;C.J.y=C.J.y-C.8l}},1G:D(a){C.M.1J({1s:1T.3p(C.J.x*a+C.8k)+"1K",1r:1T.3p(C.J.y*a+C.8l)+"1K"})}});11.mb=D(a,b,c){E 18 11.3r(a,V.O({x:c,y:b},1b[3]||{}))};11.3S=1H.1E();V.O(V.O(11.3S.1d,11.2C.1d),{1Q:D(a,b){C.M=$(a);if(!C.M){2p 11.6Y;}G c=V.O({4H:19,8m:19,4I:19,9P:17,56:"cu",6j:3L,gv:b},1b[2]||{});C.1S(c)},6g:D(){C.48=C.J.48||17;C.gw=C.M.1v("1D");C.cv={};["1r","1s","1C","1q","6d"].1j((D(k){C.cv[k]=C.M.12[k]}).1o(C));C.8l=C.M.53;C.8k=C.M.5v;G b=C.M.1v("mc-7F")||"3L%";["em","1K","%","gx"].1j((D(a){if(b.2y(a)>0){C.6d=3H(b);C.gy=a}}).1o(C));C.gz=(C.J.gv-C.J.6j)/3L;C.4m=1h;if(C.J.56=="cu"){C.4m=[C.M.3j,C.M.3I]}if(/^7Z/.41(C.J.56)){C.4m=[C.M.gA,C.M.md]}if(!C.4m){C.4m=[C.J.56.9Q,C.J.56.9R]}},1G:D(a){G b=C.J.6j/3L+C.gz*a;if(C.J.4I&&C.6d){C.M.1J({6d:C.6d*b+C.gy})}C.gB(C.4m[0]*b,C.4m[1]*b)},6h:D(a){if(C.48){C.M.1J(C.cv)}},gB:D(a,b){G d={};if(C.J.4H){d.1C=1T.3p(b)+"1K"}if(C.J.8m){d.1q=1T.3p(a)+"1K"}if(C.J.9P){G c=(a-C.4m[0])/2;G e=(b-C.4m[1])/2;if(C.gw=="3k"){if(C.J.8m){d.1r=C.8l-c+"1K"}if(C.J.4H){d.1s=C.8k-e+"1K"}}1e{if(C.J.8m){d.1r=-c+"1K"}if(C.J.4H){d.1s=-e+"1K"}}}C.M.1J(d)}});11.9S=1H.1E();V.O(V.O(11.9S.1d,11.2C.1d),{1Q:D(a){C.M=$(a);if(!C.M){2p 11.6Y;}G b=V.O({9T:"#me"},1b[1]||{});C.1S(b)},6g:D(){if(C.M.1v("3i")=="43"){C.72();E}C.cw={};if(!C.J.mf){C.cw.gC=C.M.1v("9U-mg");C.M.1J({gC:"43"})}if(!C.J.9V){C.J.9V=C.M.1v("9U-57").5w("#gD")}if(!C.J.9W){C.J.9W=C.M.1v("9U-57")}C.cx=$R(0,2).1P((D(i){E 3O(C.J.9T.3x(i*2+1,i*2+3),16)}).1o(C));C.gE=$R(0,2).1P((D(i){E 3O(C.J.9V.3x(i*2+1,i*2+3),16)-C.cx[i]}).1o(C))},1G:D(a){C.M.1J({58:$R(0,2).4w("#",(D(m,v,i){E m+1T.3p(C.cx[i]+C.gE[i]*a).6z()}).1o(C))})},6h:D(){C.M.1J(V.O(C.cw,{58:C.J.9W}))}});11.gF=1H.1E();V.O(V.O(11.gF.1d,11.2C.1d),{1Q:D(a){C.M=$(a);C.1S(1b[1]||{})},6g:D(){1x.52();G a=1x.3G(C.M);if(C.J.2E){a[1]+=C.J.2E}G b=1p.cy?1p.1q-1p.cy:1c.26.gA-(1c.3n.4V?1c.3n.4V:1c.26.4V);C.cz=1x.8b;C.73=(a[1]>b?b:a[1])-C.cz},1G:D(a){1x.52();1p.7S(1x.8a,C.cz+a*C.73)}});11.cj=D(b){b=$(b);G c=b.55();G d=V.O({2Z:b.7T()||1,3o:0,2b:D(a){if(a.J.3o!=0){E}a.M.1Z().1J({2d:c})}},1b[1]||{});E 18 11.4l(b,d)};11.9K=D(b){b=$(b);G c=V.O({2Z:b.1v("3i")=="43"?0:b.7T()||0,3o:1,2b:D(a){a.M.ce()},6f:D(a){a.M.6K(a.J.2Z).2w()}},1b[1]||{});E 18 11.4l(b,c)};11.mh=D(b){b=$(b);G c={2d:b.55(),1D:b.1v("1D"),1r:b.12.1r,1s:b.12.1s,1C:b.12.1C,1q:b.12.1q};E 18 11.6i([18 11.3S(b,er,{3q:19,9P:19,4I:19,48:19}),18 11.4l(b,{3q:19,3o:0})],V.O({2o:1,mi:D(a){1x.c3(a.22[0].M)},2b:D(a){a.22[0].M.1Z().1J(c)}},1b[1]||{}))};11.gc=D(b){b=$(b);b.4B();E 18 11.3S(b,0,V.O({4I:17,4H:17,48:19,2b:D(a){a.M.1Z().4C()}},1b[1]||{}))};11.gb=D(b){b=$(b);G c=b.5W();E 18 11.3S(b,3L,V.O({4I:17,4H:17,6j:0,56:{9Q:c.1q,9R:c.1C},48:19,cr:D(a){a.M.4B().1J({1q:"cA"}).2w()},2b:D(a){a.M.4C()}},1b[1]||{}))};11.mj=D(c){c=$(c);G d=c.55();E 18 11.9K(c,V.O({2o:0.4,2Z:0,3R:11.47.gf,2b:D(b){18 11.3S(b.M,1,{2o:0.3,9P:19,4H:17,4I:17,48:19,6f:D(a){a.M.3J().4B()},2b:D(a){a.M.1Z().4C().4A().1J({2d:d})}})}},1b[1]||{}))};11.mk=D(b){b=$(b);G c={1r:b.1v("1r"),1s:b.1v("1s"),2d:b.55()};E 18 11.6i([18 11.3r(b,{x:0,y:3L,3q:19}),18 11.4l(b,{3q:19,3o:0})],V.O({2o:0.5,6f:D(a){a.22[0].M.3J()},2b:D(a){a.22[0].M.1Z().4A().1J(c)}},1b[1]||{}))};11.ml=D(g){g=$(g);G h={1r:g.1v("1r"),1s:g.1v("1s")};E 18 11.3r(g,{x:20,y:0,2o:0.gG,2b:D(f){18 11.3r(f.M,{x:-40,y:0,2o:0.1,2b:D(e){18 11.3r(e.M,{x:40,y:0,2o:0.1,2b:D(d){18 11.3r(d.M,{x:-40,y:0,2o:0.1,2b:D(c){18 11.3r(c.M,{x:40,y:0,2o:0.1,2b:D(b){18 11.3r(b.M,{x:-20,y:0,2o:0.gG,2b:D(a){a.M.4A().1J(h)}})}})}})}})}})}})};11.g9=D(b){b=$(b).6J();G c=b.32().1v("3K");G d=b.5W();E 18 11.3S(b,3L,V.O({4I:17,4H:17,6j:1p.4d?0:1,56:{9Q:d.1q,9R:d.1C},48:19,cr:D(a){a.M.3J();a.M.32().3J();if(1p.4d){a.M.1J({1r:""})}a.M.4B().1J({1q:"cA"}).2w()},gH:D(a){a.M.32().1J({3K:a.4m[0]-a.M.4V+"1K"})},2b:D(a){a.M.4C().4A();a.M.32().4A().1J({3K:c})}},1b[1]||{}))};11.ga=D(b){b=$(b).6J();G c=b.32().1v("3K");E 18 11.3S(b,1p.4d?0:1,V.O({4I:17,4H:17,56:"cu",6j:3L,48:19,gI:D(a){a.M.3J();a.M.32().3J();if(1p.4d){a.M.1J({1r:""})}a.M.4B().2w()},gH:D(a){a.M.32().1J({3K:a.4m[0]-a.M.4V+"1K"})},2b:D(a){a.M.1Z().4C().4A().1J({3K:c});a.M.32().4A()}},1b[1]||{}))};11.mn=D(b){E 18 11.3S(b,1p.4d?1:0,{48:19,6f:D(a){a.M.4B()},2b:D(a){a.M.1Z().4C()}})};11.mo=D(c){c=$(c);G d=V.O({9X:"9Y",9Z:11.47.6e,a0:11.47.6e,a1:11.47.gj},1b[1]||{});G e={1r:c.12.1r,1s:c.12.1s,1q:c.12.1q,1C:c.12.1C,2d:c.55()};G f=c.5W();G g,6k;G h,3s;4N(d.9X){1F"1r-1s":g=6k=h=3s=0;1B;1F"1r-5Z":g=f.1C;6k=3s=0;h=-f.1C;1B;1F"3K-1s":g=h=0;6k=f.1q;3s=-f.1q;1B;1F"3K-5Z":g=f.1C;6k=f.1q;h=-f.1C;3s=-f.1q;1B;1F"9Y":g=f.1C/2;6k=f.1q/2;h=-f.1C/2;3s=-f.1q/2;1B;60:}E 18 11.3r(c,{x:g,y:6k,2o:0.mp,6f:D(a){a.M.1Z().4B().3J()},2b:D(b){18 11.6i([18 11.4l(b.M,{3q:19,3o:1,2Z:0,3R:d.a1}),18 11.3r(b.M,{x:h,y:3s,3q:19,3R:d.9Z}),18 11.3S(b.M,3L,{56:{9Q:f.1q,9R:f.1C},3q:19,6j:1p.4d?1:0,3R:d.a0,48:19})],V.O({6f:D(a){a.22[0].M.1J({1q:"cA"}).2w()},2b:D(a){a.22[0].M.4C().4A().1J(e)}},d))}})};11.mq=D(b){b=$(b);G c=V.O({9X:"9Y",9Z:11.47.6e,a0:11.47.6e,a1:11.47.43},1b[1]||{});G d={1r:b.12.1r,1s:b.12.1s,1q:b.12.1q,1C:b.12.1C,2d:b.55()};G e=b.5W();G f,3s;4N(c.9X){1F"1r-1s":f=3s=0;1B;1F"1r-5Z":f=e.1C;3s=0;1B;1F"3K-1s":f=0;3s=e.1q;1B;1F"3K-5Z":f=e.1C;3s=e.1q;1B;1F"9Y":f=e.1C/2;3s=e.1q/2;1B;60:}E 18 11.6i([18 11.4l(b,{3q:19,3o:0,2Z:1,3R:c.a1}),18 11.3S(b,1p.4d?1:0,{3q:19,3R:c.a0,48:19}),18 11.3r(b,{x:f,y:3s,3q:19,3R:c.9Z})],V.O({gI:D(a){a.22[0].M.3J().4B()},2b:D(a){a.22[0].M.1Z().4C().4A().1J(d)}},c))};11.mr=D(b){b=$(b);G c=1b[1]||{};G d=b.55();G e=c.3R||11.47.6e;G f=D(a){E e(1-11.47.gg(a,c.ms))};f.1o(e);E 18 11.4l(b,V.O(V.O({2o:2,2Z:0,2b:D(a){a.M.1J({2d:d})}},c),{3R:f}))};11.mt=D(c){c=$(c);G d={1r:c.12.1r,1s:c.12.1s,1C:c.12.1C,1q:c.12.1q};c.4B();E 18 11.3S(c,5,V.O({4I:17,4H:17,2b:D(b){18 11.3S(c,1,{4I:17,8m:17,2b:D(a){a.M.1Z().4C().1J(d)}})}},1b[1]||{}))};11.a2=1H.1E();V.O(V.O(11.a2.1d,11.2C.1d),{1Q:D(c){C.M=$(c);if(!C.M){2p 11.6Y;}G d=V.O({12:{}},1b[1]||{});if(1m d.12=="2J"){if(d.12.2y(":")==-1){G e="",67="."+d.12;$A(1c.mu).5N().1j(D(b){if(b.8n){8n=b.8n}1e if(b.gJ){8n=b.gJ}$A(8n).5N().1j(D(a){if(67==a.mv){e=a.12.eM;2p $1B;}});if(e){2p $1B;}});C.12=e.cB();d.2b=D(b){b.M.4z(b.J.12);b.a3.1j(D(a){if(a.12!="2d"){b.M.12[a.12]=""}})}}1e{C.12=d.12.cB()}}1e{C.12=$H(d.12)}C.1S(d)},6g:D(){D 5w(a){if(!a||["mw(0, 0, 0, 0)","gK"].24(a)){a="#gD"}a=a.5w();E $R(0,2).1P(D(i){E 3O(a.3x(i*2+1,i*2+3),16)})}C.a3=C.12.1P((D(a){G b=a[0],1l=a[1],4J=1h;if(1l.5w("#gL")!="#gL"){1l=1l.5w();4J="57"}1e if(b=="2d"){1l=3H(1l);if(1k.1X.4c&&!C.M.9l.gs){C.M.1J({ch:1})}}1e if(N.gM.41(1l)){G c=1l.1w(/^([\\+\\-]?[0-9\\.]+)(.*)$/);1l=3H(c[1]);4J=c.Y==3?c[2]:1h}G d=C.M.1v(b);E{12:b.6A(),4n:4J=="57"?5w(d):3H(d||0),6l:4J=="57"?5w(1l):1l,4J:4J}}).1o(C)).6E(D(a){E a.4n==a.6l||a.4J!="57"&&(gN(a.4n)||gN(a.6l))})},1G:D(a){G b={},2U,i=C.a3.Y;1R(i--){b[(2U=C.a3[i]).12]=2U.4J=="57"?"#"+1T.3p(2U.4n[0]+(2U.6l[0]-2U.4n[0])*a).6z()+1T.3p(2U.4n[1]+(2U.6l[1]-2U.4n[1])*a).6z()+1T.3p(2U.4n[2]+(2U.6l[2]-2U.4n[2])*a).6z():2U.4n+1T.3p((2U.6l-2U.4n)*a*2Q)/2Q+2U.4J}C.M.1J(b,19)}});11.gO=1H.1E();V.O(11.gO.1d,{1Q:D(a){C.4o=[];C.J=1b[1]||{};C.gP(a)},gP:D(c){c.1j((D(a){G b=$H(a).29().3B();C.4o.1f($H({cC:$H(a).aL().3B(),6Z:11.a2,J:{12:b}}))}).1o(C));E C},cD:D(){E 18 11.6i(C.4o.1P(D(a){G b=[$(a.cC)||$$(a.cC)].4h();E b.1P(D(e){E 18 a.6Z(e,V.O({3q:19},a.J))})}).4h(),C.J)}});N.gQ=$w("58 mx my mz mA mB mC mD mE mF mG mH mI mJ mK 3K mL 57 6d mM 1q 1s mN mO mP mQ mR mS mT mU mV mW mX 2d mY mZ n0 n1 n2 n3 n4 5Z n5 1r 1C n6 8o");N.gM=/^(([\\+\\-]?[0-9\\.]+)(em|ex|1K|in|cm|mm|gx|n7|\\%))|0$/;2A.1d.cB=D(){G b=1c.23("2O");b.2r="<2O 12=\\""+C+"\\"></2O>";G c=b.2k[0].12,a4=$H();N.gQ.1j(D(a){if(c[a]){a4[a]=c[a]}});if(1k.1X.4c&&C.2y("2d")>-1){a4.2d=C.1w(/2d:\\s*((?:0|1)?(?:\\.\\d*)?)/)[1]}E a4};N.gR=D(a,b){18 11.a2(a,V.O({12:b},1b[2]||{}));E a};["55","ce","g6","9I","9J","gR"].1j(D(f){N.1u[f]=N[f]});N.1u.n8=D(a,b,c){s=b.dT().6A();gS=s.5J(0).2f()+s.6B(1);18 11[gS](a,c);E $(a)};N.bu();if(1m 11=="1M"){2p"n9.js 9G cf 4r.9E.9F\' 22.js cg";}G 3T={74:[],3C:D(a){C.74=C.74.6E(D(d){E d.M==$(a)})},42:D(a){a=$(a);G b=V.O({na:19,4K:1h,3t:17},1b[1]||{});if(b.6m){b.8p=[];G d=b.6m;if(1m d=="3X"&&d.5k==1V){d.1j(D(c){b.8p.1f($(c))})}1e{b.8p.1f($(d))}}if(b.8q){b.8q=[b.8q].4h()}N.3J(a);b.M=a;C.74.1f(b)},gT:D(a){a5=a[0];1g(i=1;i<a.Y;++i){if(N.8r(a[i].M,a5.M)){a5=a[i]}}E a5},gU:D(a,b){G d;if(b.3t){d=a.cE}1e{d=a.1A}E b.8p.6D(D(c){E d==c})},cF:D(a,b,c){E c.M!=b&&(!c.8p||C.gU(b,c))&&(!c.8q||N.6I(b).6D(D(v){E c.8q.24(v)}))&&1x.c0(c.M,a[0],a[1])},8s:D(a){if(a.4K){N.5X(a.M,a.4K)}C.4p=1h},5t:D(a){if(a.4K){N.4z(a.M,a.4K)}C.4p=a},2w:D(b,c){if(!C.74.Y){E}G d=[];if(C.4p){C.8s(C.4p)}C.74.1j(D(a){if(3T.cF(b,c,a)){d.1f(a)}});if(d.Y>0){5z=3T.gT(d);1x.c0(5z.M,b[0],b[1]);if(5z.5A){5z.5A(c,5z.M,1x.3N(5z.3N,5z.M))}3T.5t(5z)}},gV:D(a,b){if(!C.4p){E}1x.52();if(C.cF([1a.6b(a),1a.6c(a)],b,C.4p)){if(C.4p.gW){C.4p.gW(b,C.4p.M,a);E 19}}},85:D(){if(C.4p){C.8s(C.4p)}}};G 1W={76:[],2S:[],93:D(a){if(C.76.Y==0){C.77=C.78.2P(C);C.79=C.a6.2P(C);C.cG=C.a7.2P(C);1a.21(1c,"a8",C.77);1a.21(1c,"a9",C.79);1a.21(1c,"89",C.cG)}C.76.1f(a)},b0:D(a){C.76=C.76.6E(D(d){E d==a});if(C.76.Y==0){1a.2D(1c,"a8",C.77);1a.2D(1c,"a9",C.79);1a.2D(1c,"89",C.cG)}},5t:D(a){if(a.J.3P){C.8t=3D((D(){1W.8t=1h;1p.6V();1W.4L=a}).1o(C),a.J.3P)}1e{1p.6V();C.4L=a}},8s:D(){C.4L=1h},a6:D(a){if(!C.4L){E}G b=[1a.6b(a),1a.6c(a)];if(C.7a&&C.7a.2i()==b.2i()){E}C.7a=b;C.4L.a6(a,b)},78:D(a){if(C.8t){9a(C.8t);C.8t=1h}if(!C.4L){E}C.7a=1h;C.4L.78(a);C.4L=1h},a7:D(a){if(C.4L){C.4L.a7(a)}},gX:D(a){C.2S.1f(a);C.cH()},gY:D(a){C.2S=C.2S.6E(D(o){E o.M==a});C.cH()},8u:D(a,b,c){if(C[a+"gZ"]>0){C.2S.1j(D(o){if(o[a]){o[a](a,b,c)}})}if(b.J[a]){b.J[a](b,c)}},cH:D(){["cI","cJ","cK"].1j(D(a){1W[a+"gZ"]=1W.2S.2B(D(o){E o[a]}).Y})}};G 5B=1H.1E();5B.8v={};5B.1d={1Q:D(e){G f={2G:17,6n:D(a,b,c){G d=1T.nb(1T.aa(b^2)+1T.aa(c^2))*0.nc;18 11.3r(a,{x:-c,y:-b,2o:d,3Q:{8f:"h0",1D:"3g"}})},6o:D(a){G b=1m a.ab=="bP"?a.ab:1;18 11.4l(a,{2o:0.2,2Z:0.7,3o:b,3Q:{8f:"h0",1D:"3g"},cs:D(){5B.8v[a]=17}})},6p:2Q,cL:17,7b:17,1L:17,49:20,3b:15,59:17,3P:0};if(!1b[1]||1m 1b[1].6o=="1M"){V.O(f,{7c:D(a){a.ab=N.7T(a);5B.8v[a]=19;18 11.4l(a,{2o:0.2,2Z:a.ab,3o:0.7})}})}G g=V.O(f,1b[1]||{});C.M=$(e);if(g.2G&&1m g.2G=="2J"){C.2G=C.M.32("."+g.2G,0)}if(!C.2G){C.2G=$(g.2G)}if(!C.2G){C.2G=C.M}if(g.1L&&!g.1L.7S&&!g.1L.bd){g.1L=$(g.1L);C.cM=N.eJ(C.M,g.1L)}N.3J(C.M);C.73=C.ac();C.J=g;C.4a=17;C.5C=C.h1.2P(C);1a.21(C.2G,"7d",C.5C);1W.93(C)},ad:D(){1a.2D(C.2G,"7d",C.5C);1W.b0(C)},ac:D(){E[3O(N.1v(C.M,"1s")||"0"),3O(N.1v(C.M,"1r")||"0")]},h1:D(a){if(1m 5B.8v[C.M]!="1M"&&5B.8v[C.M]){E}if(1a.bY(a)){G b=1a.M(a);if((7e=b.1N.2f())&&(7e=="bv"||7e=="bw"||7e=="c7"||7e=="g4"||7e=="9q")){E}G c=[1a.6b(a),1a.6c(a)];G d=1x.3G(C.M);C.2E=[0,1].1P(D(i){E c[i]-d[i]});1W.5t(C);1a.2I(a)}},ae:D(a){C.4a=19;if(C.J.6p){C.h2=3O(N.1v(C.M,"z-2q")||0);C.M.12.8o=C.J.6p}if(C.J.5D){C.af=C.M.nd(19);1x.c3(C.M);C.M.1A.4Y(C.af,C.M)}if(C.J.1L){if(C.J.1L==1p){G b=C.ag(C.J.1L);C.cN=b.1s;C.cO=b.1r}1e{C.cN=C.J.1L.45;C.cO=C.J.1L.3M}}1W.8u("cI",C,a);if(C.J.7c){C.J.7c(C.M)}},a6:D(a,b){if(!C.4a){C.ae(a)}if(!C.J.7b){1x.52();3T.2w(b,C.M)}1W.8u("cK",C,a);C.8w(b);if(C.J.88){C.J.88(C)}if(C.J.1L){C.cP();G p;if(C.J.1L==1p){5K(C.ag(C.J.1L)){p=[1s,1r,1s+1C,1r+1q]}}1e{p=1x.9D(C.J.1L);p[0]+=C.J.1L.45+1x.8a;p[1]+=C.J.1L.3M+1x.8b;p.1f(p[0]+C.J.1L.3I);p.1f(p[1]+C.J.1L.3j)}G c=[0,0];if(b[0]<p[0]+C.J.49){c[0]=b[0]-(p[0]+C.J.49)}if(b[1]<p[1]+C.J.49){c[1]=b[1]-(p[1]+C.J.49)}if(b[0]>p[2]-C.J.49){c[0]=b[0]-(p[2]-C.J.49)}if(b[1]>p[3]-C.J.49){c[1]=b[1]-(p[3]-C.J.49)}C.h3(c)}if(1k.1X.3U){1p.cd(0,0)}1a.2I(a)},8x:D(a,b){C.4a=17;if(C.J.7b){1x.52();G c=[1a.6b(a),1a.6c(a)];3T.2w(c,C.M)}if(C.J.5D){1x.fT(C.M);N.3C(C.af);C.af=1h}G e=17;if(b){e=3T.gV(a,C.M);if(!e){e=17}}if(e&&C.J.h4){C.J.h4(C.M)}1W.8u("cJ",C,a);G f=C.J.cL;if(f&&1m f=="D"){f=f(C.M)}G d=C.ac();if(f&&C.J.6n){if(e==0||f!="7J"){C.J.6n(C.M,d[1]-C.73[1],d[0]-C.73[0])}}1e{C.73=d}if(C.J.6p){C.M.12.8o=C.h2}if(C.J.6o){C.J.6o(C.M)}1W.8s(C);3T.85()},a7:D(a){if(a.8y!=1a.bX){E}C.8x(a,17);1a.2I(a)},78:D(a){if(!C.4a){E}C.cP();C.8x(a,19);1a.2I(a)},8w:D(a){G b=1x.3G(C.M);if(C.J.5D){G r=1x.bZ(C.M);b[0]+=r[0]-1x.8a;b[1]+=r[1]-1x.8b}G d=C.ac();b[0]-=d[0];b[1]-=d[1];if(C.J.1L&&C.J.1L!=1p&&C.cM){b[0]-=C.J.1L.45-C.cN;b[1]-=C.J.1L.3M-C.cO}G p=[0,1].1P((D(i){E a[i]-b[i]-C.2E[i]}).1o(C));if(C.J.59){if(1m C.J.59=="D"){p=C.J.59(p[0],p[1],C)}1e{if(C.J.59 4s 1V){p=p.1P((D(v,i){E 1T.3p(v/C.J.59[i])*C.J.59[i]}).1o(C))}1e{p=p.1P((D(v){E 1T.3p(v/C.J.59)*C.J.59}).1o(C))}}}G c=C.M.12;if(!C.J.6q||C.J.6q=="9C"){c.1s=p[0]+"1K"}if(!C.J.6q||C.J.6q=="6X"){c.1r=p[1]+"1K"}if(c.5Y=="5n"){c.5Y=""}},cP:D(){if(C.ah){aN(C.ah);C.ah=1h;1W.4M=1h}},h3:D(a){if(!(a[0]||a[1])){E}C.3b=[a[0]*C.J.3b,a[1]*C.J.3b];C.cQ=18 7v;C.ah=8T(C.1L.1o(C),10)},1L:D(){G a=18 7v;G b=a-C.cQ;C.cQ=a;if(C.J.1L==1p){5K(C.ag(C.J.1L)){if(C.3b[0]||C.3b[1]){G d=b/2Q;C.J.1L.7S(1s+d*C.3b[0],1r+d*C.3b[1])}}}1e{C.J.1L.45+=C.3b[0]*b/2Q;C.J.1L.3M+=C.3b[1]*b/2Q}1x.52();3T.2w(1W.7a,C.M);1W.8u("cK",C);if(C.cM){1W.4M=1W.4M||$A(1W.7a);1W.4M[0]+=C.3b[0]*b/2Q;1W.4M[1]+=C.3b[1]*b/2Q;if(1W.4M[0]<0){1W.4M[0]=0}if(1W.4M[1]<0){1W.4M[1]=0}C.8w(1W.4M)}if(C.J.88){C.J.88(C)}},ag:D(w){G T,L,W,H;5K(w.1c){if(w.1c.3n&&3n.3M){T=3n.3M;L=3n.45}1e if(w.1c.26){T=26.3M;L=26.45}if(w.h5){W=w.h5;H=w.cy}1e if(w.1c.3n&&3n.7U){W=3n.7U;H=3n.4V}1e{W=26.3I;H=26.3j}}E{1r:T,1s:L,1C:W,1q:H}}};G cR=1H.1E();cR.1d={1Q:D(a,b){C.M=$(a);C.7f=b;C.3m=1z.4E(C.M)},cI:D(){C.3m=1z.4E(C.M)},cJ:D(){1z.5s();if(C.3m!=1z.4E(C.M)){C.7f(C.M)}}};G 1z={h6:/^[^3Z\\-](?:[A-ne-nf-9\\-\\3Z]*)[3Z](.*)$/,8z:{},h7:D(a){1R(a.1N.2f()!="9B"){if(a.id&&1z.8z[a.id]){E a}a=a.1A}},J:D(a){a=1z.h7($(a));if(!a){E}E 1z.8z[a.id]},ad:D(a){G s=1z.J(a);if(s){1W.gY(s.M);s.8A.1j(D(d){3T.3C(d)});s.cS.7C("ad");91 1z.8z[s.M.id]}},1E:D(b){b=$(b);G c=V.O({M:b,7g:"li",h8:17,3t:17,8B:"cT",3N:"6X",6q:"6X",6m:b,2G:17,44:17,3P:0,4K:1h,5D:17,7b:17,1L:17,49:20,3b:15,5E:C.h6,7K:17,2h:17,5a:1k.4e,h9:1k.4e},1b[1]||{});C.ad(b);G d={cL:19,7b:c.7b,1L:c.1L,3b:c.3b,49:c.49,3P:c.3P,5D:c.5D,6q:c.6q,2G:c.2G};if(c.7c){d.7c=c.7c}if(c.6n){d.6n=c.6n}1e if(c.5D){d.6n=D(a){a.12.1r=0;a.12.1s=0}}if(c.6o){d.6o=c.6o}if(c.6p){d.6p=c.6p}G f={3N:c.3N,6m:c.6m,3t:c.3t,4K:c.4K,5A:1z.5A};G g={5A:1z.ha,3N:c.3N,6m:c.6m,4K:c.4K};N.6J(b);c.cS=[];c.8A=[];if(c.h8||c.3t){3T.42(b,g);c.8A.1f(b)}(c.7K||C.4k(b,c)||[]).1j(D(e,i){G a=c.2h?$(c.2h[i]):c.2G?$(e).6H(c.2G)[0]:e;c.cS.1f(18 5B(e,V.O(d,{2G:a})));3T.42(e,f);if(c.3t){e.cE=b}c.8A.1f(e)});if(c.3t){(1z.hb(b,c)||[]).1j(D(e){3T.42(e,g);e.cE=b;c.8A.1f(e)})}C.8z[b.id]=c;1W.gX(18 cR(b,c.h9))},4k:D(a,b){E N.ai(a,b.44,b.3t?19:17,b.7g)},hb:D(a,b){E N.ai(a,b.44,b.3t?19:17,b.8B)},5A:D(a,b,c){if(N.8r(b,a)){E}if(c>0.33&&c<0.66&&1z.J(b).3t){E}1e if(c>0.5){1z.64(b,"ng");if(b.bg!=a){G d=a.1A;a.12.5Y="5n";b.1A.4Y(a,b);if(b.1A!=d){1z.J(d).5a(a)}1z.J(b.1A).5a(a)}}1e{1z.64(b,"hc");G e=b.5V||1h;if(e!=a){G d=a.1A;a.12.5Y="5n";b.1A.4Y(a,e);if(b.1A!=d){1z.J(d).5a(a)}1z.J(b.1A).5a(a)}}},ha:D(a,b,c){G d=a.1A;G e=1z.J(b);if(!N.8r(b,a)){G f;G g=1z.4k(b,{7g:e.7g,44:e.44});G h=1h;if(g){G i=N.8C(b,e.3N)*(1-c);1g(f=0;f<g.Y;f+=1){if(i-N.8C(g[f],e.3N)>=0){i-=N.8C(g[f],e.3N)}1e if(i-N.8C(g[f],e.3N)/2>=0){h=f+1<g.Y?g[f+1]:1h;1B}1e{h=g[f];1B}}}b.4Y(a,h);1z.J(d).5a(a);e.5a(a)}},5s:D(){if(1z.5b){1z.5b.1Z()}},64:D(a,b){G c=1z.J(a.1A);if(c&&!c.5D){E}if(!1z.5b){1z.5b=($("hd")||N.O(1c.23("g5"))).1Z().4z("hd").1J({1D:"3k"});1c.3E("26").nh(0).25(1z.5b)}G d=1x.3G(a);1z.5b.1J({1s:d[0]+"1K",1r:d[1]+"1K"});if(b=="hc"){if(c.3N=="9C"){1z.5b.1J({1s:d[0]+a.7U+"1K"})}1e{1z.5b.1J({1r:d[1]+a.4V+"1K"})}}1z.5b.2w()},cU:D(a,b,c){G d=1z.4k(a,b)||[];1g(G i=0;i<d.Y;++i){G e=d[i].id.1w(b.5E);if(!e){3z}G f={id:4R(e?e[1]:1h),M:a,cV:c,65:[],1D:c.65.Y,5l:$(d[i]).32(b.8B)};if(f.5l){C.cU(f.5l,b,f)}c.65.1f(f)}E c},3t:D(a){a=$(a);G b=C.J(a);G c=V.O({7g:b.7g,8B:b.8B,44:b.44,3a:a.id,5E:b.5E},1b[1]||{});G d={id:1h,cV:1h,65:[],5l:a,1D:0};E 1z.cU(a,c,d)},he:D(a){G b="";do{if(a.id){b="["+a.1D+"]"+b}}1R((a=a.cV)!=1h);E b},hf:D(b){b=$(b);G c=V.O(C.J(b),1b[1]||{});E $(C.4k(b,c)||[]).1P(D(a){E a.id.1w(c.5E)?a.id.1w(c.5E)[1]:""})},ni:D(b,c){b=$(b);G d=V.O(C.J(b),1b[2]||{});G e={};C.4k(b,d).1j(D(n){if(n.id.1w(d.5E)){e[n.id.1w(d.5E)[1]]=[n,n.1A]}n.1A.7O(n)});c.1j(D(a){G n=e[a];if(n){n[1].25(n[0]);91 e[a]}})},4E:D(b){b=$(b);G c=V.O(1z.J(b),1b[1]||{});G d=4R(1b[1]&&1b[1].3a?1b[1].3a:b.id);if(c.3t){E 1z.3t(b,1b[1]).65.1P(D(a){E[d+1z.he(a)+"[id]="+4R(a.id)].2e(a.65.1P(1b.8U))}).4h().2j("&")}1e{E 1z.hf(b,1b[1]).1P(D(a){E d+"[]="+4R(a)}).2j("&")}}};N.8r=D(a,b){if(!a.1A||a==b){E 17}if(a.1A==b){E 19}E N.8r(a.1A,b)};N.ai=D(b,c,d,f){if(!b.cc()){E 1h}f=f.2f();if(c){c=[c].4h()}G g=[];$A(b.2k).1j(D(e){if(e.1N&&e.1N.2f()==f&&(!c||N.6I(e).6D(D(v){E c.24(v)}))){g.1f(e)}if(d){G a=N.ai(e,c,d,f);if(a){g.1f(a)}}});E g.Y>0?g.4h():[]};N.8C=D(a,b){E a["2E"+(b=="6X"||b=="1q"?"nj":"nk")]};if(1m 11=="1M"){2p"nl.js 9G cf 4r.9E.9F\' 22.js cg";}G 5c={};5c.2C=D(){};5c.2C.1d={cW:D(c,d,e){c=$(c);C.M=c;C.1G=$(d);C.7h=17;C.8D=17;C.3c=17;C.2q=0;C.5d=0;if(C.5P){C.5P(e)}1e{C.J=e||{}}C.J.7i=C.J.7i||C.M.3a;C.J.6r=C.J.6r||[];C.J.4u=C.J.4u||0.4;C.J.cX=C.J.cX||1;C.J.cY=C.J.cY||D(a,b){if(!b.12.1D||b.12.1D=="3k"){b.12.1D="3k";1x.3W(a,b,{c2:17,53:a.3j})}11.9K(b,{2o:0.15})};C.J.cZ=C.J.cZ||D(a,b){18 11.cj(b,{2o:0.15})};if(1m C.J.6r=="2J"){C.J.6r=18 1V(C.J.6r)}C.7f=1h;C.M.7j("hg","nm");N.1Z(C.1G);1a.21(C.M,"fr",C.hh.2P(C));1a.21(C.M,"89",C.hi.2P(C));1a.21(1p,"nn",D(){c.7j("hg","5R")})},2w:D(){if(N.1v(C.1G,"3i")=="43"){C.J.cY(C.M,C.1G)}if(!C.5F&&1k.1X.4c&&N.1v(C.1G,"1D")=="3k"){18 2M.bG(C.1G,"<hj id=\\""+C.1G.id+"hk\\" "+"12=\\"3i:43;1D:3k;7V:np:nq.ed.nr(2d=0);\\" "+"4X=\\"b7:17;\\" ns=\\"0\\" nt=\\"no\\"></hj>");C.5F=$(C.1G.id+"hk")}if(C.5F){3D(C.hl.1o(C),50)}},hl:D(){1x.3W(C.1G,C.5F,{c1:!C.1G.12.1q});C.5F.12.8o=1;C.1G.12.8o=2;N.2w(C.5F)},1Z:D(){C.d0();if(N.1v(C.1G,"3i")!="43"){C.J.cZ(C.M,C.1G)}if(C.5F){N.1Z(C.5F)}},hm:D(){if(C.J.aj){N.2w(C.J.aj)}},d0:D(){if(C.J.aj){N.1Z(C.J.aj)}},hi:D(a){if(C.3c){4N(a.8y){1F 1a.bV:1F 1a.bW:C.ak();1a.2I(a);1F 1a.bX:C.1Z();C.3c=17;1a.2I(a);E;1F 1a.fy:1F 1a.fA:E;1F 1a.fz:C.hn();C.4G();if(1k.1X.3U){1a.2I(a)}E;1F 1a.fB:C.ho();C.4G();if(1k.1X.3U){1a.2I(a)}E;60:}}1e if(a.8y==1a.bV||a.8y==1a.bW||1k.1X.3U>0&&a.8y==0){E}C.8D=19;C.7h=19;if(C.7f){9a(C.7f)}C.7f=3D(C.hp.1o(C),C.J.4u*2Q)},5t:D(){C.8D=17;C.7h=19;C.al()},5A:D(a){G b=1a.5m(a,"cb");if(C.2q!=b.am){C.2q=b.am;C.4G()}1a.2I(a)},hq:D(a){G b=1a.5m(a,"cb");C.2q=b.am;C.ak();C.1Z()},hh:D(a){3D(C.1Z.1o(C),nu);C.7h=17;C.3c=17},4G:D(){if(C.5d>0){1g(G i=0;i<C.5d;i++){C.2q==i?N.4z(C.6s(i),"6a"):N.5X(C.6s(i),"6a")}if(C.7h){C.2w();C.3c=19}}1e{C.3c=17;C.1Z()}},hn:D(){if(C.2q>0){C.2q--}1e{C.2q=C.5d-1}C.6s(C.2q).hr(19)},ho:D(){if(C.2q<C.5d-1){C.2q++}1e{C.2q=0}C.6s(C.2q).hr(17)},6s:D(a){E C.1G.4y.2k[a]},hs:D(){E C.6s(C.2q)},ak:D(){C.3c=17;C.an(C.hs())},an:D(a){if(C.J.an){C.J.an(a);E}G b="";if(C.J.2B){G c=1c.6H(C.J.2B,a)||[];if(c.Y>0){b=N.9I(c[0],C.J.2B)}}1e{b=N.9J(a,"nv")}G d=C.d1();if(d!=-1){G e=C.M.1l.5e(0,d+1);G f=C.M.1l.5e(d+1).1w(/^\\s+/);if(f){e+=f[0]}C.M.1l=e+b}1e{C.M.1l=b}C.M.6V();if(C.J.ht){C.J.ht(C.M,a)}},d2:D(a){if(!C.8D&&C.7h){C.1G.2r=a;N.6J(C.1G);N.6J(C.1G.32());if(C.1G.4y&&C.1G.32().2k){C.5d=C.1G.32().2k.Y;1g(G i=0;i<C.5d;i++){G b=C.6s(i);b.am=i;C.hu(b)}}1e{C.5d=0}C.d0();C.2q=0;if(C.5d==1&&C.J.nw){C.ak();C.1Z()}1e{C.4G()}}},hu:D(a){1a.21(a,"8E",C.5A.2P(C));1a.21(a,"6W",C.hq.2P(C))},hp:D(){C.8D=17;if(C.ao().Y>=C.J.cX){C.al()}1e{C.3c=17;C.1Z()}},ao:D(){G a=C.d1();if(a!=-1){G b=C.M.1l.5e(a+1).1I(/^\\s+/,"").1I(/\\s+$/,"")}1e{G b=C.M.1l}E/\\n/.41(b)?"":b},d1:D(){G a=-1;1g(G i=0;i<C.J.6r.Y;i++){G b=C.M.1l.dY(C.J.6r[i]);if(b>a){a=b}}E a}};1t.5c=1H.1E();V.O(V.O(1t.5c.1d,5c.2C.1d),{1Q:D(a,b,c,d){C.cW(a,b,d);C.J.5Q=19;C.J.2g=C.2g.1o(C);C.J.d3=C.J.3h||1h;C.31=c},al:D(){C.hm();G a=4R(C.J.7i)+"="+4R(C.ao());C.J.3h=C.J.3d?C.J.3d(C.M,a):a;if(C.J.d3){C.J.3h+="&"+C.J.d3}18 1t.4S(C.31,C.J)},2g:D(a){C.d2(a.5S)}});5c.hv=1H.1E();5c.hv.1d=V.O(18 5c.2C,{1Q:D(a,b,c,d){C.cW(a,b,d);C.J.6C=c},al:D(){C.d2(C.J.67(C))},5P:D(h){C.J=V.O({d4:10,hw:19,hx:2,d5:19,hy:17,67:D(a){G b=[];G c=[];G d=a.ao();G e=0;1g(G i=0;i<a.J.6C.Y&&b.Y<a.J.d4;i++){G f=a.J.6C[i];G g=a.J.d5?f.2s().2y(d.2s()):f.2y(d);1R(g!=-1){if(g==0&&f.Y!=d.Y){b.1f("<li><ap>"+f.5e(0,d.Y)+"</ap>"+f.5e(d.Y)+"</li>");1B}1e if(d.Y>=a.J.hx&&a.J.hw&&g!=-1){if(a.J.hy||/\\s/.41(f.5e(g-1,1))){c.1f("<li>"+f.5e(0,g)+"<ap>"+f.5e(g,d.Y)+"</ap>"+f.5e(g+d.Y)+"</li>");1B}}g=a.J.d5?f.2s().2y(d.2s(),g+1):f.2y(d,g+1)}}if(c.Y){b=b.2e(c.3x(0,a.J.d4-b.Y))}E"<cT>"+b.2j("")+"</cT>"}},h||{})}});87.d6=D(a){3D(D(){87.5t(a)},1)};1t.8F=1H.1E();1t.8F.hz="#nx";1t.8F.1d={1Q:D(c,d,e){C.31=d;C.M=$(c);C.J=V.O({7i:"1l",d7:19,d8:17,aq:"hA",d9:17,da:19,db:"72",dc:"",dd:"",de:"",hB:"ny...",hC:"nz 3o nA",aq:"hA",ar:1,2g:D(a,b){18 11.9S(b,{9T:C.J.8G})},6t:D(a){nB("e2 nC 5K fV nD: "+a.5S.8V())},3d:D(a){E 1y.4E(a)},hD:19,hE:"eg...",df:"as-7k",dg:"as-nE",hF:"as-1U",8G:1t.8F.hz,hG:"#nF",2V:1h,dh:17,at:{},4P:17},e||{});if(!C.J.8H&&C.M.id){C.J.8H=C.M.id+"-as";if($(C.J.8H)){C.J.8H=1h}}if(C.J.2V){C.J.2V=$(C.J.2V)}C.7l=N.1v(C.M,"9U-57");if(!C.7l){C.7l="gK"}C.M.bq=C.J.hC;C.8I=C.hH.2P(C);C.8J=C.hI.2P(C);C.8K=C.au.2P(C);1a.21(C.M,"6W",C.8I);1a.21(C.M,"8E",C.8J);1a.21(C.M,"av",C.8K);if(C.J.2V){1a.21(C.J.2V,"6W",C.8I);1a.21(C.J.2V,"8E",C.8J);1a.21(C.J.2V,"av",C.8K)}},hH:D(a){if(C.7k){E}if(C.di){E}C.di=19;C.hJ();if(C.J.2V){N.1Z(C.J.2V)}N.1Z(C.M);C.hK();C.M.1A.4Y(C.1U,C.M);if(!C.J.8L){87.d6(C.4q)}if(a){1a.2I(a)}E 17},hK:D(){C.1U=1c.23("1U");C.1U.id=C.J.8H;N.4z(C.1U,C.J.hF);C.1U.nG=C.8M.1o(C);C.dj();if(C.J.69){G a=1c.23("br");C.1U.25(a)}if(C.J.dc){C.1U.25(1c.4Q(C.J.dc))}if(C.J.d7){G b=1c.23("68");b.1O="bS";b.1l=C.J.aq;b.2v="nH";C.1U.25(b)}if(C.J.d8){G c=1c.23("a");c.bt="#";c.25(1c.4Q(C.J.aq));c.dk=C.8M.1o(C);c.2v="nI";C.1U.25(c)}if(C.J.dd&&(C.J.d8||C.J.d7)&&(C.J.da||C.J.d9)){C.1U.25(1c.4Q(C.J.dd))}if(C.J.d9){G d=1c.23("68");d.1O="bS";d.1l=C.J.db;d.dk=C.dl.1o(C);d.2v="nJ";C.1U.25(d)}if(C.J.da){G e=1c.23("a");e.bt="#";e.25(1c.4Q(C.J.db));e.dk=C.dl.1o(C);e.2v="nK nL";C.1U.25(e)}if(C.J.de){C.1U.25(1c.4Q(C.J.de))}},hL:D(a){if(!C.J.hD){E 17}E a.1w(/<br/i)||a.1w(/<p>/i)},hM:D(a){E a.1I(/<br>/gi,"\\n").1I(/<br\\/>/gi,"\\n").1I(/<\\/p>/gi,"\\n").1I(/<p>/gi,"")},dj:D(){G a;if(C.J.8L){a=C.J.hE}1e{a=C.hN()}G b=C;if(C.J.ar==1&&!C.hL(a)){C.J.69=17;G c=1c.23("68");c.hO=C;c.1O="3Y";c.3a=C.J.7i;c.1l=a;c.12.58=C.J.8G;c.2v="hP";G d=C.J.7F||C.J.dm||0;if(d!=0){c.7F=d}if(C.J.dh){c.hQ=C.8M.1o(C)}C.4q=c}1e{C.J.69=19;G e=1c.23("69");e.hO=C;e.3a=C.J.7i;e.1l=C.hM(a);e.ar=C.J.ar;e.dm=C.J.dm||40;e.2v="hP";if(C.J.dh){e.hQ=C.8M.1o(C)}C.4q=e}if(C.J.8L){C.dn()}C.1U.25(C.4q)},hN:D(){E C.M.2r},dn:D(){N.4z(C.1U,C.J.dg);C.4q.2x=19;18 1t.4S(C.J.8L,V.O({5Q:19,2g:C.hR.1o(C)},C.J.at))},hR:D(a){N.5X(C.1U,C.J.dg);C.4q.2x=17;C.4q.1l=a.5S.8V();87.d6(C.4q)},dl:D(){C.2g();C.aw();E 17},6t:D(a){C.J.6t(a);if(C.6u){C.M.2r=C.6u;C.6u=1h}E 17},8M:D(){G a=C.1U;G b=C.4q.1l;C.hS();if(C.J.4P){18 1t.4S(C.31,V.O({3h:C.J.3d(a,b),2g:C.2g.1o(C),6t:C.6t.1o(C),5Q:19,4P:19},C.J.at))}1e{18 1t.99({4T:C.M,7J:1h},C.31,V.O({3h:C.J.3d(a,b),2g:C.2g.1o(C),6t:C.6t.1o(C)},C.J.at))}if(1b.Y>1){1a.2I(1b[0])}E 17},hS:D(){C.7k=19;C.dp();C.au();C.hT()},hT:D(){C.6u=C.M.2r;C.M.2r=C.J.hB;N.4z(C.M,C.J.df);C.M.12.58=C.7l;N.2w(C.M)},dp:D(){if(C.1U){if(C.1U.1A){N.3C(C.1U)}C.1U=1h}},hI:D(){if(C.7k){E}C.M.12.58=C.J.8G;if(C.6Z){C.6Z.72()}N.4z(C.M,C.J.hU)},au:D(){if(C.J.58){C.M.12.58=C.nM}N.5X(C.M,C.J.hU);if(C.7k){E}C.6Z=18 11.9S(C.M,{9T:C.J.8G,9V:C.J.hG,9W:C.7l})},aw:D(){N.5X(C.M,C.J.df);C.dp();C.au();C.M.12.58=C.7l;N.2w(C.M);if(C.J.2V){N.2w(C.J.2V)}C.di=17;C.7k=17;C.6u=1h;C.hV()},2g:D(a){C.aw();C.J.2g.1o(C)(a,C.M)},hJ:D(){},hV:D(){},hW:D(){if(C.6u){C.M.2r=C.6u}C.aw();1a.2D(C.M,"6W",C.8I);1a.2D(C.M,"8E",C.8J);1a.2D(C.M,"av",C.8K);if(C.J.2V){1a.2D(C.J.2V,"6W",C.8I);1a.2D(C.J.2V,"8E",C.8J);1a.2D(C.J.2V,"av",C.8K)}}};1t.dq=1H.1E();V.O(1t.dq.1d,1t.8F.1d);V.O(1t.dq.1d,{dj:D(){if(!C.dr){G c=1c.23("2B");G d=C.J.nN||[];G f;d.1j((D(e,i){f=1c.23("nO");f.1l=e 4s 1V?e[0]:e;if(1m C.J.1l=="1M"&&(e 4s 1V?C.M.2r==e[1]:e==f.1l)){f.6a=19}if(C.J.1l==f.1l){f.6a=19}f.25(1c.4Q(e 4s 1V?e[1]:e));c.25(f)}).1o(C));C.dr=c}C.4q=C.dr;if(C.J.8L){C.dn()}C.1U.25(C.4q);C.J.3d=D(a,b){E"1l="+4R(b)}}});1y.N.hX=1H.1E();1y.N.hX.1d={1Q:D(a,b,c){C.3P=b||0.5;C.M=$(a);C.3d=c;C.4g=1h;C.3m=$F(C.M);1a.21(C.M,"nP",C.hY.2P(C))},hY:D(a){if(C.3m==$F(C.M)){E}if(C.4g){9a(C.4g)}C.4g=3D(C.4O.1o(C),C.3P*2Q);C.3m=$F(C.M)},4O:D(){C.4g=1h;C.3d(C.M,$F(C.M))}};if(!ax){G ax={}}ax.hZ=1H.1E();ax.hZ.1d={1Q:D(a,b,c){G d=C;if(a 4s 1V){C.2h=a.7B(D(e){E $(e)})}1e{C.2h=[$(a)]}C.2c=$(b);C.J=c||{};C.ds=C.J.ds||"9C";C.i0=C.J.i0||1;C.i1=3O(C.J.i1||"1");C.28=C.J.28||$R(0,1);C.1l=0;C.29=C.2h.1P(D(){E 0});C.6v=C.J.6v?C.J.6v.1P(D(s){E $(s)}):17;C.J.ay=$(C.J.ay||1h);C.J.az=$(C.J.az||1h);C.dt=C.J.dt||17;C.aA=C.J.aA||C.28.3g;C.du=C.J.du||C.28.1S;C.dv=3O(C.J.dv||"0");C.8N=3O(C.J.8N||"0");C.dw=C.i2()-C.i3();C.aB=C.5G()?C.2h[0].3j!=0?C.2h[0].3j:C.2h[0].12.1q.1I(/1K$/,""):C.2h[0].3I!=0?C.2h[0].3I:C.2h[0].12.1C.1I(/1K$/,"");C.3c=17;C.4a=17;C.2x=17;if(C.J.2x){C.i4()}C.4b=C.J.29?C.J.29.aU(1k.K):17;if(C.4b){C.du=C.4b.7D();C.aA=C.4b.5L()}C.5C=C.ae.2P(C);C.77=C.78.2P(C);C.79=C.1G.2P(C);C.2h.1j(D(h,i){i=d.2h.Y-1-i;d.8O(3H((d.J.dx 4s 1V?d.J.dx[i]:d.J.dx)||d.28.1S),i);N.3J(h);1a.21(h,"7d",d.5C)});1a.21(C.2c,"7d",C.5C);1a.21(1c,"a8",C.77);1a.21(1c,"a9",C.79);C.aC=19},hW:D(){G a=C;1a.2D(C.2c,"7d",C.5C);1a.2D(1c,"a8",C.77);1a.2D(1c,"a9",C.79);C.2h.1j(D(h){1a.2D(h,"7d",a.5C)})},i4:D(){C.2x=19},nQ:D(){C.2x=17},i5:D(b){if(C.4b){if(b>=C.4b.5L()){E C.4b.5L()}if(b<=C.4b.7D()){E C.4b.7D()}G c=1T.aa(C.4b[0]-b);G d=C.4b[0];C.4b.1j(D(v){G a=1T.aa(v-b);if(a<=c){d=v;c=a}});E d}if(b>C.28.3g){E C.28.3g}if(b<C.28.1S){E C.28.1S}E b},8O:D(a,b){if(!C.3c){C.7m=b||0;C.7n=C.2h[C.7m];C.dy()}b=b||C.7m||0;if(C.aC&&C.dt){if(b>0&&a<C.29[b-1]){a=C.29[b-1]}if(b<C.2h.Y-1&&a>C.29[b+1]){a=C.29[b+1]}}a=C.i5(a);C.29[b]=a;C.1l=C.29[0];C.2h[b].12[C.5G()?"1r":"1s"]=C.7o(a);C.i6();if(!C.4a||!C.4f){C.dz()}},nR:D(a,b){C.8O(C.29[b||C.7m||0]+a,b||C.7m||0)},7o:D(a){E 1T.3p((C.dw-C.aB)/(C.28.3g-C.28.1S)*(a-C.28.1S))+"1K"},dA:D(a){E a/(C.dw-C.aB)*(C.28.3g-C.28.1S)+C.28.1S},aD:D(a){G v=C.29.aU(1k.K);a=a||0;E $R(v[a],v[a+1])},i3:D(){E C.5G()?C.8N:C.dv},i2:D(){E C.5G()?(C.2c.3j!=0?C.2c.3j:C.2c.12.1q.1I(/1K$/,""))-C.8N:(C.2c.3I!=0?C.2c.3I:C.2c.12.1C.1I(/1K$/,""))-C.8N},5G:D(){E C.ds=="6X"},i6:D(){G a=C;if(C.6v){$R(0,C.6v.Y-1).1j(D(r){a.aE(a.6v[r],a.aD(r))})}if(C.J.ay){C.aE(C.J.ay,$R(0,C.29.Y>1?C.aD(0).7D():C.1l))}if(C.J.az){C.aE(C.J.az,$R(C.29.Y>1?C.aD(C.6v.Y-1).5L():C.1l,C.aA))}},aE:D(a,b){if(C.5G()){a.12.1r=C.7o(b.1S);a.12.1q=C.7o(b.3g-b.1S+C.28.1S)}1e{a.12.1s=C.7o(b.1S);a.12.1C=C.7o(b.3g-b.1S+C.28.1S)}},dy:D(){C.2h.1j(D(h){N.5X(h,"6a")});N.4z(C.7n,"6a")},ae:D(a){if(1a.bY(a)){if(!C.2x){C.3c=19;G b=1a.M(a);G c=[1a.6b(a),1a.6c(a)];G d=b;if(d==C.2c){G e=1x.3G(C.2c);C.4f=a;C.8O(C.dA((C.5G()?c[1]-e[1]:c[0]-e[0])-C.aB/2));G e=1x.3G(C.7n);C.dB=c[0]-e[0];C.dC=c[1]-e[1]}1e{1R(C.2h.2y(b)==-1&&b.1A){b=b.1A}if(C.2h.2y(b)!=-1){C.7n=b;C.7m=C.2h.2y(C.7n);C.dy();G e=1x.3G(C.7n);C.dB=c[0]-e[0];C.dC=c[1]-e[1]}}}1a.2I(a)}},1G:D(a){if(C.3c){if(!C.4a){C.4a=19}C.8w(a);if(1k.1X.3U){1p.cd(0,0)}1a.2I(a)}},8w:D(a){G b=[1a.6b(a),1a.6c(a)];G c=1x.3G(C.2c);b[0]-=C.dB+c[0];b[1]-=C.dC+c[1];C.4f=a;C.8O(C.dA(C.5G()?b[1]:b[0]));if(C.aC&&C.J.i7){C.J.i7(C.29.Y>1?C.29:C.1l,C)}},78:D(a){if(C.3c&&C.4a){C.8x(a,19);1a.2I(a)}C.3c=17;C.4a=17},8x:D(a,b){C.3c=17;C.4a=17;C.dz()},dz:D(){if(C.aC&&C.J.5a){C.J.5a(C.29.Y>1?C.29:C.1l,C)}C.4f=1h}};6w={4o:{},aF:19,7A:18 2Y("<nS 12=\\"1q:0\\" id=\\"aG#{2c}3Z#{id}\\" 4X=\\"#{31}\\" 71=\\"17\\" i8=\\"19\\" 5n=\\"19\\"/>"),9y:D(){6w.aF=19},9x:D(){6w.aF=17},cD:D(c){if(!6w.aF){E}G d=V.O({2c:"8g",31:c,1I:17},1b[1]||{});if(d.1I&&C.4o[d.2c]){$R(0,C.4o[d.2c].id).1j(D(a){G b=$("aG"+d.2c+"3Z"+a);b.i9&&b.i9();b.3C()});C.4o[d.2c]=1h}if(!C.4o[d.2c]){C.4o[d.2c]={id:0}}1e{C.4o[d.2c].id++}d.id=C.4o[d.2c].id;if(1k.1X.4c){G e=1c.23("nT");e.7j("id","aG"+d.2c+"3Z"+d.id);e.7j("4X",d.31);e.7j("71","1");e.7j("i8","19");$$("26")[0].25(e)}1e{18 2M.bF($$("26")[0],6w.7A.3u(d))}}};if(1k.1X.7r&&5f.6x.2y("nU")>0){if(5f.ia&&$A(5f.ia).6D(D(p){E p.3a.2y("nV")!=-1})){6w.7A=18 2Y("<3X id=\\"aG#{2c}3Z#{id}\\" 1C=\\"0\\" 1q=\\"0\\" 1O=\\"nW/nX\\" dO=\\"#{31}\\"/>")}1e{6w.cD=D(){}}}8e.c5();',62,1486,'||||||||||||||||||||||||||||||||||||||this|function|return||var|||options|||element|Element|extend|||||||Object|||length|||Effect|style||node|||false|new|true|Event|arguments|document|prototype|else|push|for|null|Selector|each|Prototype|value|typeof|results|bind|window|height|top|left|Ajax|Methods|getStyle|match|Position|Form|Sortable|parentNode|break|width|position|create|case|update|Class|replace|setStyle|px|scroll|undefined|tagName|type|map|initialize|while|start|Math|form|Array|Draggables|Browser|child|hide||observe|effects|createElement|include|appendChild|body||range|values|nth|afterFinishInternal|track|opacity|concat|toUpperCase|onComplete|handles|inspect|join|childNodes|transport|handlers||duration|throw|index|innerHTML|toLowerCase|pseudos|last|className|show|disabled|indexOf|try|String|select|Base|stopObserving|offset|xpath|handle|catch|stop|string|Hash|table|Insertion|of|div|bindAsEventListener|1000|method|observers|valueL|transform|externalControl|Abstract|toJSON|Template|from||url|down||||||||name|scrollSpeed|active|callback|RegExp|Enumerable|end|parameters|display|offsetHeight|absolute|getValue|lastValue|documentElement|to|round|sync|Move|moveY|tree|evaluate|toString|gsub|slice|toArray|continue|_each|first|remove|setTimeout|getElementsByTagName|nodeType|cumulativeOffset|parseFloat|offsetWidth|makePositioned|bottom|100|scrollTop|overlap|parseInt|delay|queue|transition|Scale|Droppables|WebKit|apply|clone|object|text|_||test|add|none|only|scrollLeft||Transitions|restoreAfterFinish|scrollSensitivity|dragging|allowedValues|IE|opera|emptyFunction|event|timer|flatten|key|matcher|findElements|Opacity|dims|originalValue|tracks|last_active|editField|script|instanceof|args|frequency|stripScripts|inject|split|firstChild|addClassName|undoPositioned|makeClipping|undoClipping|_counted|serialize|offsetParent|render|scaleX|scaleContent|unit|hoverclass|activeDraggable|_lastScrollPointer|switch|onTimerEvent|evalScripts|createTextNode|encodeURIComponent|Request|success|ByTag|clientHeight|hasAttribute|src|insertBefore|attr||not|prepare|offsetTop|Builder|getInlineOpacity|scaleMode|color|backgroundColor|snap|onChange|_marker|Autocompleter|entryCount|substr|navigator|toPaddedString|source|strip|nodeValue|constructor|container|findElement|hidden|tbody|expression|descendant|sibling|unmark|activate|EventObserver|offsetLeft|parseColor|startOn|finishOn|drop|onHover|Draggable|eventMouseDown|ghosting|format|iefix|isVertical|BrowserFeatures|registerCallback|charAt|with|max|pluck|reverse|toQueryString|setOptions|asynchronous|on|responseText|decay|attribute|nextSibling|getDimensions|removeClassName|visibility|right|default|checked|_cache|formula|mark|children||selector|input|textarea|selected|pointerX|pointerY|fontSize|sinoidal|beforeSetup|setup|finish|Parallel|scaleFrom|initialMoveY|targetValue|containment|reverteffect|endeffect|zindex|constraint|tokens|getEntry|onFailure|oldInnerHTML|spans|Sound|userAgent|Number|toColorPart|camelize|substring|array|detect|reject|Responders|get|getElementsByClassName|classNames|cleanWhitespace|setOpacity|relative|_overflow|TBODY|TR|Heading|insertContent|initializeRange|ps|adjacent|getElements|focus|click|vertical|_elementDoesNotExistError|effect|state|loop|cancel|delta|drops||drags|eventMouseUp|endDrag|eventMouseMove|_lastPointer|quiet|starteffect|mousedown|tag_name|observer|tag|hasFocus|paramName|setAttribute|saving|originalBackground|activeHandleIdx|activeHandle|translateToPx|Version|attachEvent|Gecko|ElementExtensions|HTMLElement|__proto__|Date|eval|escapeHTML|len|empty|template|collect|invoke|min|criteria|size|responders|post|dispatchException|failure|elements|contains|class|cache|removeChild|nextSiblings|previousElementSibling|nextElementSibling|scrollTo|getOpacity|clientWidth|filter|THEAD|TD|_flag|content|following|laterSibling|attrPresence|pseudo|nodeClassName|reset|Serializers|Field|change|keypress|deltaX|deltaY|xcomp|ycomp|Scriptaculous|scope|global|interval|codeForEvent|pos|originalLeft|originalTop|scaleY|cssRules|zIndex|_containers|accept|isParent|deactivate|_timeout|notify|_dragging|draw|finishDrag|keyCode|sortables|droppables|treeTag|offsetSize|changed|mouseover|InPlaceEditor|highlightcolor|formId|onclickListener|mouseoverListener|mouseoutListener|loadTextURL|onSubmit|alignY|setValue|ScriptFragment|shift|times|currentlyExecuting|setInterval|callee|stripTags|toQueryParams|evalJSON|pattern|findAll|call|delete|ObjectRange|register|dispatch|onCreate|request|status|json|Updater|clearTimeout|Simulated|visible|recursivelyCollect|_attributeTranslations|names|ClassNames|descendantOf|cssFloat|auto|overflow|currentStyle|alpha|depth|tr|_getAttr|TEXTAREA|copy|HTML|patterns|operators|count|nodeIndex|disable|enable|TimedObserver|Observer|BODY|horizontal|page|aculo|us|requires|_isStringOrNumber|collectTextNodes|collectTextNodesIgnoreClass|Appear|Queues|instances|Internal|property|scaleFromCenter|originalHeight|originalWidth|Highlight|startcolor|background|endcolor|restorecolor|direction|center|moveTransition|scaleTransition|opacityTransition|Morph|transforms|styleRules|deepest|updateDrag|keyPress|mouseup|mousemove|abs|_opacity|currentDelta|destroy|startDrag|_clone|_getWindowScroll|scrollInterval|findChildren|indicator|selectEntry|getUpdatedChoices|autocompleteIndex|updateElement|getToken|strong|okText|rows|inplaceeditor|ajaxOptions|leaveHover|mouseout|leaveEditMode|Control|startSpan|endSpan|maximum|handleLength|initialized|getRange|setSpan|_enabled|sound_|Opera|XPath|SpecificElementExtensions|ownerDocument|keys|succ|clearInterval|interpret|prepareReplacement|capitalize|unfilterJSON|slices|falses|sortBy|_reverse|without|Test|getTransport|activeRequestCount|unregister|application|encoding|Complete|_complete|respondToReadyState|onStateChange|javascript|getHeader|updater|_getElementsByXPath|findOrStore|toggle|outerHTML|selectNodeContents|previousSiblings|previousSibling|findChildElements|readAttribute|hasClassName|float|styleFloat|00001|static|_madePositioned|_getStyle|title||specified|href|addMethods|INPUT|SELECT|OPTGROUP|CAPTION|COL|COLGROUP|TableSection|TFOOT|TH|adjacency|Bottom|After|set|unique|or|preceding|and|predicate|fragment|indexed|number|matchingInputs|button|submit|optionValue|onElementEvent|KEY_TAB|KEY_RETURN|KEY_ESC|isLeftClick|realOffset|within|setTop|setHeight|absolutize|REQUIRED_PROTOTYPE|load|convertVersionString|OPTION|_children|_text|ATTR_MAP|LI|hasChildNodes|scrollBy|forceRerendering|including|library|zoom|PAIRS|Fade|limit|cos||PI|ScopedQueue|idle|currentFrame|afterSetup|afterFinish|frame|box|originalStyle|oldStyle|_base|innerHeight|scrollStart|0px|parseStyle|ids|play|treeNode|isAffected|eventKeypress|_cacheObserverCallbacks|onStart|onEnd|onDrag|revert|_isScrollChild|originalScrollLeft|originalScrollTop|stopScrolling|lastScrolled|SortableObserver|draggables|ul|_tree|parent|baseInitialize|minChars|onShow|onHide|stopIndicator|findLastToken|updateChoices|defaultParams|choices|ignoreCase|scrollFreeActivate|okButton|okLink|cancelButton|cancelLink|cancelText|textBeforeControls|textBetweenControls|textAfterControls|savingClassName|loadingClassName|submitOnBlur|editing|createEditField|onclick|onclickCancel|cols|loadExternalText||removeForm|InPlaceCollectionEditor|cached_selectTag|axis|restricted|minimum|alignX|trackLength|sliderValue|updateStyles|updateFinished|translateToValue|offsetX|offsetY|KHTML|JSONFilter|Function|Try|these|PeriodicalExecuter|specialChar|sub|scan|img|extractScripts|data|unescapeHTML|decodeURIComponent|fromCharCode|charCodeAt|dasherize|isJSON|JSON|startsWith|endsWith|lastIndexOf|blank|amp|Pattern|Error|eachSlice|find|clear|arrayLength|merge|addPair|exclusive|XMLHttpRequest|ActiveXObject|XMLHTTP|Microsoft|contentType|Events|Loading|onreadystatechange|setRequestHeaders|overrideMimeType|readyState|xml|||Content|2005|requestHeaders|200|evalResponse|onException|updateContent|insertion|PeriodicalUpdater||updateComplete|lastText|_extended|createRange|createContextualFragment|ancestors|descendants|firstDescendant|immediateDescendants|attributes|getAttribute|childOf|td|readonly|cssText|getAttributeNode|multiple|FORM|findDOMClass|FIELDSET|UL|OL|DL|DIR|H1|H2|H3|H4|H5|H6|INS|Mod|DEL|IMG|TableCol|TableCell|FRAMESET|IFRAME|insertAdjacentHTML|contentFromAnonymousTable|Before|Top|collapse|compileMatcher|compileXPathMatcher|root|local|enabled|even|odd|byClassName|getIndices|matchElements|serializeElements|findFirstElement|blur|checkbox|radio|inputSelector|selectOne|selectMany|registerFormCallbacks|KEY_LEFT|KEY_UP|KEY_RIGHT|KEY_DOWN|which|preventDefault|_observeAndCache|addEventListener|unloadCache|keydown|removeEventListener|detachEvent|includeScrollOffsets|positionedOffset|withinIncludingScrolloffsets|setLeft|setWidth|_originalLeft|_originalTop|_originalWidth|_originalHeight|relativize|require|the|proto|scripta|culous|NODEMAP|AREA|LEGEND|PARAM|_attributes|BUTTON|DIV|setContentZoom|tagifyText|speed|SlideDown|SlideUp|BlindDown|BlindUp|appear|linear|flicker|pulse|floor||full|getTime|DefaultOptions|fps|fromToDelta|totalTime|totalFrames|running|beforeFinish|hasLayout||mode|scaleTo|elementPositioning|pt|fontSizeType|factor|scrollHeight|setDimensions|backgroundImage|ffffff|_delta|ScrollTo|05|afterUpdateInternal|beforeStartInternal|rules|transparent|zzzzzz|CSS_LENGTH|isNaN|Transform|addTracks|CSS_PROPERTIES|morph|effect_class|findDeepestChild|isContained|fire|onDrop|addObserver|removeObserver|Count|_draggable|initDrag|originalZ|startScrolling|onDropped|innerWidth|SERIALIZE_RULE|_findRootElement|dropOnEmpty|onUpdate|onEmptyHover|findTreeElements|after|dropmarker|_constructIndex|sequence|autocomplete|onBlur|onKeyPress|iframe|_iefix|fixIEOverlapping|startIndicator|markPrevious|markNext|onObserverEvent|onClick|scrollIntoView|getCurrentEntry|afterUpdateElement|addObservers|Local|partialSearch|partialChars|fullSearch|defaultHighlightColor|ok|savingText|clickToEditText|handleLineBreaks|loadingText|formClassName|highlightendcolor|enterEditMode|enterHover|onEnterEditMode|createForm|hasHTMLLineBreaks|convertHTMLLineBreaks|getText|obj|editor_field|onblur|onLoadedExternalText|onLoading|showSaving|hoverClassName|onLeaveEditMode|dispose|DelayedObserver|delayedListener|Slider|increment|step|maximumOffset|minimumOffset|setDisabled|getNearestValue|drawSpans|onSlide|autostart|Stop|plugins|AppleWebKit|secure||RangeError||unknown|boolean|isFinite|getFullYear|getMonth|getDate|||getHours|getMinutes|getSeconds|finally||truncate|underscore|x00|x1f|u00|Eaeflnr|SyntaxError|Badly|formed|parseQuery|deprecated|use|instead|all|any|grep|inGroupsOf|partition|sort|zip|pop|member|entries|NodeList|compact|reduce|uniq|foo|bar|Msxml2|www|urlencoded|UTF|Uninitialized|Loaded|Interactive|_method|Konqueror|Safari|open|postBody|send|Requested|With|Accept|html|charset|Connection|close|setRequestHeader|300|Success|Failure|java|ecma|getResponseHeader|getElementById|XPathResult|ORDERED_NODE_SNAPSHOT_TYPE|snapshotLength|snapshotItem||replaceChild|siblings|up|previous|next|getElementsBySelector|getHeight|getWidth|toggleClassName|defaultView|getComputedStyle|block|childElements|999999|colspan|colSpan|rowspan|rowSpan|valign|vAlign|datetime|dateTime|accesskey|accessKey|tabindex|tabIndex|enctype|encType|maxlength|maxLength|readOnly|longdesc|longDesc|OptGroup|TextArea|Paragraph|FieldSet|UList|OList|DList|Directory|Quote|Anchor|Image|TableCaption|TableRow|FrameSet|IFrame|Toggle|beforeBegin|setStartBefore|afterBegin|beforeEnd|afterEnd|setStartAfter|starts|translate|mod|dis|abled|selectorType|getInputs|focusFirstElement|action|present|one|selectedIndex|KEY_BACKSPACE|KEY_DELETE|KEY_HOME|KEY_END|KEY_PAGEUP|KEY_PAGEDOWN|target|srcElement|pageX|clientX|pageY|clientY|stopPropagation|returnValue|cancelBubble|unload|pageXOffset|pageYOffset|1_beta3|write|100000|JavaScript|framework|fieldset|htmlFor|quot|build|dump|ABBR|ACRONYM|ADDRESS|APPLET|BASE|BASEFONT|BDO|BIG|BLOCKQUOTE|BR|CENTER|CITE|CODE|DD||DFN|DT|EM||FONT|FRAME|HEAD|HR|ISINDEX|KBD|LABEL|LINK|MAP|MENU||META|NOFRAMES|NOSCRIPT|OBJECT|PRE|SAMP|SCRIPT|SMALL|SPAN|STRIKE|STRONG|STYLE|SUB|SUP|TABLE|TITLE|TT|VAR|rgb|ElementDoesNotExistError|message|The|DOM|does|exist|but|required|operate|builder|span|160|slide|blind|Effect2|random|wobble|front|Queue|parallel|beforeUpdate|afterUpdate|beforeStart|finished|MoveBy|font|scrollWidth|ffff99|keepBackgroundImage|image|Puff|beforeSetupInternal|SwitchOff|DropOut|Shake||Squish|Grow|01|Shrink|Pulsate|pulses|Fold|styleSheets|selectorText|rgba|backgroundPosition|borderBottomColor|borderBottomStyle|borderBottomWidth|borderLeftColor|borderLeftStyle|borderLeftWidth|borderRightColor|borderRightStyle|borderRightWidth|borderSpacing|borderTopColor|borderTopStyle|borderTopWidth|clip|fontWeight|letterSpacing|lineHeight|marginBottom|marginLeft|marginRight|marginTop|markerOffset|maxHeight|maxWidth|minHeight|minWidth|outlineColor|outlineOffset|outlineWidth|paddingBottom|paddingLeft|paddingRight|paddingTop|textIndent|wordSpacing|pc|visualEffect|dragdrop|greedy|sqrt|02|cloneNode|Za|z0|before|item|setSequence|Height|Width|controls|off|beforeunload||progid|DXImageTransform|Alpha|frameborder|scrolling|250|informal|autoSelect|FFFF99|Saving|Click|edit|alert|communicating|server|loading|FFFFFF|onsubmit|editor_ok_button|editor_ok_link|editor_cancel_button|editor_cancel|editor_cancel_link|oldBackground|collection|option|keyup|setEnabled|setValueBy|embed|bgsound|Win|QuickTime|audio|mpeg'.split('|'),0,{}))

var Window = Class.create();
Window.prototype = {
	// Constructor
	// Available parameters : className, title, minWidth, minHeight, maxWidth, maxHeight, width, height, top, left, bottom, right, resizable, zIndex, opacity, 
	//                        hideEffect, showEffect, showEffectOptions, hideEffectOptions, effectOptions, url, draggable, closable, minimizable, maximizable, parent, onload
	initialize: function(id) {
	  if ($(id))
	    alert("Window " + id + " is already register is the DOM!!, be sure to use setDestroyOnClose()")
	    
		this.hasEffectLib = String.prototype.parseColor != null;
		this.options = Object.extend({
		  className:         "dialog",
      minWidth:          100,
      minHeight:         20,
      resizable:         true,
      closable:          true,
      minimizable:       true,
      maximizable:       true,
      draggable:         true,
      userData:          null,
      showEffect:        (this.hasEffectLib ? Effect.Appear : Element.show),
      hideEffect:        (this.hasEffectLib ? Effect.Fade : Element.hide),
      showEffectOptions: {},
      hideEffectOptions: {},
      effectOptions:     null,
      parent:            document.getElementsByTagName("body").item(0),
      title:             "&nbsp;",
      url:               null,
      onload:            Prototype.emptyFunction,
      width:             200,
      height:            300,
      opacity:           1
    }, arguments[1] || {});
    		
	  if (this.options.effectOptions) {
	    Object.extend(this.options.hideEffectOptions, this.options.effectOptions);
	    Object.extend(this.options.showEffectOptions, this.options.effectOptions);
	  }
		if (this.options.hideEffect == Element.hide)
		  this.options.hideEffect = function(){ Element.hide(this.element); if (this.destroyOnClose) this.destroy(); }.bind(this)
		  
		this.element = this._createWindow(id);
		
		// Bind event listener
    this.eventMouseDown = this._initDrag.bindAsEventListener(this);
  	this.eventMouseUp   = this._endDrag.bindAsEventListener(this);
  	this.eventMouseMove = this._updateDrag.bindAsEventListener(this);
  	this.eventKeyPress  = this._keyPress.bindAsEventListener(this);
  	this.eventOnLoad    = this._getWindowBorderSize.bindAsEventListener(this);
    this.eventMouseDownContent = this.toFront.bindAsEventListener(this);
    this.eventResize = this._recenter.bindAsEventListener(this);
 
		this.topbar = $(this.element.id + "_top");
		this.bottombar = $(this.element.id + "_bottom");
    this.content = $(this.element.id + "_content");
    
		Event.observe(this.topbar, "mousedown", this.eventMouseDown);
		Event.observe(this.bottombar, "mousedown", this.eventMouseDown);
		Event.observe(this.content, "mousedown", this.eventMouseDownContent);
		Event.observe(window, "load", this.eventOnLoad);
		Event.observe(window, "resize", this.eventResize);
  	Event.observe(window, "scroll", this.eventResize);
  	
		if (this.options.draggable)  {
			this.bottombar.addClassName("bottom_draggable");
			this.topbar.addClassName("top_draggable");
    }		
    
		if (this.options.resizable) {
			this.sizer = $(this.element.id + "_sizer");
    	Event.observe(this.sizer, "mousedown", this.eventMouseDown);
    }	
    
    this.useLeft = null;
    this.useTop = null;
		if (arguments[1].left != null) {
			this.element.setStyle({left: parseFloat(arguments[1].left) + 'px'});
			this.useLeft = true;
		}
		if (arguments[1].right != null) {
			this.element.setStyle({right: parseFloat(arguments[1].right) + 'px'});
			this.useLeft = false;
		}
    if (this.useLeft == null) {
	    this.element.setStyle({left: "0px"});
			this.useLeft = true;
    }
    
		if (arguments[1].top != null) {
			this.element.setStyle({top: parseFloat(arguments[1].top) + 'px'});
			this.useTop = true;
		}
		if (arguments[1].bottom != null) {
			this.element.setStyle({bottom: parseFloat(arguments[1].bottom) + 'px'});			
			this.useTop = false;
		}
    if (this.useTop == null) {
			this.element.setStyle({top: "0px"});
			this.useTop = true;
    }

    this.storedLocation = null;
    
		this.setOpacity(this.options.opacity);
		if (this.options.zIndex)
			this.setZIndex(this.options.zIndex)

		this.destroyOnClose = false;

    this._getWindowBorderSize();
    this.width = this.options.width;
    this.height = this.options.height;
    
    if (this.width && this.height)
		  this.setSize(this.options.width, this.options.height);
		this.setTitle(this.options.title)
		Windows.register(this);	    
  },
  
	// Destructor
 	destroy: function() {
		Windows.notify("onDestroy", this);
		
  	Event.stopObserving(this.topbar, "mousedown", this.eventMouseDown);
  	Event.stopObserving(this.bottombar, "mousedown", this.eventMouseDown);
  	Event.stopObserving(this.content, "mousedown", this.eventMouseDownContent);
    
		Event.stopObserving(window, "load", this.eventOnLoad);
		Event.stopObserving(window, "resize", this.eventResize);
  	Event.stopObserving(window, "scroll", this.eventResize);
		
		Event.stopObserving(this.content, "load", this.options.onload);

		if (this.sizer)
    		Event.stopObserving(this.sizer, "mousedown", this.eventMouseDown);

		if (this.options.url)
		  this.content.src = null

	 	if(this.iefix) 
			Element.remove(this.iefix);

    Element.remove(this.element);
		Windows.unregister(this);	    
	},
  	
	// Sets window deleagte, should have functions: "canClose(window)" 
	setDelegate: function(delegate) {
		this.delegate = delegate
	},
	
	// Gets current window delegate
	getDelegate: function() {
		return this.delegate;
	},
	
	// Gets window content
	getContent: function () {
		return this.content;
	},
	
	// Sets the content with an element id
	setContent: function(id, autoresize, autoposition) {
		var d = null;
		var p = null;

		if (autoresize) 
			d = Element.getDimensions(id);
		if (autoposition) 
			p = Position.cumulativeOffset($(id));

		var content = this.getContent()
		content.appendChild($(id));
		$(id).show();
		if (autoresize) 
			this.setSize(d.width, d.height);
		if (autoposition) 
		  this.setLocation(p[1] - this.heightN, p[0] - this.widthW);	  
	},
//Edited upsize,_ajax	
	setAjaxContent: function(url, options, showCentered, showModal,upSize) {
	  this.showFunction = showCentered ? "showCenter" : "show";
	  this.showModal = showModal || false;
//Edited
	  this.upSize = upSize || false;
	
	  if (options == null)
	    options = {}  
	  this.onComplete = options.onComplete;
	  options.onComplete = this._setAjaxContent.bind(this);
	  
	  new Ajax.Request(url, options);
	},
	
	_setAjaxContent: function(originalRequest) {
	  this.getContent().innerHTML = originalRequest.responseText;
//Edited
		if(this.upSize){
			this.updateHeight();
			this.updateWidth();
		}
	  if (this.onComplete)
	    this.onComplete(originalRequest);
	  this[this.showFunction](this.showModal)
	},
	
	// Stores position/size in a cookie, by default named with window id
	setCookie: function(name, expires, path, domain, secure) {
		name = name || this.element.id;
		this.cookie = [name, expires, path, domain, secure];
		
		// Get cookie
		var value = WindowUtilities.getCookie(name)
		// If exists
		if (value) {
			var values = value.split(',');
			var x = values[0].split(':');
			var y = values[1].split(':');

			var w = parseFloat(values[2]), h = parseFloat(values[3]);
			var mini = values[4];
			var maxi = values[5];

		  this.setSize(w, h);
			if (mini == "true")
		    this.doMinimize = true; // Minimize will be done at onload window event
			else if (maxi == "true")
			  this.doMaximize = true; // Maximize will be done at onload window event

			this.useLeft = x[0] == "l";
			this.useTop = y[0] == "t";

			this.element.setStyle(this.useLeft ? {left: x[1]} : {right: x[1]});
			this.element.setStyle(this.useTop ? {top: y[1]} : {bottom: y[1]});
		}
	},
	
	// Gets window ID
	getId: function() {
		return this.element.id;
	},
	
	// Detroys itself when closing 
	setDestroyOnClose: function() {
	  Object.extend(this.options.hideEffectOptions, {afterFinish:  this.destroy.bind(this)});
		this.destroyOnClose = true;
	},
	
	// initDrag event
	_initDrag: function(event) {
    // Get pointer X,Y
  	this.pointer = [Event.pointerX(event), Event.pointerY(event)];

    // Resize
		if (Event.element(event) == this.sizer) {
			this.doResize = true;
    	this.widthOrg = this.width;
    	this.heightOrg = this.height;
    	this.bottomOrg = parseFloat(this.element.getStyle('bottom'));
    	this.rightOrg = parseFloat(this.element.getStyle('right'));
			Windows.notify("onStartResize", this);
		}
    else {
		  this.doResize = false;

  		// Check if click on close button, 
  		var closeButton = $(this.getId() + '_close');
  		if (closeButton && Position.within(closeButton, this.pointer[0], this.pointer[1])) 
  			return;

  		this.toFront();

  		if (! this.options.draggable) 
  		  return;
  		Windows.notify("onStartMove", this);
    }  	
  	// Register global event to capture mouseUp and mouseMove
  	Event.observe(document, "mouseup", this.eventMouseUp, false);
    Event.observe(document, "mousemove", this.eventMouseMove, false);
		
  	// Add an invisible div to keep catching mouse event over iframes
  	WindowUtilities.disableScreen('__invisible__', '__invisible__');

    // Stop selection while dragging
    document.body.ondrag = function () { return false; };
    document.body.onselectstart = function () { return false; };
    
    Event.stop(event);
  },

  // updateDrag event
	_updateDrag: function(event) {
   	var pointer = [Event.pointerX(event), Event.pointerY(event)];    
		var dx = pointer[0] - this.pointer[0];
		var dy = pointer[1] - this.pointer[1];
		
		// Resize case, update width/height
		if (this.doResize) {
			this.setSize(this.widthOrg + dx , this.heightOrg + dy);
			
      dx = this.width - this.widthOrg
      dy = this.height - this.heightOrg
			
		  // Check if it's a right position, update it to keep upper-left corner at the same position
			if (! this.useLeft) 
				this.element.setStyle({right: (this.rightOrg -dx) + 'px'});
			// Check if it's a bottom position, update it to keep upper-left corner at the same position
			if (! this.useTop) 
				this.element.setStyle({bottom: (this.bottomOrg -dy) + 'px'});
		}
		// Move case, update top/left
		else {
		  this.pointer = pointer;
  		
			if (this.useLeft) 
				this.element.setStyle({left: parseFloat(this.element.getStyle('left')) + dx + 'px'});
			else 
				this.element.setStyle({right: parseFloat(this.element.getStyle('right')) - dx + 'px'});
			
			if (this.useTop) 
				this.element.setStyle({top: parseFloat(this.element.getStyle('top')) + dy + 'px'});
		  else 
				this.element.setStyle({bottom: parseFloat(this.element.getStyle('bottom')) - dy + 'px'});
		}
		if (this.iefix) 
			this._fixIEOverlapping(); 
			
		this._removeStoreLocation();
    Event.stop(event);
	},

	 // endDrag callback
 	_endDrag: function(event) {
		// Remove temporary div over iframes
 	  WindowUtilities.enableScreen('__invisible__');
		
		if (this.doResize)
			Windows.notify("onEndResize", this);
		else
			Windows.notify("onEndMove", this);
		
		// Release event observing
		Event.stopObserving(document, "mouseup", this.eventMouseUp,false);
    Event.stopObserving(document, "mousemove", this.eventMouseMove, false);

		// Store new location/size if need be
		this._saveCookie()

    Event.stop(event);
    
    // Restore selection
    document.body.ondrag = null;
    document.body.onselectstart = null;
  },

	_keyPress: function(event) {
		//Dialog.cancelCallback();
	},
	
	// Creates HTML window code
	_createWindow: function(id) {
	  var className = this.options.className;
		var win = document.createElement("div");
		win.setAttribute('id', id);
		win.className = "dialog";

		var content;
		if (this.options.url)
			content= "<iframe name=\"" + id + "_content\"  id=\"" + id + "_content\" src=\"" + this.options.url + "\"> </iframe>";
		else
			content ="<div id=\"" + id + "_content\" class=\"" +className + "_content\"> </div>";
			
		var closeDiv = this.options.closable ? "<div class='"+ className +"_close' id='"+ id +"_close' onmouseup='Windows.close(\""+ id +"\")'> </div>" : "";
		var minDiv = this.options.minimizable ? "<div class='"+ className + "_minimize' id='"+ id +"_minimize' onmouseup='Windows.minimize(\""+ id +"\")'> </div>" : "";
		var maxDiv = this.options.maximizable ? "<div class='"+ className + "_maximize' id='"+ id +"_maximize' onmouseup='Windows.maximize(\""+ id +"\")'> </div>" : "";
		var seAttributes = this.options.resizable ? "class='" + className + "_sizer' id='" + id + "_sizer'" : "class='"  + className + "_se'";
		
    win.innerHTML = closeDiv + minDiv + maxDiv + "\
      <table id='"+ id +"_row1' class=\"top table_window\">\
        <tr>\
          <td class='"+ className +"_nw'>&nbsp;</td>\
          <td class='"+ className +"_n'><div id='"+ id +"_top' class='"+ className +"_title title_window'>"+ this.options.title +"</div></td>\
          <td class='"+ className +"_ne'>&nbsp;</td>\
        </tr>\
      </table>\
      <table id='"+ id +"_row2' class=\"mid table_window\">\
        <tr>\
          <td class='"+ className +"_w'></td>\
            <td id='"+ id +"_table_content' class='"+ className +"_content' valign='top'>"+ content +"</td>\
          <td class='"+ className +"_e'></td>\
        </tr>\
      </table>\
        <table id='"+ id +"_row3' class=\"bot table_window\">\
        <tr>\
          <td class='"+ className +"_sw'>&nbsp;</td>\
            <td class='"+ className +"_s'><div id='"+ id +"_bottom' class='status_bar'>&nbsp;</div></td>\
            <td " + seAttributes + ">&nbsp;</td>\
        </tr>\
      </table>\
    ";
    
		Element.hide(win);
		this.options.parent.insertBefore(win, this.options.parent.firstChild);
		Event.observe($(id + "_content"), "load", this.options.onload);
		return win;
	},
	
	// Sets window location
	setLocation: function(top, left) {
	  if (top < 0)
	    top = 0;
    if (left < 0)
      left= 0
		this.element.setStyle({top: top + 'px'});
		this.element.setStyle({left: left + 'px'});
		this.useLeft = true;
		this.useTop = true;
	},
		
	// Gets window size
	getSize: function() {
	  return {width: this.width, height: this.height};
	},
		
	// Sets window size
	setSize: function(width, height) {    
	  width = parseFloat(width);
	  height = parseFloat(height);
	  
		// Check min and max size
		if (width < this.options.minWidth)
			width = this.options.minWidth;

		if (height < this.options.minHeight)
			height = this.options.minHeight;
			
		if (this.options. maxHeight && height > this.options. maxHeight)
			height = this.options. maxHeight;

		if (this.options. maxWidth && width > this.options. maxWidth)
			width = this.options. maxWidth;

  	this.width = width;
		this.height = height;
		this.element.setStyle({width: width + this.widthW + this.widthE + "px"})
		this.element.setStyle({height: height  + this.heightN + this.heightS + "px"})

		// Update content height
		var content = $(this.element.id + '_content')
		content.setStyle({height: height  + 'px'});
		content.setStyle({width: width  + 'px'});
	},
	
	updateHeight: function() {
    this.setSize(this.width, this.content.scrollHeight)
	},
	
	updateWidth: function() {
    this.setSize(this.content.scrollWidth, this.height)
	},
	
	// Brings window to front
	toFront: function() {
    this.setZIndex(Windows.maxZIndex + 20);
    Windows.notify("onFocus", this);
	},
	
	// Displays window modal state or not
	show: function(modal) {
		if (modal) {
			WindowUtilities.disableScreen(this.options.className, 'overlay_modal', this.getId());
			this.modal = true;			
			this.setZIndex(Windows.maxZIndex + 20);
			Windows.unsetOverflow(this);
			Event.observe(document, "keypress", this.eventKeyPress);	      	
		}
		
		// To restore overflow if need be
		if (this.oldStyle)
		  this.getContent().setStyle({overflow: this.oldStyle});
			
		if (! this.width || !this.height) {
      var size = WindowUtilities._computeSize(this.content.innerHTML, this.content.id, this.width, this.height, 0)
  		if (this.height)
  		  this.width = size + 5
		  else
		    this.height = size + 5
		}

		this.setSize(this.width, this.height);
		if (this.centered)
		  this._center(this.centerTop, this.centerLeft);		
		  
		if (this.options.showEffect != Element.show && this.options.showEffectOptions )
			this.options.showEffect(this.element, this.options.showEffectOptions);	
		else
			this.options.showEffect(this.element);	
			
    this._checkIEOverlapping();
    Windows.notify("onShow", this);    
	},
	
	// Displays window modal state or not at the center of the page
	showCenter: function(modal, top, left) {
    this.centered = true;
    this.centerTop = top;
    this.centerLeft = left;

		this.show(modal);
	},
	
	isVisible: function() {
	  return this.element.visible();
	},
	
	_center: function(top, left) {
		var windowScroll = WindowUtilities.getWindowScroll();    
		var pageSize = WindowUtilities.getPageSize();    

    if (!top)
      top = (pageSize.windowHeight - (this.height + this.heightN + this.heightS))/2;
    top += windowScroll.top
    
    if (!left)
      left = (pageSize.windowWidth - (this.width + this.widthW + this.widthE))/2;
    left += windowScroll.left 
    
    this.setLocation(top, left);
    this.toFront();
	},
	
	_recenter: function(event) {
	  if (this.modal) {
  		var pageSize = WindowUtilities.getPageSize();
  		// set height of Overlay to take up whole page and show
  		if ($('overlay_modal')) {
  		  $('overlay_modal').style.height = (pageSize.pageHeight + 'px');
  		  $('overlay_modal').style.width = (pageSize.pageWidth + 'px');
      }		
  		if (this.centered)
  		  this._center(this.centerTop, this.centerLeft);		
	  }
	},
	
	// Hides window
	hide: function() {
		if (this.modal) {
			WindowUtilities.enableScreen();
			Windows.resetOverflow();
			Event.stopObserving(document, "keypress", this.eventKeyPress);			
		}
		// To avoid bug on scrolling bar
	  this.oldStyle = this.getContent().getStyle('overflow') || "auto"
		this.getContent().setStyle({overflow: "hidden"});

		this.options.hideEffect(this.element, this.options.hideEffectOptions);	

	 	if(this.iefix) 
			this.iefix.hide();
		Windows.notify("onHide", this);
	},

  minimize: function() {
    var r2 = $(this.getId() + "_row2");
    var dh = r2.getDimensions().height;
    
    if (r2.visible()) {
      var h  = this.element.getHeight() - dh
      r2.hide()
  		this.element.setStyle({height: h + "px"})
  		if (! this.useTop) {
  		  var bottom = parseFloat(this.element.getStyle('bottom'));
			  this.element.setStyle({bottom: (bottom + dh) + 'px'});
		  }
    } 
    else {
      var h  = this.element.getHeight() + dh;
      this.element.setStyle({height: h + "px"})
  		if (! this.useTop) {
  		  var bottom = parseFloat(this.element.getStyle('bottom'));
			  this.element.setStyle({bottom: (bottom - dh) + 'px'});
		  }
      r2.show();
  		
      this.toFront();
    }
    Windows.notify("onMinimize", this);
		
    // Store new location/size if need be
		this._saveCookie()
  },
  
  maximize: function() {
    if (this.storedLocation != null) {
      this._restoreLocation();
      if(this.iefix) 
  			this.iefix.hide();
    }
    else {
      this._storeLocation();
      Windows.unsetOverflow(this);
      
      var windowScroll = WindowUtilities.getWindowScroll();
  		var pageSize = WindowUtilities.getPageSize();    

			this.element.setStyle(this.useLeft ? {left: windowScroll.left} : {right: windowScroll.left});
  		this.element.setStyle(this.useTop ? {top: windowScroll.top} : {bottom: windowScroll.top});

      this.setSize(pageSize.windowWidth - this.widthW - this.widthE, pageSize.windowHeight - this.heightN - this.heightS)
      this.toFront();
      if (this.iefix) 
  			this._fixIEOverlapping(); 
    }
		Windows.notify("onMaximize", this);

		// Store new location/size if need be
		this._saveCookie()
  },
  
  isMinimized: function() {
    var r2 = $(this.getId() + "_row2");
    return !r2.visible();
  },
  
  isMaximized: function() {
    return (this.storedLocation != null);
  },
  
	setOpacity: function(opacity) {
		if (Element.setOpacity)
			Element.setOpacity(this.element, opacity);
	},
	
	setZIndex: function(zindex) {
		this.element.setStyle({zIndex: zindex});
		Windows.updateZindex(zindex, this);
	},

  setTitle: function(newTitle) {
  	if (!newTitle || newTitle == "") 
  	  newTitle = "&nbsp;";
  	  
  	Element.update(this.element.id + '_top', newTitle);
  },

	setStatusBar: function(element) {
		var statusBar = $(this.getId() + "_bottom");

    if (typeof(element) == "object") {
      if (this.bottombar.firstChild)
        this.bottombar.replaceChild(element, this.bottombar.firstChild);
      else
        this.bottombar.appendChild(element);
    }
    else
		  this.bottombar.innerHTML = element;
	},

	_checkIEOverlapping: function() {
    if(!this.iefix && (navigator.appVersion.indexOf('MSIE')>0) && (navigator.userAgent.indexOf('Opera')<0) && (this.element.getStyle('position')=='absolute')) {
        new Insertion.After(this.element.id, '<iframe id="' + this.element.id + '_iefix" '+ 'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' + 'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
        this.iefix = $(this.element.id+'_iefix');
    }
    if(this.iefix) 
			setTimeout(this._fixIEOverlapping.bind(this), 50);
	},

	_fixIEOverlapping: function() {
	    Position.clone(this.element, this.iefix);
	    this.iefix.style.zIndex = this.element.style.zIndex - 1;
	    this.iefix.show();
	},
	
	_getWindowBorderSize: function(event) {
    // Hack to get real window border size!!
    var div = this._createHiddenDiv(this.options.className + "_n")
		this.heightN = Element.getDimensions(div).height;		
		div.parentNode.removeChild(div)

    var div = this._createHiddenDiv(this.options.className + "_s")
		this.heightS = Element.getDimensions(div).height;		
		div.parentNode.removeChild(div)

    var div = this._createHiddenDiv(this.options.className + "_e")
		this.widthE = Element.getDimensions(div).width;		
		div.parentNode.removeChild(div)

    var div = this._createHiddenDiv(this.options.className + "_w")
		this.widthW = Element.getDimensions(div).width;
		div.parentNode.removeChild(div);
		// Safari size fix
		if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
		  this.setSize(this.width, this.height);
		if (this.doMaximize)
		  this.maximize();
		if (this.doMinimize)
		  this.minimize();
  },
 
  _createHiddenDiv: function(className) {
    var objBody = document.getElementsByTagName("body").item(0);
    var win = document.createElement("div");
		win.setAttribute('id', this.element.id+ "_tmp");
		win.className = className;
		win.style.display = 'none'
		win.innerHTML = ''
		objBody.insertBefore(win, objBody.firstChild)   
		return win
  },
  
	_storeLocation: function() {
	  if (this.storedLocation == null) {
	    this.storedLocation = {useTop: this.useTop, useLeft: this.useLeft, 
	                           top: this.element.getStyle('top'), bottom: this.element.getStyle('bottom'),
	                           left: this.element.getStyle('left'), right: this.element.getStyle('right'),
	                           width: this.width, height: this.height };
	  }
	},
	
  _restoreLocation: function() {
    if (this.storedLocation != null) {
      this.useLeft = this.storedLocation.useLeft;
      this.useTop = this.storedLocation.useTop;
      
      this.element.setStyle(this.useLeft ? {left: this.storedLocation.left} : {right: this.storedLocation.right});
  		this.element.setStyle(this.useTop ? {top: this.storedLocation.top} : {bottom: this.storedLocation.bottom});
		  this.setSize(this.storedLocation.width, this.storedLocation.height);
      
		  Windows.resetOverflow();
		  this._removeStoreLocation();
    }
  },
  
  _removeStoreLocation: function() {
    this.storedLocation = null;
  },
  
  _saveCookie: function() {
    if (this.cookie) {
  		var value = "";
  		if (this.useLeft)
  			value += "l:" +  (this.storedLocation ? this.storedLocation.left : this.element.getStyle('left'))
  		else
  			value += "r:" + (this.storedLocation ? this.storedLocation.right : this.element.getStyle('right'))
  		if (this.useTop)
  			value += ",t:" + (this.storedLocation ? this.storedLocation.top : this.element.getStyle('top'))
  		else
  			value += ",b:" + (this.storedLocation ? this.storedLocation.bottom :this.element.getStyle('bottom'))
  			
  		value += "," + (this.storedLocation ? this.storedLocation.width : this.width);
  		value += "," + (this.storedLocation ? this.storedLocation.height : this.height);
  		value += "," + this.isMinimized();
  		value += "," + this.isMaximized();
  		WindowUtilities.setCookie(value, this.cookie)
    }
  }
};

// Windows containers, register all page windows
var Windows = {
  windows: [],
  observers: [],
  focusedWindow: null,
  maxZIndex: 0,

  addObserver: function(observer) {
    this.removeObserver(observer);
    this.observers.push(observer);
  },
  
  removeObserver: function(observer) {  
    this.observers = this.observers.reject( function(o) { return o==observer });
  },
  
  notify: function(eventName, win) {  //  onStartResize(), onEndResize(), onStartMove(), onEndMove(), onClose(), onDestroy(), onMinimize(), onMaximize(), onHide(), onShow(), onFocus()
    this.observers.each( function(o) {if(o[eventName]) o[eventName](eventName, win);});
  },

  // Gets window from its id
  getWindow: function(id) {
	  return this.windows.detect(function(d) { return d.getId() ==id });
  },

  // Gets the last focused window
  getFocusedWindow: function() {
	  return this.focusedWindow;
  },

  // Registers a new window (called by Windows constructor)
  register: function(win) {
    this.windows.push(win);
  },
  
  // Unregisters a window (called by Windows destructor)
  unregister: function(win) {
    this.windows = this.windows.reject(function(d) { return d==win });
  }, 

  // Closes a window with its id
  close: function(id) {
  	var win = this.getWindow(id);
  	// Asks delegate if exists
    if (win) {
	  	if (win.getDelegate() && ! win.getDelegate().canClose(win)) 
	  		return;
	      if ($(id + "_close"))
	        $(id + "_close").onclick = null;
	      if ($(id + "_minimize"))
	        $(id + "_minimize").onclick = null;	        
	      if ($(id + "_maximize"))
	        $(id + "_maximize").onclick = null;	      
	      
  			this.notify("onClose", win);
  			win.hide();
  	}
  },
  
  // Closes all windows
  closeAll: function() {  
    this.windows.each( function(w) {Windows.close(w.getId())} );
  },
  
  // Minimizes a window with its id
  minimize: function(id) {
  	var win = this.getWindow(id)
  	if (win)
  	  win.minimize();
  },
  
  // Maximizes a window with its id
  maximize: function(id) {
  	var win = this.getWindow(id)
  	if (win)
  	  win.maximize();
  },
  
  unsetOverflow: function(except) {		
  	this.windows.each(function(d) { d.oldOverflow = d.getContent().getStyle("overflow") || "auto" ; d.getContent().setStyle({overflow: "hidden"}) });
  	if (except && except.oldOverflow)
  		except.getContent().setStyle({overflow: except.oldOverflow});
  },

  resetOverflow: function() {
	  this.windows.each(function(d) { if (d.oldOverflow) d.getContent().setStyle({overflow: d.oldOverflow}) });
  },

  updateZindex: function(zindex, win) {
  	if (zindex > this.maxZIndex)
  		this.maxZIndex = zindex;
    this.focusedWindow = win;
  }
};

var Dialog = {
  dialogId: null,
 	win: null,
  onCompleteFunc: null,
  callFunc: null, 
  parameters: null, 
    
	confirm: function(content, parameters) {
	  // Get Ajax return before
	  if (typeof content != "string") {
	    Dialog._runAjaxRequest(content, parameters, Dialog.confirm);
	    return 
	  }
	  
	  parameters = parameters || {};
		var okLabel = parameters.okLabel ? parameters.okLabel : "Ok";
		var cancelLabel = parameters.cancelLabel ? parameters.cancelLabel : "Cancel";

		var windowParam = parameters.windowParameters || {};
		windowParam.className = windowParam.className || "alert";

    okButtonClass = "class ='" + (parameters.buttonClass ? parameters.buttonClass + " " : "") + " ok_button'" 
    cancelButtonClass = "class ='" + (parameters.buttonClass ? parameters.buttonClass + " " : "") + " cancel_button'" 
		var content = "\
			<div class='" + windowParam.className + "_message'>" + content  + "</div>\
				<div class='" + windowParam.className + "_buttons'>\
					<input type='button' value='" + okLabel + "' onclick='Dialog.okCallback()'" + okButtonClass + "/>\
					<input type='button' value='" + cancelLabel + "' onclick='Dialog.cancelCallback()' " + cancelButtonClass + "/>\
				</div>\
		";
	  this._openDialog(content, parameters)
	  return this.win
	},
	
	alert: function(content, parameters) {
	  // Get Ajax return before
	  if (typeof content != "string") {
	    Dialog._runAjaxRequest(content, parameters, Dialog.alert);
	    return 
	  }
	  
	  parameters = parameters || {};
		var okLabel = parameters.okLabel ? parameters.okLabel : "Ok";

		var windowParam = parameters.windowParameters || {};
		windowParam.className = windowParam.className || "alert";

    okButtonClass = "class ='" + (parameters.buttonClass ? parameters.buttonClass + " " : "") + " ok_button'" 
		var content = "\
			<div class='" + windowParam.className + "_message'>" + content  + "</div>\
				<div class='" + windowParam.className + "_buttons'>\
					<input type='button' value='" + okLabel + "' onclick='Dialog.okCallback()'" + okButtonClass + "/>\
				</div>";
		return this._openDialog(content, parameters)
	},
	
	info: function(content, parameters) {   
	  // Get Ajax return before
	  if (typeof content != "string") {
	    Dialog._runAjaxRequest(content, parameters, Dialog.info);
	    return 
	  }
	   
	  parameters = parameters || {};
	  parameters.windowParameters = parameters.windowParameters || {};
	  
		var className = parameters.windowParameters.className || "alert";

		var content = "<div id='modal_dialog_message' class='" + className + "_message'>" + content  + "</div>";
		if (parameters.showProgress)
		  content += "<div id='modal_dialog_progress' class='" + className + "_progress'>	</div>";

		parameters.windowParameters.ok = null;
		parameters.windowParameters.cancel = null;
    parameters.windowParameters.className = className;
		
		return this._openDialog(content, parameters)
	},
	
	setInfoMessage: function(message) {
		$('modal_dialog_message').update(message);
	},
	
	closeInfo: function() {
		Windows.close(this.dialogId);
	},
	
	_openDialog: function(content, parameters) {
		// remove old dialog
		if (this.win) 
			this.win.destroy();

    if (! parameters.windowParameters.height && ! parameters.windowParameters.width) {
      parameters.windowParameters.width = WindowUtilities.getPageSize().pageWidth / 2;
    }
    this.dialogId = parameters.id ? parameters.id : 'modal_dialog'

    // compute height or width if need be
    if (! parameters.windowParameters.height || ! parameters.windowParameters.width) {
      var size = WindowUtilities._computeSize(content, this.dialogId, parameters.windowParameters.width, parameters.windowParameters.height)
  		if (parameters.windowParameters.height)
  		  parameters.windowParameters.width = size + 5
		  else
		    parameters.windowParameters.height = size + 5
    }
		var windowParam = parameters && parameters.windowParameters ? parameters.windowParameters : {};
		windowParam.resizable = windowParam.resizable || false;
		
		windowParam.effectOptions = windowParam.effectOptions || {duration: 1};
    windowParam.minimizable = false;
    windowParam.maximizable = false;
    windowParam.closable = false;
		this.win = new Window(this.dialogId, windowParam);
		this.win.getContent().innerHTML = content;
  	this.win.showCenter(true, parameters.top, parameters.left);	
		  
		this.win.cancelCallback = parameters.cancel;
		this.win.okCallback = parameters.ok;
		
		return this.win;		
	},
	
	_getAjaxContent: function(originalRequest)  {
      Dialog.callFunc(originalRequest.responseText, Dialog.parameters)
  },
  
  _runAjaxRequest: function(message, parameters, callFunc) {
    if (message.options == null)
	    message.options ={}  
	  Dialog.onCompleteFunc = message.options.onComplete;
    Dialog.parameters = parameters;
    Dialog.callFunc = callFunc;
    
	  message.options.onComplete = Dialog._getAjaxContent;
    new Ajax.Request(message.url, message.options);
  },
  
	okCallback: function() {
		if (!this.win.okCallback || this.win.okCallback(this.win))
	    this.win.hide();
	},

	cancelCallback: function() {
		this.win.hide();
		if (this.win.cancelCallback)
			this.win.cancelCallback(this.win);
	}
}
/*
	Based on Lightbox JS: Fullsize Image Overlays 
	by Lokesh Dhakar - http://www.huddletogether.com

	For more information on this script, visit:
	http://huddletogether.com/projects/lightbox/

	Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
	(basically, do anything you want, just leave my name and link)
*/

var isIE = navigator.appVersion.match(/MSIE/) == "MSIE";

var WindowUtilities = {
  // From script.aculo.us
  getWindowScroll: function() {
    var w = window;
      var T, L, W, H;
      with (w.document) {
        if (w.document.documentElement && documentElement.scrollTop) {
          T = documentElement.scrollTop;
          L = documentElement.scrollLeft;
        } else if (w.document.body) {
          T = body.scrollTop;
          L = body.scrollLeft;
        }
        if (w.innerWidth) {
          W = w.innerWidth;
          H = w.innerHeight;
        } else if (w.document.documentElement && documentElement.clientWidth) {
          W = documentElement.clientWidth;
          H = documentElement.clientHeight;
        } else {
          W = body.offsetWidth;
          H = body.offsetHeight
        }
      }
      return { top: T, left: L, width: W, height: H };
    
  }, 
  //
  // getPageSize()
  // Returns array with page width, height and window width, height
  // Core code from - quirksmode.org
  // Edit for Firefox by pHaez
  //
  getPageSize: function(){
  	var xScroll, yScroll;

  	if (window.innerHeight && window.scrollMaxY) {	
  		xScroll = document.body.scrollWidth;
  		yScroll = window.innerHeight + window.scrollMaxY;
  	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
  		xScroll = document.body.scrollWidth;
  		yScroll = document.body.scrollHeight;
  	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
  		xScroll = document.body.offsetWidth;
  		yScroll = document.body.offsetHeight;
  	}

  	var windowWidth, windowHeight;

  	if (self.innerHeight) {	// all except Explorer
  		windowWidth = self.innerWidth;
  		windowHeight = self.innerHeight;
  	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
  		windowWidth = document.documentElement.clientWidth;
  		windowHeight = document.documentElement.clientHeight;
  	} else if (document.body) { // other Explorers
  		windowWidth = document.body.clientWidth;
  		windowHeight = document.body.clientHeight;
  	}	
  	var pageHeight, pageWidth;

  	// for small pages with total height less then height of the viewport
  	if(yScroll < windowHeight){
  		pageHeight = windowHeight;
  	} else { 
  		pageHeight = yScroll;
  	}

  	// for small pages with total width less then width of the viewport
  	if(xScroll < windowWidth){	
  		pageWidth = windowWidth;
  	} else {
  		pageWidth = xScroll;
  	}

  	return {pageWidth: pageWidth ,pageHeight: pageHeight , windowWidth: windowWidth, windowHeight: windowHeight};
  },

 	disableScreen: function(className, overlayId, contentId) {
		WindowUtilities.initLightbox(overlayId, className);
		var objBody = document.getElementsByTagName("body").item(0);

		// prep objects
	 	var objOverlay = $(overlayId);

		var pageSize = WindowUtilities.getPageSize();

		// Hide select boxes as they will 'peek' through the image in IE
		if (contentId && isIE) {
      $$('select').each(function(element) {element.style.visibility = "hidden"});
	    $$('#'+contentId+' select').each(function(element) {element.style.visibility = "visible"});
		}	
	
		// set height of Overlay to take up whole page and show
		objOverlay.style.height = (pageSize.pageHeight + 'px');
		objOverlay.style.width = (pageSize.windowWidth + 'px');
		objOverlay.style.display = 'block';	
	},

 	enableScreen: function(id) {
 	  id = id || 'overlay_modal'
	 	var objOverlay =  $(id);
		if (objOverlay) {
			// hide lightbox and overlay
			objOverlay.style.display = 'none';

			// make select boxes visible
			if (isIE) {
        $$('select').each(function(element) {element.style.visibility = "visible"});
			}
			objOverlay.parentNode.removeChild(objOverlay);
		}
	},

	// initLightbox()
	// Function runs on window load, going through link tags looking for rel="lightbox".
	// These links receive onclick events that enable the lightbox display for their targets.
	// The function also inserts html markup at the top of the page which will be used as a
	// container for the overlay pattern and the inline image.
	initLightbox: function(id, className) {
		// Already done, just update zIndex
		if ($(id)) {
			Element.setStyle(id, {zIndex: Windows.maxZIndex + 10});
		}
		// create overlay div and hardcode some functional styles (aesthetic styles are in CSS file)
		else {
			var objBody = document.getElementsByTagName("body").item(0);
			var objOverlay = document.createElement("div");
			objOverlay.setAttribute('id', id);
			objOverlay.className = "overlay_" + className
			objOverlay.style.display = 'none';
			objOverlay.style.position = 'absolute';
			objOverlay.style.top = '0';
			objOverlay.style.left = '0';
			objOverlay.style.zIndex = Windows.maxZIndex + 10;
		 	objOverlay.style.width = '100%';
			objBody.insertBefore(objOverlay, objBody.firstChild);
		}
	},
	
	setCookie: function(value, parameters) {
    document.cookie= parameters[0] + "=" + escape(value) +
      ((parameters[1]) ? "; expires=" + parameters[1].toGMTString() : "") +
      ((parameters[2]) ? "; path=" + parameters[2] : "") +
      ((parameters[3]) ? "; domain=" + parameters[3] : "") +
      ((parameters[4]) ? "; secure" : "");
  },

  getCookie: function(name) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1) {
      begin = dc.indexOf(prefix);
      if (begin != 0) return null;
    } else {
      begin += 2;
    }
    var end = document.cookie.indexOf(";", begin);
    if (end == -1) {
      end = dc.length;
    }
    return unescape(dc.substring(begin + prefix.length, end));
  },
  
  _computeSize: function(content, id, width, height, margin) {
    if (margin == null)
      margin = 5;

    var objBody = document.getElementsByTagName("body").item(0);
  	var tmpObj = document.createElement("div");
  	tmpObj.setAttribute('id', id);
	
  	if (height)
  	  tmpObj.style.height = height + "px"
    else
      tmpObj.style.width = width + "px"
  
  	tmpObj.style.position = 'absolute';
  	tmpObj.style.top = '0';
  	tmpObj.style.left = '0';
    tmpObj.style.display = 'none';

    tmpObj.innerHTML = content;
  	objBody.insertBefore(tmpObj, objBody.firstChild);
  	
  	var size;
  	if (height)
  	  size = $(id).getDimensions().width + margin;
    else
      size = $(id).getDimensions().height + margin;
  	objBody.removeChild(tmpObj);
    
  	return size;
  }	
}

// script.aculo.us controls.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007

// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//           (c) 2005-2007 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
//           (c) 2005-2007 Jon Tirsen (http://www.tirsen.com)
// Contributors:
//  Richard Livsey
//  Rahul Bhargava
//  Rob Wills
// 
// 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/

// Autocompleter.Base handles all the autocompletion functionality 
// that's independent of the data source for autocompletion. This
// includes drawing the autocompletion menu, observing keyboard
// and mouse events, and similar.
//
// Specific autocompleters need to provide, at the very least, 
// a getUpdatedChoices function that will be invoked every time
// the text inside the monitored textbox changes. This method 
// should get the text for which to provide autocompletion by
// invoking this.getToken(), NOT by directly accessing
// this.element.value. This is to allow incremental tokenized
// autocompletion. Specific auto-completion logic (AJAX, etc)
// belongs in getUpdatedChoices.
//
// Tokenized incremental autocompletion is enabled automatically
// when an autocompleter is instantiated with the 'tokens' option
// in the options parameter, e.g.:
// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
// will incrementally autocomplete with a comma as the token.
// Additionally, ',' in the above example can be replaced with
// a token array, e.g. { tokens: [',', '\n'] } which
// enables autocompletion on multiple tokens. This is most 
// useful when one of the tokens is \n (a newline), as it 
// allows smart autocompletion after linebreaks.

if(typeof Effect == 'undefined')
  throw("controls.js requires including script.aculo.us' effects.js library");

var Autocompleter = {}
Autocompleter.Base = function() {};
Autocompleter.Base.prototype = {
  baseInitialize: function(element, update, options) {
    element          = $(element)
    this.element     = element; 
    this.update      = $(update);  
    this.hasFocus    = false; 
    this.changed     = false; 
    this.active      = false; 
    this.index       = 0;     
    this.entryCount  = 0;

    if(this.setOptions)
      this.setOptions(options);
    else
      this.options = options || {};

    this.options.paramName    = this.options.paramName || this.element.name;
    this.options.tokens       = this.options.tokens || [];
    this.options.frequency    = this.options.frequency || 0.4;
    this.options.minChars     = this.options.minChars || 1;
    this.options.onShow       = this.options.onShow || 
      function(element, update){ 
        if(!update.style.position || update.style.position=='absolute') {
          update.style.position = 'absolute';
          Position.clone(element, update, {
            setHeight: false, 
            offsetTop: element.offsetHeight
          });
        }
        Effect.Appear(update,{duration:0.15});
      };
    this.options.onHide = this.options.onHide || 
      function(element, update){ new Effect.Fade(update,{duration:0.15}) };

    if(typeof(this.options.tokens) == 'string') 
      this.options.tokens = new Array(this.options.tokens);

    this.observer = null;
    
    this.element.setAttribute('autocomplete','off');

    Element.hide(this.update);

    Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
    Event.observe(this.element, 'keypress', this.onKeyPress.bindAsEventListener(this));

    // Turn autocomplete back on when the user leaves the page, so that the
    // field's value will be remembered on Mozilla-based browsers.
    Event.observe(window, 'beforeunload', function(){ 
      element.setAttribute('autocomplete', 'on'); 
    });
  },

  show: function() {
    if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
    if(!this.iefix && 
      (Prototype.Browser.IE) &&
      (Element.getStyle(this.update, 'position')=='absolute')) {
      new Insertion.After(this.update, 
       '<iframe id="' + this.update.id + '_iefix" '+
       'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
       'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
      this.iefix = $(this.update.id+'_iefix');
    }
    if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
  },
  
  fixIEOverlapping: function() {
    Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
    this.iefix.style.zIndex = 1;
    this.update.style.zIndex = 2;
    Element.show(this.iefix);
  },

  hide: function() {
    this.stopIndicator();
    if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
    if(this.iefix) Element.hide(this.iefix);
  },

  startIndicator: function() {
    if(this.options.indicator) Element.show(this.options.indicator);
  },

  stopIndicator: function() {
    if(this.options.indicator) Element.hide(this.options.indicator);
  },

  onKeyPress: function(event) {
    if(this.active)
      switch(event.keyCode) {
       case Event.KEY_TAB:
       case Event.KEY_RETURN:
         this.selectEntry();
         Event.stop(event);
       case Event.KEY_ESC:
         this.hide();
         this.active = false;
         Event.stop(event);
         return;
       case Event.KEY_LEFT:
       case Event.KEY_RIGHT:
         return;
       case Event.KEY_UP:
         this.markPrevious();
         this.render();
         if(Prototype.Browser.WebKit) Event.stop(event);
         return;
       case Event.KEY_DOWN:
         this.markNext();
         this.render();
         if(Prototype.Browser.WebKit) Event.stop(event);
         return;
      }
     else 
       if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN || 
         (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;

    this.changed = true;
    this.hasFocus = true;

    if(this.observer) clearTimeout(this.observer);
      this.observer = 
        setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
  },

  activate: function() {
    this.changed = false;
    this.hasFocus = true;
    this.getUpdatedChoices();
  },

  onHover: function(event) {
    var element = Event.findElement(event, 'LI');
    if(this.index != element.autocompleteIndex) 
    {
        this.index = element.autocompleteIndex;
        this.render();
    }
    Event.stop(event);
  },
  
  onClick: function(event) {
    var element = Event.findElement(event, 'LI');
    this.index = element.autocompleteIndex;
    this.selectEntry();
    this.hide();
  },
  
  onBlur: function(event) {
    // needed to make click events working
    setTimeout(this.hide.bind(this), 250);
    this.hasFocus = false;
    this.active = false;     
  }, 
  
  render: function() {
    if(this.entryCount > 0) {
      for (var i = 0; i < this.entryCount; i++)
        this.index==i ? 
          Element.addClassName(this.getEntry(i),"selected") : 
          Element.removeClassName(this.getEntry(i),"selected");
      if(this.hasFocus) { 
        this.show();
        this.active = true;
      }
    } else {
      this.active = false;
      this.hide();
    }
  },
  
  markPrevious: function() {
    if(this.index > 0) this.index--
      else this.index = this.entryCount-1;
    this.getEntry(this.index).scrollIntoView(true);
  },
  
  markNext: function() {
    if(this.index < this.entryCount-1) this.index++
      else this.index = 0;
    this.getEntry(this.index).scrollIntoView(false);
  },
  
  getEntry: function(index) {
    return this.update.firstChild.childNodes[index];
  },
  
  getCurrentEntry: function() {
    return this.getEntry(this.index);
  },
  
  selectEntry: function() {
    this.active = false;
    this.updateElement(this.getCurrentEntry());
  },

  updateElement: function(selectedElement) {
    if (this.options.updateElement) {
      this.options.updateElement(selectedElement);
      return;
    }
    var value = '';
    if (this.options.select) {
      var nodes = document.getElementsByClassName(this.options.select, selectedElement) || [];
      if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
    } else
      value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
    
    var lastTokenPos = this.findLastToken();
    if (lastTokenPos != -1) {
      var newValue = this.element.value.substr(0, lastTokenPos + 1);
      var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/);
      if (whitespace)
        newValue += whitespace[0];
      this.element.value = newValue + value;
    } else {
      this.element.value = value;
    }
    this.element.focus();
    
    if (this.options.afterUpdateElement)
      this.options.afterUpdateElement(this.element, selectedElement);
  },

  updateChoices: function(choices) {
    if(!this.changed && this.hasFocus) {
      this.update.innerHTML = choices;
      Element.cleanWhitespace(this.update);
      Element.cleanWhitespace(this.update.down());

      if(this.update.firstChild && this.update.down().childNodes) {
        this.entryCount = 
          this.update.down().childNodes.length;
        for (var i = 0; i < this.entryCount; i++) {
          var entry = this.getEntry(i);
          entry.autocompleteIndex = i;
          this.addObservers(entry);
        }
      } else { 
        this.entryCount = 0;
      }

      this.stopIndicator();
      this.index = 0;
      
      if(this.entryCount==1 && this.options.autoSelect) {
        this.selectEntry();
        this.hide();
      } else {
        this.render();
      }
    }
  },

  addObservers: function(element) {
    Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
    Event.observe(element, "click", this.onClick.bindAsEventListener(this));
  },

  onObserverEvent: function() {
    this.changed = false;   
    if(this.getToken().length>=this.options.minChars) {
      this.getUpdatedChoices();
    } else {
      this.active = false;
      this.hide();
    }
  },

  getToken: function() {
    var tokenPos = this.findLastToken();
    if (tokenPos != -1)
      var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/,'').replace(/\s+$/,'');
    else
      var ret = this.element.value;

    return /\n/.test(ret) ? '' : ret;
  },

  findLastToken: function() {
    var lastTokenPos = -1;

    for (var i=0; i<this.options.tokens.length; i++) {
      var thisTokenPos = this.element.value.lastIndexOf(this.options.tokens[i]);
      if (thisTokenPos > lastTokenPos)
        lastTokenPos = thisTokenPos;
    }
    return lastTokenPos;
  }
}

Ajax.Autocompleter = Class.create();
Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), {
  initialize: function(element, update, url, options) {
    this.baseInitialize(element, update, options);
    this.options.asynchronous  = true;
    this.options.onComplete    = this.onComplete.bind(this);
    this.options.defaultParams = this.options.parameters || null;
    this.url                   = url;
  },

  getUpdatedChoices: function() {
    this.startIndicator();
    
    var entry = encodeURIComponent(this.options.paramName) + '=' + 
      encodeURIComponent(this.getToken());

    this.options.parameters = this.options.callback ?
      this.options.callback(this.element, entry) : entry;

    if(this.options.defaultParams) 
      this.options.parameters += '&' + this.options.defaultParams;
    
    new Ajax.Request(this.url, this.options);
  },

  onComplete: function(request) {
    this.updateChoices(request.responseText);
  }

});

// The local array autocompleter. Used when you'd prefer to
// inject an array of autocompletion options into the page, rather
// than sending out Ajax queries, which can be quite slow sometimes.
//
// The constructor takes four parameters. The first two are, as usual,
// the id of the monitored textbox, and id of the autocompletion menu.
// The third is the array you want to autocomplete from, and the fourth
// is the options block.
//
// Extra local autocompletion options:
// - choices - How many autocompletion choices to offer
//
// - partialSearch - If false, the autocompleter will match entered
//                    text only at the beginning of strings in the 
//                    autocomplete array. Defaults to true, which will
//                    match text at the beginning of any *word* in the
//                    strings in the autocomplete array. If you want to
//                    search anywhere in the string, additionally set
//                    the option fullSearch to true (default: off).
//
// - fullSsearch - Search anywhere in autocomplete array strings.
//
// - partialChars - How many characters to enter before triggering
//                   a partial match (unlike minChars, which defines
//                   how many characters are required to do any match
//                   at all). Defaults to 2.
//
// - ignoreCase - Whether to ignore case when autocompleting.
//                 Defaults to true.
//
// It's possible to pass in a custom function as the 'selector' 
// option, if you prefer to write your own autocompletion logic.
// In that case, the other options above will not apply unless
// you support them.

Autocompleter.Local = Class.create();
Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), {
  initialize: function(element, update, array, options) {
    this.baseInitialize(element, update, options);
    this.options.array = array;
  },

  getUpdatedChoices: function() {
    this.updateChoices(this.options.selector(this));
  },

  setOptions: function(options) {
    this.options = Object.extend({
      choices: 10,
      partialSearch: true,
      partialChars: 2,
      ignoreCase: true,
      fullSearch: false,
      selector: function(instance) {
        var ret       = []; // Beginning matches
        var partial   = []; // Inside matches
        var entry     = instance.getToken();
        var count     = 0;

        for (var i = 0; i < instance.options.array.length &&  
          ret.length < instance.options.choices ; i++) { 

          var elem = instance.options.array[i];
          var foundPos = instance.options.ignoreCase ? 
            elem.toLowerCase().indexOf(entry.toLowerCase()) : 
            elem.indexOf(entry);

          while (foundPos != -1) {
            if (foundPos == 0 && elem.length != entry.length) { 
              ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" + 
                elem.substr(entry.length) + "</li>");
              break;
            } else if (entry.length >= instance.options.partialChars && 
              instance.options.partialSearch && foundPos != -1) {
              if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
                partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
                  elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
                  foundPos + entry.length) + "</li>");
                break;
              }
            }

            foundPos = instance.options.ignoreCase ? 
              elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : 
              elem.indexOf(entry, foundPos + 1);

          }
        }
        if (partial.length)
          ret = ret.concat(partial.slice(0, instance.options.choices - ret.length))
        return "<ul>" + ret.join('') + "</ul>";
      }
    }, options || {});
  }
});

// AJAX in-place editor
//
// see documentation on http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor

// Use this if you notice weird scrolling problems on some browsers,
// the DOM might be a bit confused when this gets called so do this
// waits 1 ms (with setTimeout) until it does the activation
Field.scrollFreeActivate = function(field) {
  setTimeout(function() {
    Field.activate(field);
  }, 1);
}

Ajax.InPlaceEditor = Class.create();
Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99";
Ajax.InPlaceEditor.prototype = {
  initialize: function(element, url, options) {
    this.url = url;
    this.element = $(element);

    this.options = Object.extend({
      paramName: "value",
      okButton: true,
      okLink: false,
      okText: "ok",
      cancelButton: false,
      cancelLink: true,
      cancelText: "cancel",
      textBeforeControls: '',
      textBetweenControls: '',
      textAfterControls: '',
      savingText: "Saving...",
      clickToEditText: "Click to edit",
      okText: "ok",
      rows: 1,
      onComplete: function(transport, element) {
        new Effect.Highlight(element, {startcolor: this.options.highlightcolor});
      },
      onFailure: function(transport) {
        alert("Error communicating with the server: " + transport.responseText.stripTags());
      },
      callback: function(form) {
        return Form.serialize(form);
      },
      handleLineBreaks: true,
      loadingText: 'Loading...',
      savingClassName: 'inplaceeditor-saving',
      loadingClassName: 'inplaceeditor-loading',
      formClassName: 'inplaceeditor-form',
      highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor,
      highlightendcolor: "#FFFFFF",
      externalControl: null,
      submitOnBlur: false,
      ajaxOptions: {},
      evalScripts: false
    }, options || {});

    if(!this.options.formId && this.element.id) {
      this.options.formId = this.element.id + "-inplaceeditor";
      if ($(this.options.formId)) {
        // there's already a form with that name, don't specify an id
        this.options.formId = null;
      }
    }
    
    if (this.options.externalControl) {
      this.options.externalControl = $(this.options.externalControl);
    }
    
    this.originalBackground = Element.getStyle(this.element, 'background-color');
    if (!this.originalBackground) {
      this.originalBackground = "transparent";
    }
    
    this.element.title = this.options.clickToEditText;
    
    this.onclickListener = this.enterEditMode.bindAsEventListener(this);
    this.mouseoverListener = this.enterHover.bindAsEventListener(this);
    this.mouseoutListener = this.leaveHover.bindAsEventListener(this);
    Event.observe(this.element, 'click', this.onclickListener);
    Event.observe(this.element, 'mouseover', this.mouseoverListener);
    Event.observe(this.element, 'mouseout', this.mouseoutListener);
    if (this.options.externalControl) {
      Event.observe(this.options.externalControl, 'click', this.onclickListener);
      Event.observe(this.options.externalControl, 'mouseover', this.mouseoverListener);
      Event.observe(this.options.externalControl, 'mouseout', this.mouseoutListener);
    }
  },
  enterEditMode: function(evt) {
    if (this.saving) return;
    if (this.editing) return;
    this.editing = true;
    this.onEnterEditMode();
    if (this.options.externalControl) {
      Element.hide(this.options.externalControl);
    }
    Element.hide(this.element);
    this.createForm();
    this.element.parentNode.insertBefore(this.form, this.element);
    if (!this.options.loadTextURL) Field.scrollFreeActivate(this.editField);
    // stop the event to avoid a page refresh in Safari
    if (evt) {
      Event.stop(evt);
    }
    return false;
  },
  createForm: function() {
    this.form = document.createElement("form");
    this.form.id = this.options.formId;
    Element.addClassName(this.form, this.options.formClassName)
    this.form.onsubmit = this.onSubmit.bind(this);

    this.createEditField();

    if (this.options.textarea) {
      var br = document.createElement("br");
      this.form.appendChild(br);
    }
    
    if (this.options.textBeforeControls)
      this.form.appendChild(document.createTextNode(this.options.textBeforeControls));

    if (this.options.okButton) {
      var okButton = document.createElement("input");
      okButton.type = "submit";
      okButton.value = this.options.okText;
      okButton.className = 'editor_ok_button';
      this.form.appendChild(okButton);
    }
    
    if (this.options.okLink) {
      var okLink = document.createElement("a");
      okLink.href = "#";
      okLink.appendChild(document.createTextNode(this.options.okText));
      okLink.onclick = this.onSubmit.bind(this);
      okLink.className = 'editor_ok_link';
      this.form.appendChild(okLink);
    }
    
    if (this.options.textBetweenControls && 
      (this.options.okLink || this.options.okButton) && 
      (this.options.cancelLink || this.options.cancelButton))
      this.form.appendChild(document.createTextNode(this.options.textBetweenControls));
      
    if (this.options.cancelButton) {
      var cancelButton = document.createElement("input");
      cancelButton.type = "submit";
      cancelButton.value = this.options.cancelText;
      cancelButton.onclick = this.onclickCancel.bind(this);
      cancelButton.className = 'editor_cancel_button';
      this.form.appendChild(cancelButton);
    }

    if (this.options.cancelLink) {
      var cancelLink = document.createElement("a");
      cancelLink.href = "#";
      cancelLink.appendChild(document.createTextNode(this.options.cancelText));
      cancelLink.onclick = this.onclickCancel.bind(this);
      cancelLink.className = 'editor_cancel editor_cancel_link';      
      this.form.appendChild(cancelLink);
    }
    
    if (this.options.textAfterControls)
      this.form.appendChild(document.createTextNode(this.options.textAfterControls));
  },
  hasHTMLLineBreaks: function(string) {
    if (!this.options.handleLineBreaks) return false;
    return string.match(/<br/i) || string.match(/<p>/i);
  },
  convertHTMLLineBreaks: function(string) {
    return string.replace(/<br>/gi, "\n").replace(/<br\/>/gi, "\n").replace(/<\/p>/gi, "\n").replace(/<p>/gi, "");
  },
  createEditField: function() {
    var text;
    if(this.options.loadTextURL) {
      text = this.options.loadingText;
    } else {
      text = this.getText();
    }

    var obj = this;
    
    if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) {
      this.options.textarea = false;
      var textField = document.createElement("input");
      textField.obj = this;
      textField.type = "text";
      textField.name = this.options.paramName;
      textField.value = text;
      textField.style.backgroundColor = this.options.highlightcolor;
      textField.className = 'editor_field';
      var size = this.options.size || this.options.cols || 0;
      if (size != 0) textField.size = size;
      if (this.options.submitOnBlur)
        textField.onblur = this.onSubmit.bind(this);
      this.editField = textField;
    } else {
      this.options.textarea = true;
      var textArea = document.createElement("textarea");
      textArea.obj = this;
      textArea.name = this.options.paramName;
      textArea.value = this.convertHTMLLineBreaks(text);
      textArea.rows = this.options.rows;
      textArea.cols = this.options.cols || 40;
      textArea.className = 'editor_field';      
      if (this.options.submitOnBlur)
        textArea.onblur = this.onSubmit.bind(this);
      this.editField = textArea;
    }
    
    if(this.options.loadTextURL) {
      this.loadExternalText();
    }
    this.form.appendChild(this.editField);
  },
  getText: function() {
    return this.element.innerHTML;
  },
  loadExternalText: function() {
    Element.addClassName(this.form, this.options.loadingClassName);
    this.editField.disabled = true;
    new Ajax.Request(
      this.options.loadTextURL,
      Object.extend({
        asynchronous: true,
        onComplete: this.onLoadedExternalText.bind(this)
      }, this.options.ajaxOptions)
    );
  },
  onLoadedExternalText: function(transport) {
    Element.removeClassName(this.form, this.options.loadingClassName);
    this.editField.disabled = false;
    this.editField.value = transport.responseText.stripTags();
    Field.scrollFreeActivate(this.editField);
  },
  onclickCancel: function() {
    this.onComplete();
    this.leaveEditMode();
    return false;
  },
  onFailure: function(transport) {
    this.options.onFailure(transport);
    if (this.oldInnerHTML) {
      this.element.innerHTML = this.oldInnerHTML;
      this.oldInnerHTML = null;
    }
    return false;
  },
  onSubmit: function() {
    // onLoading resets these so we need to save them away for the Ajax call
    var form = this.form;
    var value = this.editField.value;
    
    // do this first, sometimes the ajax call returns before we get a chance to switch on Saving...
    // which means this will actually switch on Saving... *after* we've left edit mode causing Saving...
    // to be displayed indefinitely
    this.onLoading();
    
    if (this.options.evalScripts) {
      new Ajax.Request(
        this.url, Object.extend({
          parameters: this.options.callback(form, value),
          onComplete: this.onComplete.bind(this),
          onFailure: this.onFailure.bind(this),
          asynchronous:true, 
          evalScripts:true
        }, this.options.ajaxOptions));
    } else  {
      new Ajax.Updater(
        { success: this.element,
          // don't update on failure (this could be an option)
          failure: null }, 
        this.url, Object.extend({
          parameters: this.options.callback(form, value),
          onComplete: this.onComplete.bind(this),
          onFailure: this.onFailure.bind(this)
        }, this.options.ajaxOptions));
    }
    // stop the event to avoid a page refresh in Safari
    if (arguments.length > 1) {
      Event.stop(arguments[0]);
    }
    return false;
  },
  onLoading: function() {
    this.saving = true;
    this.removeForm();
    this.leaveHover();
    this.showSaving();
  },
  showSaving: function() {
    this.oldInnerHTML = this.element.innerHTML;
    this.element.innerHTML = this.options.savingText;
    Element.addClassName(this.element, this.options.savingClassName);
    this.element.style.backgroundColor = this.originalBackground;
    Element.show(this.element);
  },
  removeForm: function() {
    if(this.form) {
      if (this.form.parentNode) Element.remove(this.form);
      this.form = null;
    }
  },
  enterHover: function() {
    if (this.saving) return;
    this.element.style.backgroundColor = this.options.highlightcolor;
    if (this.effect) {
      this.effect.cancel();
    }
    Element.addClassName(this.element, this.options.hoverClassName)
  },
  leaveHover: function() {
    if (this.options.backgroundColor) {
      this.element.style.backgroundColor = this.oldBackground;
    }
    Element.removeClassName(this.element, this.options.hoverClassName)
    if (this.saving) return;
    this.effect = new Effect.Highlight(this.element, {
      startcolor: this.options.highlightcolor,
      endcolor: this.options.highlightendcolor,
      restorecolor: this.originalBackground
    });
  },
  leaveEditMode: function() {
    Element.removeClassName(this.element, this.options.savingClassName);
    this.removeForm();
    this.leaveHover();
    this.element.style.backgroundColor = this.originalBackground;
    Element.show(this.element);
    if (this.options.externalControl) {
      Element.show(this.options.externalControl);
    }
    this.editing = false;
    this.saving = false;
    this.oldInnerHTML = null;
    this.onLeaveEditMode();
  },
  onComplete: function(transport) {
    this.leaveEditMode();
    this.options.onComplete.bind(this)(transport, this.element);
  },
  onEnterEditMode: function() {},
  onLeaveEditMode: function() {},
  dispose: function() {
    if (this.oldInnerHTML) {
      this.element.innerHTML = this.oldInnerHTML;
    }
    this.leaveEditMode();
    Event.stopObserving(this.element, 'click', this.onclickListener);
    Event.stopObserving(this.element, 'mouseover', this.mouseoverListener);
    Event.stopObserving(this.element, 'mouseout', this.mouseoutListener);
    if (this.options.externalControl) {
      Event.stopObserving(this.options.externalControl, 'click', this.onclickListener);
      Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener);
      Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener);
    }
  }
};

Ajax.InPlaceCollectionEditor = Class.create();
Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype);
Object.extend(Ajax.InPlaceCollectionEditor.prototype, {
  createEditField: function() {
    if (!this.cached_selectTag) {
      var selectTag = document.createElement("select");
      var collection = this.options.collection || [];
      var optionTag;
      collection.each(function(e,i) {
        optionTag = document.createElement("option");
        optionTag.value = (e instanceof Array) ? e[0] : e;
        if((typeof this.options.value == 'undefined') && 
          ((e instanceof Array) ? this.element.innerHTML == e[1] : e == optionTag.value)) optionTag.selected = true;
        if(this.options.value==optionTag.value) optionTag.selected = true;
        optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e));
        selectTag.appendChild(optionTag);
      }.bind(this));
      this.cached_selectTag = selectTag;
    }

    this.editField = this.cached_selectTag;
    if(this.options.loadTextURL) this.loadExternalText();
    this.form.appendChild(this.editField);
    this.options.callback = function(form, value) {
      return "value=" + encodeURIComponent(value);
    }
  }
});

// Delayed observer, like Form.Element.Observer, 
// but waits for delay after last key input
// Ideal for live-search fields

Form.Element.DelayedObserver = Class.create();
Form.Element.DelayedObserver.prototype = {
  initialize: function(element, delay, callback) {
    this.delay     = delay || 0.5;
    this.element   = $(element);
    this.callback  = callback;
    this.timer     = null;
    this.lastValue = $F(this.element); 
    Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
  },
  delayedListener: function(event) {
    if(this.lastValue == $F(this.element)) return;
    if(this.timer) clearTimeout(this.timer);
    this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
    this.lastValue = $F(this.element);
  },
  onTimerEvent: function() {
    this.timer = null;
    this.callback(this.element, $F(this.element));
  }
};


var langFarsi = true;
var farsikey = [
	0x0020, 0x0021, 0x061B, 0x066B, 0x00A4, 0x066A, 0x060C, 0x06AF,      
	0x0029, 0x0028, 0x002A, 0x002B, 0x0648, 0x002D, 0x002E, 0x002F,      
	0x06F0, 0x06F1, 0x06F2, 0x06F3, 0x06F4, 0x06F5, 0x06F6, 0x06F7,      
	0x06F8, 0x06F9, 0x003A, 0x06A9, 0x003E, 0x003D, 0x003C, 0x061F,      
	0x066C, 0x0624, 0x200C, 0x0698, 0x064A, 0x064D, 0x0625, 0x0623,      
	0x0622, 0x0651, 0x0629, 0x00BB, 0x00AB, 0x0621, 0x004E, 0x005D,      
	0x005B, 0x0652, 0x064B, 0x0626, 0x064F, 0x064E, 0x0056, 0x064C,            
	0x0058, 0x0650, 0x0643, 0x062C, 0x0698, 0x0686, 0x00D7, 0x0640,            
	0x067E, 0x0634, 0x0630, 0x0632, 0x0649, 0x062B, 0x0628, 0x0644,            
	0x0627, 0x0647, 0x062A, 0x0646, 0x0645, 0x0626, 0x062F, 0x062E,            
	0x062D, 0x0636, 0x0642, 0x0633, 0x0641, 0x0639, 0x0631, 0x0635,            
	0x0637, 0x063A, 0x0638, 0x007D, 0x007C, 0x007B, 0x007E            
];            
            
function FKeyDown() {
	if (window.event.shiftKey && window.event.altKey) {
		langFarsi=!langFarsi;
		return false;
	}
	return true;
}

function FKeyPress() {
   var key = window.event.keyCode;
   if (key < 0x0020 || key >= 0x00FF)
      return;
   if (langFarsi) {
      var el = event.srcElement;
      var objRegExp = new RegExp("[A-Za-z\x27\x2C\x3B\x5B\x5C\x5D\x7C]");
      var validate_key = objRegExp.test(String.fromCharCode(key));
      if ((validate_key || (key==92)) && (key != 0x200C) && (el.value.lastIndexOf(String.fromCharCode(1609)) == el.value.length - 1) && el.value.length > 0) {
         el.value = el.value.slice(0, -1);
         el.value += String.fromCharCode(1610);
      }
      if (key == 0x0020 && window.event.shiftKey)
         window.event.keyCode = 0x200C;
      else
         window.event.keyCode = farsikey[key - 0x0020];
   }
   return true;
}


/**
 * Convert a single file-input element into a 'multiple' input list
 * Licence:
 *   Use this however/wherever you like, just don't blame me if it breaks anything.
 * Credit:
 *   If you're nice, you'll leave this bit:
 *   Class by Stickman -- http://www.the-stickman.com
 *      with thanks to:
 *      [for Safari fixes]
 *         Luis Torrefranca -- http://www.law.pitt.edu
 *         and
 *         Shawn Parker & John Pennypacker -- http://www.fuzzycoconut.com
 *      [for duplicate name bug]
 *         'neal'
 */
function MultiSelector( list_target, max ){

	// Where to write the list
	this.list_target = list_target;
	// How many elements?
	this.count = 0;
	// How many elements?
	this.id = 0;
	// Is there a maximum?
	if( max ){
		this.max = max;
	} else {
		this.max = -1;
	};
	
	/**
	 * Add a new file input element
	 */
	this.addElement = function( element ){

		// Make sure it's a file input element
		if( element.tagName == 'INPUT' && element.type == 'file' ){

			// Element name -- what number am I?
			element.name = 'file_' + this.id++;

			// Add reference to this object
			element.multi_selector = this;

			// What to do when a file is selected
			element.onchange = function(){

				// New file input
				var new_element = document.createElement( 'input' );
				new_element.type = 'file';

				// Add new element
				this.parentNode.insertBefore( new_element, this );

				// Apply 'update' to element
				this.multi_selector.addElement( new_element );

				// Update list
				this.multi_selector.addListRow( this );

				// Hide this: we can't use display:none because Safari doesn't like it
				this.style.position = 'absolute';
				this.style.left = '-1000px';

			};
			// If we've reached maximum number, disable input element
			if( this.max != -1 && this.count >= this.max ){
				element.disabled = true;
				$('file_msg').innerHTML='<b> فقط تعداد '+this.max+' فايل را مي توانيد بصورت همزمان ارسال نمائيد.</b>';
			};

			// File element counter
			this.count++;
			// Most recent element
			this.current_element = element;
			
		} else {
			// This can only be applied to file input elements!
			alert( 'Error: not a file input element' );
		};

	};
	
	//Return Used File
	this.Count = function(){
		return this.count;
	}
	/**
	 * Add a new row to the list of files
	 */
	this.addListRow = function( element ){

		// Row div
		var new_row = document.createElement( 'div' );

		// Delete button
		var new_row_button = document.createElement( 'input' );
		new_row_button.type = 'button';
		new_row_button.value = ' حذف ';

		// References
		new_row.element = element;

		// Delete function
		new_row_button.onclick= function(){

			// Remove element from form
			this.parentNode.element.parentNode.removeChild( this.parentNode.element );

			// Remove this row from the list
			this.parentNode.parentNode.removeChild( this.parentNode );

			// Decrement counter
			this.parentNode.element.multi_selector.count--;

			// Re-enable input element (if it's disabled)
			this.parentNode.element.multi_selector.current_element.disabled = false;

			// Appease Safari
			//    without it Safari wants to reload the browser window
			//    which nixes your already queued uploads
			return false;
		};

		// Set row value
		new_row.innerHTML ='<b>'+(this.count-1)+'.</b> '+element.value+' ';

		// Add button
		new_row.appendChild( new_row_button );

		// Add it to the list
		this.list_target.appendChild( new_row );
		
	};

};