//Protoculous
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={7o:\'1.5.1.2\',1X:{4b:!!(1p.7p&&!1p.4c),aJ:!!1p.4c,3U:5e.6w.2y(\'ig/\')>-1,7q:5e.6w.2y(\'7q\')>-1&&5e.6w.2y(\'dI\')==-1},5G:{aK:!!1c.3d,7r:!!1p.7s,aL:(1c.23(\'2O\').7t!==1c.23(\'1U\').7t)},8P:\'<4q[^>]*>([\\\\S\\\\s]*?)<\\/4q>\',dJ:/^\\/\\*-ih-([\\s\\S]*)\\*\\/\\s*$/,4d:D(){},K:D(x){E x}};G 1H={1E:D(){E D(){C.1Q.3V(C,1b)}}};G 2Y=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.3u()}2H(e){if(e 4r ii)E\'...\';2p e;}},2Z:D(a){G b=1m a;4M(b){1F\'1M\':1F\'D\':1F\'ij\':E;1F\'ik\':E a.3u()}if(a===1h)E\'1h\';if(a.2Z)E a.2Z();if(a.aM===1c)E;G c=[];1g(G d in a){G e=V.2Z(a[d]);if(e!==1M)c.1f(d.2Z()+\': \'+e)}E\'{\'+c.2j(\', \')+\'}\'},aN: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)}});dK.1d.1o=D(){G a=C,4s=$A(1b),3X=4s.8Q();E D(){E a.3V(3X,4s.2e($A(1b)))}};dK.1d.2P=D(b){G c=C,4s=$A(1b),b=4s.8Q();E D(a){E c.3V(b,[a||1p.4e].2e(4s))}};V.O(6x.1d,{6y:D(){E C.5f(2,16)},aO:D(){E C+1},8R:D(a){$R(0,C,19).1j(a);E C},5f:D(a,b){G c=C.3u(b||10);E\'0\'.8R(a-c.Y)+c},2Z:D(){E il(C)?C.3u():\'1h\'}});7u.1d.2Z=D(){E\'"\'+C.io()+\'-\'+(C.ip()+1).5f(2)+\'-\'+C.iq().5f(2)+\'T\'+C.ir().5f(2)+\':\'+C.it().5f(2)+\':\'+C.iu().5f(2)+\'"\'};G dL={dM: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 dN=1H.1E();dN.1d={1Q:D(a,b){C.3e=a;C.4t=b;C.8S=17;C.5H()},5H:D(){C.4f=8T(C.4N.1o(C),C.4t*2Q)},2I:D(){if(!C.4f)E;aP(C.4f);C.4f=1h},4N:D(){if(!C.8S){2z{C.8S=19;C.3e(C)}iv{C.8S=17}}}};V.O(2A,{aQ:D(a){E a==1h?\'\':2A(a)},dO:{\'\\b\':\'\\\\b\',\'\\t\':\'\\\\t\',\'\\n\':\'\\\\n\',\'\\f\':\'\\\\f\',\'\\r\':\'\\\\r\',\'\\\\\':\'\\\\\\\\\'}});V.O(2A.1d,{3v:D(a,b){G c=\'\',5g=C,1t;b=1b.8U.aR(b);1R(5g.Y>0){if(1t=5g.1t(a)){c+=5g.3w(0,1t.2q);c+=2A.aQ(b(1t));5g=5g.3w(1t.2q+1t[0].Y)}1e{c+=5g,5g=\'\'}}E c},dP:D(b,c,d){c=C.3v.aR(c);d=d===1M?1:d;E C.3v(b,D(a){if(--d<0)E a[0];E c(a)})},dQ:D(a,b){C.3v(a,b);E C},iw:D(a,b){a=a||30;b=b===1M?\'...\':b;E C.Y>a?C.3w(0,a-b.Y)+b:C},5h:D(){E C.1I(/^\\s+/,\'\').1I(/\\s+$/,\'\')},8V:D(){E C.1I(/<\\/?[^>]+>/gi,\'\')},4u:D(){E C.1I(18 7v(1k.8P,\'dR\'),\'\')},dS:D(){G b=18 7v(1k.8P,\'dR\');G c=18 7v(1k.8P,\'im\');E(C.1t(b)||[]).1P(D(a){E(a.1t(c)||[\'\',\'\'])[1]})},4O:D(){E C.dS().1P(D(a){E 7w(a)})},7x:D(){G a=1b.8U;a.3Y.dT=C;E a.2O.2r},dU:D(){G c=1c.23(\'2O\');c.2r=C.8V();E c.2k[0]?(c.2k.Y>1?$A(c.2k).4v(\'\',D(a,b){E a+b.5i}):c.2k[0].5i):\'\'},8W:D(e){G f=C.5h().1t(/([^?#]*)(#.*)?$/);if(!f)E{};E f[1].4w(e||\'&\').4v({},D(a,b){if((b=b.4w(\'=\'))[0]){G c=dV(b.8Q());G d=b.Y>1?b.2j(\'=\'):b[0];if(d!=1M)d=dV(d);if(c in a){if(a[c].5j!=1V)a[c]=[a[c]];a[c].1f(d)}1e a[c]=d}E a})},3x:D(){E C.4w(\'\')},aO:D(){E C.3w(0,C.Y-1)+2A.dW(C.dX(C.Y-1)+1)},8R:D(a){G b=\'\';1g(G i=0;i<a;i++)b+=C;E b},6z:D(){G a=C.4w(\'-\'),7y=a.Y;if(7y==1)E a[0];G b=C.5I(0)==\'-\'?a[0].5I(0).2f()+a[0].6A(1):a[0];1g(G i=1;i<7y;i++)b+=a[i].5I(0).2f()+a[i].6A(1);E b},aS:D(){E C.5I(0).2f()+C.6A(1).2s()},ix:D(){E C.3v(/::/,\'/\').3v(/([A-Z]+)([A-Z][a-z])/,\'#{1}3y#{2}\').3v(/([a-z\\d])([A-Z])/,\'#{1}3y#{2}\').3v(/-/,\'3y\').2s()},dY:D(){E C.3v(/3y/,\'-\')},2i:D(c){G d=C.3v(/[\\iy-\\iz\\\\]/,D(a){G b=2A.dO[a[0]];E b?b:\'\\\\iA\'+a[0].dX().5f(2,16)});if(c)E\'"\'+d.1I(/"/g,\'\\\\"\')+\'"\';E"\'"+d.1I(/\'/g,\'\\\\\\\'\')+"\'"},2Z:D(){E C.2i(19)},aT:D(a){E C.dP(a||1k.dJ,\'#{1}\')},dZ:D(){G a=C.1I(/\\\\./g,\'@\').1I(/"[^"\\\\\\n\\r]*"/g,\'\');E(/^[,:{}\\[\\]0-9.\\-+iB-u \\n\\r\\t]*$/).3Z(a)},8X:D(a){G b=C.aT();2z{if(!a||b.dZ())E 7w(\'(\'+b+\')\')}2H(e){}2p 18 iC(\'iD iE e0 2J: \'+C.2i());},24:D(a){E C.2y(a)>-1},e1:D(a){E C.2y(a)===0},e2:D(a){G d=C.Y-a.Y;E d>=0&&C.e3(a)===d},7z:D(){E C==\'\'},e4:D(){E/^\\s*$/.3Z(C)}});if(1k.1X.3U||1k.1X.4b){V.O(2A.1d,{7x:D(){E C.1I(/&/g,\'&e5;\').1I(/</g,\'&lt;\').1I(/>/g,\'&gt;\')},dU:D(){E C.1I(/&e5;/g,\'&\').1I(/&lt;/g,\'<\').1I(/&gt;/g,\'>\')}})}2A.1d.3v.aR=D(b){if(1m b==\'D\')E b;G c=18 2R(b);E D(a){E c.3d(a)}};2A.1d.iF=2A.1d.8W;V.O(2A.1d.7x,{2O:1c.23(\'2O\'),3Y:1c.4P(\'\')});5J(2A.1d.7x)2O.25(3Y);G 2R=1H.1E();2R.e6=/(^|.|\\r|\\n)(#\\{(.*?)\\})/;2R.1d={1Q:D(a,b){C.7A=a.3u();C.8Y=b||2R.e6},3d:D(c){E C.7A.3v(C.8Y,D(a){G b=a[1];if(b==\'\\\\\')E a[2];E b+2A.aQ(c[a[3]])})}};G $1B={},$3z=18 e7(\'"2p $3z" is iG, iH "E" iI\');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},e8:D(a,b){G c=-a,aU=[],6B=C.3x();1R((c+=a)<6B.Y)aU.1f(6B.3w(c,c+a));E aU.1P(b)},iJ:D(c){G d=19;C.1j(D(a,b){d=d&&!!(c||1k.K)(a,b);if(!d)2p $1B;});E d},iK: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},6C: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},iL:D(d,e){G f=[];C.1j(D(a,b){G c=a.3u();if(c.1t(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},iM:D(b,c){c=c===1M?1h:c;E C.e8(b,D(a){1R(a.Y<b)a.1f(c);E a})},4v:D(c,d){C.1j(D(a,b){c=d(c,a,b)});E c},7C:D(b){G c=$A(1b).3w(1);E C.1P(D(a){E a[b].3V(a,c)})},5K: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},iN:D(c){G d=[],aV=[];C.1j(D(a,b){((c||1k.K)(a,b)?d:aV).1f(a)});E[d,aV]},5L:D(c){G d=[];C.1j(D(a,b){d.1f(a[c])});E d},6D:D(c){G d=[];C.1j(D(a,b){if(!c(a,b))d.1f(a)});E d},aW:D(e){E C.1P(D(a,b){E{1l:a,7E:e(a,b)}}).iO(D(c,d){G a=c.7E,b=d.7E;E a<b?-1:a>b?1:0}).5L(\'1l\')},3x:D(){E C.1P()},iP:D(){G c=1k.K,4s=$A(1b);if(1m 4s.2u()==\'D\')c=4s.iQ();G d=[C].2e(4s).1P($A);E C.1P(D(a,b){E c(d.5L(b))})},7F:D(){E C.3x().Y},2i:D(){E\'#<3f:\'+C.3x().2i()+\'>\'}};V.O(3f,{1P:3f.7B,e9:3f.6C,2B:3f.8Z,iR:3f.24,iS:3f.3x});G $A=1V.31=D(a){if(!a)E[];if(a.3x){E a.3x()}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.31=D(a){if(!a)E[];if(!(1m a==\'D\'&&a==\'[3X iT]\')&&a.3x){E a.3x()}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.aX)1V.1d.aX=1V.1d.5M;V.O(1V.1d,{3A:D(a){1g(G i=0,Y=C.Y;i<Y;i++)a(C[i])},ea:D(){C.Y=0;E C},3B:D(){E C[0]},2u:D(){E C[C.Y-1]},iU:D(){E C.2B(D(a){E a!=1h})},4g:D(){E C.4v([],D(a,b){E a.2e(b&&b.5j==1V?b.4g():[b])})},90: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},5M:D(a){E(a!==17?C:C.3x()).aX()},iV:D(){E C.Y>1?C:C[0]},iW:D(d){E C.4v([],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(\', \')+\']\'},2Z:D(){G c=[];C.1j(D(a){G b=V.2Z(a);if(b!==1M)c.1f(b)});E\'[\'+c.2j(\', \')+\']\'}});1V.1d.3x=1V.1d.3W;D $w(a){a=a.5h();E a?a.4w(/\\s+/):[]}if(1k.1X.aJ){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].5j==1V){1g(G j=0,eb=1b[i].Y;j<eb;j++)a.1f(1b[i][j])}1e{a.1f(1b[i])}}E a}}G 2K=D(a){if(a 4r 2K)C.ec(a);1e V.O(C,a||{})};V.O(2K,{5N:D(d){G e=[];e.41=1b.8U.ed;C.1d.3A.91(d,D(b){if(!b.4h)E;G c=b.1l;if(c&&1m c==\'3X\'){if(c.5j==1V)c.1j(D(a){e.41(b.4h,a)});E}e.41(b.4h,c)});E e.2j(\'&\')},2Z:D(c){G d=[];C.1d.3A.91(c,D(a){G b=V.2Z(a.1l);if(b!==1M)d.1f(a.4h.2Z()+\': \'+b)});E\'{\'+d.2j(\', \')+\'}\'}});2K.5N.ed=D(a,b,c){a=4Q(a);if(b===1M)C.1f(a);1e C.1f(a+\'=\'+(b==1h?\'\':4Q(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.4h=b;d.1l=c;a(d)}},aN:D(){E C.5L(\'4h\')},29:D(){E C.5L(\'1l\')},ec:D(c){E $H(c).4v(C,D(a,b){a[b.4h]=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.5j!=1V)a=[a];a.1f(b)}}92 C[1b[i]]}E a},5N:D(){E 2K.5N(C)},2i:D(){E\'#<2K:{\'+C.1P(D(a){E a.1P(V.2i).2j(\': \')}).2j(\', \')+\'}>\'},2Z:D(){E 2K.2Z(C)}});D $H(a){if(a 4r 2K)E a;E 18 2K(a)};if(D(){G i=0,aY=D(a){C.4h=a};aY.1d.4h=\'iX\';1g(G b in 18 aY(\'iY\'))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.4h=c;e.1l=d;a(e)}};93=1H.1E();V.O(93.1d,3f);V.O(93.1d,{1Q:D(a,b,c){C.1S=a;C.3g=b;C.ee=c},3A:D(a){G b=C.1S;1R(C.24(b)){a(b);b=b.aO()}},24:D(a){if(a<C.1S)E 17;if(C.ee)E a<C.3g;E a<=C.3g}});G $R=D(a,b,c){E 18 93(a,b,c)};G 1u={aZ:D(){E dL.dM(D(){E 18 ef()},D(){E 18 eg(\'iZ.eh\')},D(){E 18 eg(\'ei.eh\')})||17},b0:0};1u.6E={7G:[],3A:D(a){C.7G.3A(a)},94:D(a){if(!C.24(a))C.7G.1f(a)},b1:D(a){C.7G=C.7G.90(a)},95: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(1u.6E,3f);1u.6E.94({96:D(){1u.b0++},2g:D(){1u.b0--}});1u.2C=D(){};1u.2C.1d={5O:D(a){C.J={2S:\'7H\',5P:19,ej:\'b2/x-j0-1U-j1\',b3:\'j2-8\',3h:\'\'};V.O(C.J,a||{});C.J.2S=C.J.2S.2s();if(1m C.J.3h==\'2J\')C.J.3h=C.J.3h.8W()}};1u.4R=1H.1E();1u.4R.ek=[\'j3\',\'el\',\'j4\',\'j5\',\'b4\'];1u.4R.1d=V.O(18 1u.2C(),{b5:17,1Q:D(a,b){C.2l=1u.aZ();C.5O(b);C.97(a)},97:D(a){C.2T=a;C.2S=C.J.2S;G b=V.3W(C.J.3h);if(![\'6F\',\'7H\'].24(C.2S)){b[\'j6\']=C.2S;C.2S=\'7H\'}C.3h=b;if(b=2K.5N(b)){if(C.2S==\'6F\')C.2T+=(C.2T.24(\'?\')?\'&\':\'?\')+b;1e if(/j7|j8|dI/.3Z(5e.6w))b+=\'&3y=\'}2z{if(C.J.96)C.J.96(C.2l);1u.6E.95(\'96\',C,C.2l);C.2l.j9(C.2S.2f(),C.2T,C.J.5P);if(C.J.5P)3D(D(){C.b6(1)}.1o(C),10);C.2l.eo=C.b7.1o(C);C.ep();C.26=C.2S==\'7H\'?(C.J.ja||b):1h;C.2l.jb(C.26);if(!C.J.5P&&C.2l.eq)C.b7()}2H(e){C.7I(e)}},b7:D(){G a=C.2l.er;if(a>1&&!((a==4)&&C.b5))C.b6(C.2l.er)},ep:D(){G b={\'X-jc-jd\':\'ef\',\'X-1k-7o\':1k.7o,\'je\':\'3Y/b8, 3Y/jf, b2/es, 3Y/es, */*\'};if(C.2S==\'7H\'){b[\'et-1O\']=C.J.ej+(C.J.b3?\'; jg=\'+C.J.b3:\'\');if(C.2l.eq&&(5e.6w.1t(/7q\\/(\\d{4})/)||[0,eu])[1]<eu)b[\'jh\']=\'ji\'}if(1m C.J.ev==\'3X\'){G c=C.J.ev;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.4h]=a.1l})}1g(G d in b)C.2l.jj(d,b[d])},4S:D(){E!C.2l.98||(C.2l.98>=ew&&C.2l.98<jk)},b6:D(a){G b=1u.4R.ek[a];G c=C.2l,99=C.8X();if(b==\'b4\'){2z{C.b5=19;(C.J[\'5Q\'+C.2l.98]||C.J[\'5Q\'+(C.4S()?\'jl\':\'jm\')]||1k.4d)(c,99)}2H(e){C.7I(e)}G d=C.b9(\'et-1O\');if(d&&C.ba()&&d.5h().1t(/^(3Y|b2)\\/(x-)?(jn|jo)4q(;.*)?$/i))C.ey()}2z{(C.J[\'5Q\'+b]||1k.4d)(c,99);1u.6E.95(\'5Q\'+b,C,c,99)}2H(e){C.7I(e)}if(b==\'b4\'){C.2l.eo=1k.4d}},ba:D(){G m=C.2T.1t(/^\\s*jp?:\\/\\/[^\\/]*/);E!m||(m[0]==18 2R(\'#{bb}//#{bc}#{9a}\').3d({bb:bd.bb,bc:1c.bc,9a:bd.9a?\':\'+bd.9a:\'\'}))},b9:D(a){2z{E C.2l.jq(a)}2H(e){E 1h}},8X:D(){2z{G a=C.b9(\'X-e0\');E a?a.8X(!C.ba()):1h}2H(e){E 1h}},ey:D(){2z{E 7w((C.2l.5R||\'\').aT())}2H(e){C.7I(e)}},7I:D(a){(C.J.ez||1k.4d)(C,a);1u.6E.95(\'ez\',C,a)}});1u.9b=1H.1E();V.O(V.O(1u.9b.1d,1u.4R.1d),{1Q:D(c,d,e){C.5k={4S:(c.4S||c),7J:(c.7J||(c.4S?1h:c))};C.2l=1u.aZ();C.5O(e);G f=C.J.2g||1k.4d;C.J.2g=(D(a,b){C.eA();f(a,b)}).1o(C);C.97(d)},eA:D(){G a=C.5k[C.4S()?\'4S\':\'7J\'];G b=C.2l.5R;if(!C.J.4O)b=b.4u();if(a=$(a)){if(C.J.eB)18 C.J.eB(a,b);1e a.1G(b)}if(C.4S()){if(C.2g)3D(C.2g.1o(C),10)}}});1u.eC=1H.1E();1u.eC.1d=V.O(18 1u.2C(),{1Q:D(a,b,c){C.5O(c);C.2g=C.J.2g;C.4t=(C.J.4t||2);C.5S=(C.J.5S||1);C.be={};C.5k=a;C.2T=b;C.1S()},1S:D(){C.J.2g=C.eD.1o(C);C.4N()},2I:D(){C.be.J.2g=1M;9c(C.4f);(C.2g||1k.4d).3V(C,1b)},eD:D(a){if(C.J.5S){C.5S=(a.5R==C.eE?C.5S*C.J.5S:1);C.eE=a.5R}C.4f=3D(C.4N.1o(C),C.5S*C.4t*2Q)},4N:D(){C.be=18 1u.9b(C.5k,C.2T,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.jr(a);E N.O(a)}if(1k.5G.aK){1c.bf=D(a,b){G c=[];G d=1c.3d(a,$(b)||1c,1h,jt.ju,1h);1g(G i=0,Y=d.jv;i<Y;i++)c.1f(d.jw(i));E c};1c.6G=D(a,b){G q=".//*[7L(2e(\' \', @7M, \' \'), \' "+a+" \')]";E 1c.bf(q,b)}}1e{1c.6G=D(a,b){G c=($(b)||1c.26).3E(\'*\');G d=[],1Y,8Y=18 7v("(^|\\\\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.1t(8Y))d.1f(N.O(1Y))}E d}}if(!1p.N)G N={};N.O=D(a){G F=1k.5G;if(!a||!a.1N||a.3F==3||a.eF||F.aL||a==1p)E a;G b={},1N=a.1N,7N=N.O.7N,T=N.1v.4T;if(!F.7r){V.O(b,N.1v),V.O(b,N.1v.9d)}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.bg(d)}a.eF=1k.4d;E a};N.O.7N={bg:D(a){E C[a]=C[a]||D(){E a.3V(1h,[C].2e($A(1b)))}}};N.1v={9e:D(a){E $(a).12.3i!=\'42\'},bh:D(a){a=$(a);N[N.9e(a)?\'1Z\':\'2w\'](a);E a},1Z:D(a){$(a).12.3i=\'42\';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.3u();$(a).2r=b.4u();3D(D(){b.4O()},10);E a},1I:D(a,b){a=$(a);b=1m b==\'1M\'?\'\':b.3u();if(a.bi){a.bi=b.4u()}1e{G c=a.aM.eG();c.bj(a);a.1A.jx(c.eH(b.4u()),a)}3D(D(){b.4O()},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(),5T=a.2u();G c=(d[b]||\'\').3u();if(c)e+=\' \'+5T+\'=\'+c.2i(19)});E e+\'>\'},9f:D(a,b){a=$(a);G c=[];1R(a=a[b])if(a.3F==1)c.1f(N.O(a));E c},eI:D(a){E $(a).9f(\'1A\')},eJ:D(a){E $A($(a).3E(\'*\')).1j(N.O)},eK:D(a){a=$(a).4x;1R(a&&a.3F!=1)a=a.5U;E $(a)},eL:D(a){if(!(a=$(a).4x))E[];1R(a&&a.3F!=1)a=a.5U;if(a)E[a].2e($(a).7P());E[]},bk:D(a){E $(a).9f(\'bl\')},7P:D(a){E $(a).9f(\'5U\')},jy:D(a){a=$(a);E a.bk().5M().2e(a.7P())},1t:D(a,b){if(1m b==\'2J\')b=18 1i(b);E b.1t($(a))},jz:D(a,b,c){a=$(a);if(1b.Y==1)E $(a.1A);G d=a.eI();E b?1i.5l(d,b,c):d[c||0]},32:D(a,b,c){a=$(a);if(1b.Y==1)E a.eK();G d=a.eJ();E b?1i.5l(d,b,c):d[c||0]},jA:D(a,b,c){a=$(a);if(1b.Y==1)E $(1i.2m.7Q(a));G d=a.bk();E b?1i.5l(d,b,c):d[c||0]},jB:D(a,b,c){a=$(a);if(1b.Y==1)E $(1i.2m.7R(a));G d=a.7P();E b?1i.5l(d,b,c):d[c||0]},jC:D(){G a=$A(1b),M=$(a.8Q());E 1i.bm(M,a)},6G:D(a,b){E 1c.6G(b,a)},bn:D(a,b){a=$(a);if(1k.1X.4b){if(!a.eM)E 1h;G t=N.9g;if(t.29[b])E t.29[b](a,b);if(t.9h[b])b=t.9h[b];G c=a.eM[b];E c?c.5i:1h}E a.eN(b)},jD:D(a){E $(a).5V().1q},jE:D(a){E $(a).5V().1C},6H:D(a){E 18 N.9i(a)},bo:D(a,b){if(!(a=$(a)))E;G c=a.2v;if(c.Y==0)E 17;if(c==b||c.1t(18 7v("(^|\\\\s)"+b+"(\\\\s|$)")))E 19;E 17},4y:D(a,b){if(!(a=$(a)))E;N.6H(a).41(b);E a},5W:D(a,b){if(!(a=$(a)))E;N.6H(a).3C(b);E a},jF:D(a,b){if(!(a=$(a)))E;N.6H(a)[a.bo(b)?\'3C\':\'41\'](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()},6I:D(a){a=$(a);G b=a.4x;1R(b){G c=b.5U;if(b.3F==3&&!/\\S/.3Z(b.5i))a.7O(b);b=c}E a},7z:D(a){E $(a).2r.e4()},9j: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},1w:D(a,b){a=$(a);b=b==\'bp\'?\'9k\':b.6z();G c=a.12[b];if(!c){G d=1c.jG.jH(a,1h);c=d?d[b]:1h}if(b==\'2d\')E c?3H(c):1.0;E c==\'9l\'?1h:c},7T:D(a){E $(a).1w(\'2d\')},1J:D(a,b,c){a=$(a);G d=a.12;1g(G e in b)if(e==\'2d\')a.6J(b[e]);1e d[(e==\'bp\'||e==\'9k\')?(d.bq===1M?\'9k\':\'bq\'):(c?e:e.6z())]=b[e];E a},6J:D(a,b){a=$(a);a.12.2d=(b==1||b===\'\')?\'\':(b<0.bs)?0:b;E a},5V:D(a){a=$(a);G b=$(a).1w(\'3i\');if(b!=\'42\'&&b!=1h)E{1C:a.3I,1q:a.3j};G c=a.12;G d=c.5X;G e=c.1D;G f=c.3i;c.5X=\'5m\';c.1D=\'3k\';c.3i=\'jI\';G g=a.7U;G h=a.4U;c.3i=f;c.1D=e;c.5X=d;E{1C:g,1q:h}},3J:D(a){a=$(a);G b=N.1w(a,\'1D\');if(b==\'bt\'||!b){a.bu=19;a.12.1D=\'6K\';if(1p.4c){a.12.1r=0;a.12.1s=0}}E a},4z:D(a){a=$(a);if(a.bu){a.bu=1M;a.12.1D=a.12.1r=a.12.1s=a.12.3K=a.12.5Y=\'\'}E a},4A:D(a){a=$(a);if(a.6L)E a;a.6L=a.12.9m||\'9l\';if((N.1w(a,\'9m\')||\'9e\')!=\'5m\')a.12.9m=\'5m\';E a},4B:D(a){a=$(a);if(!a.6L)E a;a.12.9m=a.6L==\'9l\'?\'\':a.6L;a.6L=1h;E a}};V.O(N.1v,{eO:N.1v.9j,jJ:N.1v.eL});if(1k.1X.aJ){N.1v.bv=N.1v.1w;N.1v.1w=D(a,b){4M(b){1F\'1s\':1F\'1r\':1F\'5Y\':1F\'3K\':if(N.bv(a,\'1D\')==\'bt\')E 1h;5Z:E N.bv(a,b)}}}1e if(1k.1X.4b){N.1v.1w=D(a,b){a=$(a);b=(b==\'bp\'||b==\'9k\')?\'bq\':b.6z();G c=a.12[b];if(!c&&a.9n)c=a.9n[b];if(b==\'2d\'){if(c=(a.1w(\'7V\')||\'\').1t(/9o\\(2d=(.*)\\)/))if(c[1])E 3H(c[1])/3L;E 1.0}if(c==\'9l\'){if((b==\'1C\'||b==\'1q\')&&(a.1w(\'3i\')!=\'42\'))E a[\'2E\'+b.aS()]+\'1K\';E 1h}E c};N.1v.6J=D(a,b){a=$(a);G c=a.1w(\'7V\'),12=a.12;if(b==1||b===\'\'){12.7V=c.1I(/9o\\([^\\)]*\\)/gi,\'\');E a}1e if(b<0.bs)b=0;12.7V=c.1I(/9o\\([^\\)]*\\)/gi,\'\')+\'9o(2d=\'+(b*3L)+\')\';E a};N.1v.1G=D(b,c){b=$(b);c=1m c==\'1M\'?\'\':c.3u();G d=b.1N.2f();if([\'7W\',\'6M\',\'6N\',\'7X\'].24(d)){G e=1c.23(\'2O\');4M(d){1F\'7W\':1F\'6M\':e.2r=\'<2L><5n>\'+c.4u()+\'</5n></2L>\';9p=2;1B;1F\'6N\':e.2r=\'<2L><5n><9q>\'+c.4u()+\'</9q></5n></2L>\';9p=3;1B;1F\'7X\':e.2r=\'<2L><5n><9q><eP>\'+c.4u()+\'</eP></9q></5n></2L>\';9p=4}$A(b.2k).1j(D(a){b.7O(a)});9p.8R(D(){e=e.4x});$A(e.2k).1j(D(a){b.25(a)})}1e{b.2r=c.4u()}3D(D(){c.4O()},10);E b}}1e if(1k.1X.7q){N.1v.6J=D(a,b){a=$(a);a.12.2d=(b==1)?0.jK:(b===\'\')?\'\':(b<0.bs)?0:b;E a}}N.9g={9h:{jL:"jM",jN:"jO",jP:"jQ",jR:"jS",jT:"jU",jV:"jW",jX:"jY",jZ:"k0",eQ:"k1",k2:"k3"},29:{9r:D(a,b){E a.eN(b,2)},7Y:D(a,b){E $(a).4V(b)?b:1h},12:D(a){E a.12.eR.2s()},bw:D(a){G b=a.eS(\'bw\');E b.bx?b.5i:1h}}};(D(){V.O(C,{by:C.9r,4W:C.9r,1O:C.9r,2x:C.7Y,60:C.7Y,eQ:C.7Y,eT:C.7Y})}).91(N.9g.29);N.1v.9d={4V:D(a,b){G t=N.9g,14;b=t.9h[b]||b;14=$(a).eS(b);E 14&&14.bx}};N.1v.4T={};V.O(N,N.1v);if(!1k.5G.7r&&1c.23(\'2O\').7t){1p.7s={};1p.7s.1d=1c.23(\'2O\').7t;1k.5G.7r=19}N.4V=D(a,b){if(a.4V)E a.4V(b);E N.1v.9d.4V(a,b)};N.bz=D(g){G F=1k.5G,T=N.1v.4T;if(!g){V.O(1y,1y.1v);V.O(1y.N,1y.N.1v);V.O(N.1v.4T,{"eU":V.3W(1y.1v),"bA":V.3W(1y.N.1v),"bB":V.3W(1y.N.1v),"9s":V.3W(1y.N.1v)})}if(1b.Y==2){G h=g;g=1b[1]}if(!h)V.O(N.1v,g||{});1e{if(h.5j==1V)h.1j(O);1e O(h)}D O(a){a=a.2f();if(!N.1v.4T[a])N.1v.4T[a]={};V.O(N.1v.4T[a],g)}D 9t(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.bg(f)}}D eV(a){G b;G c={"bC":"k4","9s":"k5","P":"k6","eW":"k7","eX":"k8","eY":"k9","eZ":"ka","f0":"kb","f1":"6O","f2":"6O","f3":"6O","f4":"6O","f5":"6O","f6":"6O","Q":"kc","f7":"f8","f9":"f8","A":"kd","fa":"ke","bD":"kf","bE":"fb","bF":"fb","7W":"bG","bH":"bG","6M":"bG","6N":"kg","bI":"fc","7X":"fc","fd":"kh","fe":"ki"};if(c[a])b=\'9u\'+c[a]+\'N\';if(1p[b])E 1p[b];b=\'9u\'+a+\'N\';if(1p[b])E 1p[b];b=\'9u\'+a.aS()+\'N\';if(1p[b])E 1p[b];1p[b]={};1p[b].1d=1c.23(a).7t;E 1p[b]}if(F.7r){9t(N.1v,7s.1d);9t(N.1v.9d,7s.1d,19)}if(F.aL){1g(G i in N.1v.4T){G j=eV(i);if(1m j=="1M")3z;9t(T[i],j.1d)}}V.O(N,N.1v);92 N.4T};G kj={3i:N.bh};2Y.2M=D(a){C.bJ=a};2Y.2M.1d={1Q:D(a,b){C.M=$(a);C.7Z=b.4u();if(C.bJ&&C.M.ff){2z{C.M.ff(C.bJ,C.7Z)}2H(e){G c=C.M.1N.2f();if([\'6M\',\'6N\'].24(c)){C.6P(C.fg())}1e{2p e;}}}1e{C.28=C.M.aM.eG();if(C.6Q)C.6Q();C.6P([C.28.eH(C.7Z)])}3D(D(){b.4O()},10)},fg:D(){G a=1c.23(\'2O\');a.2r=\'<2L><5n>\'+C.7Z+\'</5n></2L>\';E $A(a.2k[0].2k[0].2k)}};G 2M=18 V();2M.fh=1H.1E();2M.fh.1d=V.O(18 2Y.2M(\'kk\'),{6Q:D(){C.28.kl(C.M)},6P:D(b){b.1j((D(a){C.M.1A.4X(a,C.M)}).1o(C))}});2M.fi=1H.1E();2M.fi.1d=V.O(18 2Y.2M(\'km\'),{6Q:D(){C.28.bj(C.M);C.28.fj(19)},6P:D(b){b.5M(17).1j((D(a){C.M.4X(a,C.M.4x)}).1o(C))}});2M.bK=1H.1E();2M.bK.1d=V.O(18 2Y.2M(\'kn\'),{6Q:D(){C.28.bj(C.M);C.28.fj(C.M)},6P:D(b){b.1j((D(a){C.M.25(a)}).1o(C))}});2M.bL=1H.1E();2M.bL.1d=V.O(18 2Y.2M(\'ko\'),{6Q:D(){C.28.kp(C.M)},6P:D(b){b.1j((D(a){C.M.1A.4X(a,C.M.5U)}).1o(C))}});N.9i=1H.1E();N.9i.1d={1Q:D(a){C.M=$(a)},3A:D(b){C.M.2v.4w(/\\s+/).2B(D(a){E a.Y>0}).3A(b)},bM:D(a){C.M.2v=a},41:D(a){if(C.24(a))E;C.bM($A(C).2e(a).2j(\' \'))},3C:D(a){if(!C.24(a))E;C.bM($A(C).90(a).2j(\' \'))},3u:D(){E $A(C).2j(\' \')}};V.O(N.9i.1d,3f);G 1i=1H.1E();1i.1d={1Q:D(a){C.5o=a.5h();C.fk()},fk:D(){if(1k.5G.aK&&!(/\\[[\\w-]*?:/).3Z(C.5o))E C.fl();G e=C.5o,6R=1i.9v,h=1i.2m,c=1i.7E,le,p,m;if(1i.61[e]){C.4i=1i.61[e];E}C.4i=["C.4i = D(fm) {","G r = fm, h = 1i.2m, c = 17, n;"];1R(e&&le!=e&&(/\\S/).3Z(e)){le=e;1g(G i in 6R){p=6R[i];if(m=e.1t(p)){C.4i.1f(1m c[i]==\'D\'?c[i](m):18 2R(c[i]).3d(m));e=e.1I(m[0],\'\');1B}}}C.4i.1f("E h.bN(n);\\n}");7w(C.4i.2j(\'\\n\'));1i.61[C.5o]=C.4i},fl:D(){G e=C.5o,6R=1i.9v,x=1i.2F,le,m;if(1i.61[e]){C.2F=1i.61[e];E}C.4i=[\'.//*\'];1R(e&&le!=e&&(/\\S/).3Z(e)){le=e;1g(G i in 6R){if(m=e.1t(6R[i])){C.4i.1f(1m x[i]==\'D\'?x[i](m):18 2R(x[i]).3d(m));e=e.1I(m[0],\'\');1B}}}C.2F=C.4i.2j(\'\');1i.61[C.5o]=C.2F},4j:D(a){a=a||1c;if(C.2F)E 1c.bf(C.2F,a);E C.4i(a)},1t:D(a){E C.4j(1c).24(a)},3u:D(){E C.5o},2i:D(){E"#<1i:"+C.5o.2i()+">"}};V.O(1i,{61:{},2F:{5p:"//*",1Y:"/*",6S:"/80-5q::*[1]",81:\'/80-5q::*\',1N:D(m){if(m[1]==\'*\')E\'\';E"[fn-3a()=\'"+m[1].2s()+"\' bO fn-3a()=\'"+m[1].2f()+"\']"},2v:"[7L(2e(\' \', @7M, \' \'), \' #{1} \')]",id:"[@id=\'#{1}\']",82:"[@#{1}]",4Y:D(m){m[3]=m[5]||m[6];E 18 2R(1i.2F.9w[m[2]]).3d(m)},83:D(m){G h=1i.2F.2t[m[1]];if(!h)E\'\';if(1m h===\'D\')E h(m);E 18 2R(1i.2F.2t[m[1]]).3d(m)},9w:{\'=\':"[@#{1}=\'#{3}\']",\'!=\':"[@#{1}!=\'#{3}\']",\'^=\':"[kq-5J(@#{1}, \'#{3}\')]",\'$=\':"[6A(@#{1}, (2J-Y(@#{1}) - 2J-Y(\'#{3}\') + 1))=\'#{3}\']",\'*=\':"[7L(@#{1}, \'#{3}\')]",\'~=\':"[7L(2e(\' \', @#{1}, \' \'), \' #{3} \')]",\'|=\':"[7L(2e(\'-\', @#{1}, \'-\'), \'-#{3}-\')]"},2t:{\'3B-1Y\':\'[4Z(bP-5q::*)]\',\'2u-1Y\':\'[4Z(80-5q::*)]\',\'43-1Y\':\'[4Z(bP-5q::* bO 80-5q::*)]\',\'7z\':"[9x(*) = 0 bQ (9x(3Y()) = 0 bO kr(3Y(), \' \\t\\r\\n\', \'\') = \'\')]",\'60\':"[@60]",\'2x\':"[@2x]",\'fo\':"[4Z(@2x)]",\'4Z\':D(m){G e=m[6],p=1i.9v,x=1i.2F,le,m,v;G a=[];1R(e&&le!=e&&(/\\S/).3Z(e)){le=e;1g(G i in p){if(m=e.1t(p[i])){v=1m x[i]==\'D\'?x[i](m):18 2R(x[i]).3d(m);a.1f("("+v.6A(1,v.Y-1)+")");e=e.1I(m[0],\'\');1B}}}E"[4Z("+a.2j(" bQ ")+")]"},\'2a-1Y\':D(m){E 1i.2F.2t.2a("(9x(./bP-5q::*) + 1) ",m)},\'2a-2u-1Y\':D(m){E 1i.2F.2t.2a("(9x(./80-5q::*) + 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)},\'43-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,62=m[6],bR;if(62==\'fp\')62=\'2n+0\';if(62==\'fq\')62=\'2n+1\';if(d=62.1t(/^(\\d+)$/))E\'[\'+c+"= "+d[1]+\']\';if(d=62.1t(/^(-?\\d*)?n(([+-])(\\d+))?/)){if(d[1]=="-")d[1]=-1;G a=d[1]?6x(d[1]):1;G b=d[2]?6x(d[2]):0;bR="[((#{bS} - #{b}) ks #{a} = 0) bQ "+"((#{bS} - #{b}) 2O #{a} >= 0)]";E 18 2R(bR).3d({bS: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;\',4Y:D(m){m[3]=(m[5]||m[6]);E 18 2R(\'n = h.4Y(n, r, "#{1}", "#{3}", "#{2}"); c = 17;\').3d(m)},83:D(m){if(m[6])m[6]=m[6].1I(/"/g,\'\\\\"\');E 18 2R(\'n = h.83(n, "#{1}", "#{6}", r, c); c = 17;\').3d(m)},5p:\'c = "5p";\',1Y:\'c = "1Y";\',6S:\'c = "6S";\',81:\'c = "81";\'},9v:{81:/^\\s*~\\s*/,1Y:/^\\s*>\\s*/,6S:/^\\s*\\+\\s*/,5p:/^\\s/,1N:/^\\s*(\\*|[\\w\\-]+)(\\b|$)?/,id:/^#([\\w\\-\\*]+)(\\b|$)/,2v:/^\\.([\\w\\-\\*]+)(\\b|$)/,83:/^:((3B|2u|2a|2a-2u|43)(-1Y|-2N-1O)|7z|60|(en|kt)ku|4Z)(\\((.*?)\\))?(\\b|$|\\s|(?=:))/,82:/^\\[([\\w]+)\\]/,4Y:/\\[((?:[\\w-]*:)?[\\w-]+)\\s*(?:([!^$*~|]?=)\\s*(([\'"])([^\\]]*?)\\4|([^\'"][^\\]]*?)))?\\]/},2m:{2e:D(a,b){1g(G i=0,14;14=b[i];i++)a.1f(14);E a},63:D(a){1g(G i=0,14;14=a[i];i++)14.4C=19;E a},5r:D(a){1g(G i=0,14;14=a[i];i++)14.4C=1M;E a},2q:D(a,b,c){a.4C=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.4C))14.9y=j++}}1e{1g(G i=0,j=1,d=a.2k;14=d[i];i++)if(14.3F==1&&(!c||14.4C))14.9y=j++}},bN: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]).4C){n.4C=19;b.1f(N.O(n))}E 1i.2m.5r(b)},5p: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,64=[],1Y;1Y=14.2k[j];j++)if(1Y.3F==1&&1Y.1N!=\'!\')1n.1f(1Y)}E 1n},6S: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.5U)if(a.3F==1)E a;E 1h},7Q:D(a){1R(a=a.bl)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=="5p"){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==\'5p\'){1g(G i=0,14;14=a[i];i++)if(N.9j(e,14))E[e]}1e if(d==\'6S\'){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.9j(e,b))?[e]:[]},2v:D(a,b,c,d){if(a&&d)a=C[d](a);E 1i.2m.fr(a,b,c)},fr:D(a,b,c){if(!a)a=1i.2m.5p([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.4V(14,c))d.1f(14);E d},4Y:D(a,b,c,d,e){if(!a)a=b.3E("*");G f=1i.9w[e],1n=[];1g(G i=0,14;14=a[i];i++){G g=N.bn(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},\'43-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)},\'43-2N-1O\':D(a,b,c){G p=1i.2t;E p[\'2u-2N-1O\'](p[\'3B-2N-1O\'](a,b,c),b,c)},fs:D(a,b,d){if(a==0)E b>0?[b]:[];E $R(1,d).4v([],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==\'fp\')d=\'2n+0\';if(d==\'fq\')d=\'2n+1\';G h=1i.2m,1n=[],bT=[],m;h.63(c);1g(G i=0,14;14=c[i];i++){if(!14.1A.4C){h.2q(14.1A,f,g);bT.1f(14.1A)}}if(d.1t(/^\\d+$/)){d=6x(d);1g(G i=0,14;14=c[i];i++)if(14.9y==d)1n.1f(14)}1e if(m=d.1t(/^(-?\\d*)?n(([+-])(\\d+))?/)){if(m[1]=="-")m[1]=-1;G a=m[1]?6x(m[1]):1;G b=m[2]?6x(m[2]):0;G k=1i.2t.fs(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.9y==k[j])1n.1f(14)}}h.5r(c);h.5r(bT);E 1n},\'7z\':D(a,b,c){1g(G i=0,1n=[],14;14=a[i];i++){if(14.1N==\'!\'||(14.4x&&!14.2r.1t(/^\\s*$/)))3z;1n.1f(14)}E 1n},\'4Z\':D(a,b,c){G h=1i.2m,kv,m;G d=18 1i(b).4j(c);h.63(d);1g(G i=0,1n=[],14;14=a[i];i++)if(!14.4C)1n.1f(14);h.5r(d);E 1n},\'fo\':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},\'60\':D(a,b,c){1g(G i=0,1n=[],14;14=a[i];i++)if(14.60)1n.1f(14);E 1n}},9w:{\'=\':D(a,v){E a==v},\'!=\':D(a,v){E a!=v},\'^=\':D(a,v){E a.e1(v)},\'$=\':D(a,v){E a.e2(v)},\'*=\':D(a,v){E a.24(v)},\'~=\':D(a,v){E(\' \'+a+\' \').24(\' \'+v+\' \')},\'|=\':D(a,v){E(\'-\'+a.2f()+\'-\').24(\'-\'+v.2f()+\'-\')}},ft:D(a,b){G c=18 1i(b).4j(),h=1i.2m;h.63(c);1g(G i=0,1n=[],M;M=a[i];i++)if(M.4C)1n.1f(M);h.5r(c);E 1n},5l:D(a,b,c){if(1m b==\'bU\'){c=b;b=17}E 1i.ft(a,b||\'*\')[c||0]},bm:D(a,b){G c=b.2j(\',\'),b=[];c.dQ(/(([\\w#:.~>+()\\s-]+|\\*|\\[.*?\\])+)\\s*(,|$)/,D(m){b.1f(m[1].5h())});G d=[],h=1i.2m;1g(G i=0,l=b.Y,65;i<l;i++){65=18 1i(b[i].5h());h.2e(d,65.4j(a))}E(l>1)?h.bN(d):d}});D $$(){E 1i.bm(1c,$A(1b))}G 1y={85:D(a){$(a).85();E a},fu:D(d,e){G f=d.4v({},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].5j!=1V)a[c]=[a[c]];a[c].1f(1l)}1e a[c]=1l}}E a});E e?f:2K.5N(f)}};1y.1v={4D:D(a,b){E 1y.fu(1y.6T(a),b)},6T:D(c){E $A($(c).3E(\'*\')).4v([],D(a,b){if(1y.N.86[b.1N.2s()])a.1f(N.O(b));E a})},kw:D(a,b,c){a=$(a);G d=a.3E(\'67\');if(!b&&!c)E $A(d).1P(N.O);1g(G i=0,bV=[],Y=d.Y;i<Y;i++){G e=d[i];if((b&&e.1O!=b)||(c&&e.3a!=c))3z;bV.1f(N.O(e))}E bV},9z:D(a){a=$(a);1y.6T(a).7C(\'9z\');E a},9A:D(a){a=$(a);1y.6T(a).7C(\'9A\');E a},fv:D(b){E $(b).6T().e9(D(a){E a.1O!=\'5m\'&&!a.2x&&[\'67\',\'2B\',\'68\'].24(a.1N.2s())})},kx:D(a){a=$(a);a.fv().5s();E a},97:D(a,b){a=$(a),b=V.3W(b||{});G c=b.3h;b.3h=a.4D(19);if(c){if(1m c==\'2J\')c=c.8W();V.O(b.3h,c)}if(a.4V(\'2S\')&&!b.2S)b.2S=a.2S;E 18 1u.4R(a.bn(\'ky\'),b)}};1y.N={6U:D(a){$(a).6U();E a},2B:D(a){$(a).2B();E a}};1y.N.1v={4D:D(a){a=$(a);if(!a.2x&&a.3a){G b=a.3l();if(b!=1M){G c={};c[a.3a]=b;E 2K.5N(c)}}E\'\'},3l:D(a){a=$(a);G b=a.1N.2s();E 1y.N.86[b](a)},ea:D(a){$(a).1l=\'\';E a},kz:D(a){E $(a).1l!=\'\'},5s:D(a){a=$(a);2z{a.6U();if(a.2B&&(a.1N.2s()!=\'67\'||![\'bW\',\'85\',\'bX\'].24(a.1O)))a.2B()}2H(e){}E a},9z:D(a){a=$(a);a.fw();a.2x=19;E a},9A:D(a){a=$(a);a.2x=17;E a}};G 87=1y.N;G $F=1y.N.1v.3l;1y.N.86={67:D(a){4M(a.1O.2s()){1F\'fx\':1F\'fy\':E 1y.N.86.fz(a);5Z:E 1y.N.86.68(a)}},fz:D(a){E a.60?a.1l:1h},68:D(a){E a.1l},2B:D(a){E C[a.1O==\'2B-kA\'?\'fA\':\'fB\'](a)},fA:D(a){G b=a.kB;E b>=0?C.bY(a.J[b]):1h},fB: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.69)b.1f(C.bY(c))}E b},bY:D(a){E N.O(a).4V(\'1l\')?a.1l:a.3Y}};2Y.9B=D(){};2Y.9B.1d={1Q:D(a,b,c){C.4t=b;C.M=$(a);C.3e=c;C.3m=C.3l();C.5H()},5H:D(){8T(C.4N.1o(C),C.4t*2Q)},4N: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.3e(C.M,a);C.3m=a}}};1y.N.9C=1H.1E();1y.N.9C.1d=V.O(18 2Y.9B(),{3l:D(){E 1y.N.3l(C.M)}});1y.9C=1H.1E();1y.9C.1d=V.O(18 2Y.9B(),{3l:D(){E 1y.4D(C.M)}});2Y.5t=D(){};2Y.5t.1d={1Q:D(a,b){C.M=$(a);C.3e=b;C.3m=C.3l();if(C.M.1N.2s()==\'1U\')C.fC();1e C.5H(C.M)},bZ:D(){G a=C.3l();if(C.3m!=a){C.3e(C.M,a);C.3m=a}},fC:D(){1y.6T(C.M).1j(C.5H.1o(C))},5H:D(a){if(a.1O){4M(a.1O.2s()){1F\'fx\':1F\'fy\':1a.21(a,\'6V\',C.bZ.1o(C));1B;5Z:1a.21(a,\'88\',C.bZ.1o(C));1B}}}};1y.N.5t=1H.1E();1y.N.5t.1d=V.O(18 2Y.5t(),{3l:D(){E 1y.N.3l(C.M)}});1y.5t=1H.1E();1y.5t.1d=V.O(18 2Y.5t(),{3l:D(){E 1y.4D(C.M)}});if(!1p.1a){G 1a=18 V()}V.O(1a,{kC:8,c0:9,c1:13,c2:27,fD:37,fE:38,fF:39,fG:40,kD:46,kE:36,kF:35,kG:33,kH:34,M:D(a){E $(a.kI||a.kJ)},c3:D(a){E(((a.fH)&&(a.fH==1))||((a.bW)&&(a.bW==1)))},6a:D(a){E a.kK||(a.kL+(1c.3n.44||1c.26.44))},6b:D(a){E a.kM||(a.kN+(1c.3n.3M||1c.26.3M))},2I:D(a){if(a.fI){a.fI();a.kO()}1e{a.kP=17;a.kQ=19}},5l:D(a,b){G c=1a.M(a);1R(c.1A&&(!c.1N||(c.1N.2f()!=b.2f())))c=c.1A;E c},2U:17,fJ:D(a,b,c,d){if(!C.2U)C.2U=[];if(a.fK){C.2U.1f([a,b,c,d]);a.fK(b,c,d)}1e if(a.7p){C.2U.1f([a,b,c,d]);a.7p(\'5Q\'+b,c)}},fL:D(){if(!1a.2U)E;1g(G i=0,Y=1a.2U.Y;i<Y;i++){1a.2D.3V(C,1a.2U[i]);1a.2U[i][0]=1h}1a.2U=17},21:D(a,b,c,d){a=$(a);d=d||17;if(b==\'89\'&&(1k.1X.3U||a.7p))b=\'fM\';1a.fJ(a,b,c,d)},2D:D(a,b,c,d){a=$(a);d=d||17;if(b==\'89\'&&(1k.1X.3U||a.7p))b=\'fM\';if(a.fN){a.fN(b,c,d)}1e if(a.fO){2z{a.fO(\'5Q\'+b,c)}2H(e){}}}});if(1k.1X.4b)1a.21(1p,\'kR\',1a.fL,17);G 1x={fP:17,51:D(){C.8a=1p.kS||1c.3n.44||1c.26.44||0;C.8b=1p.kT||1c.3n.3M||1c.26.3M||0},c4:D(a){G b=0,2V=0;do{b+=a.3M||0;2V+=a.44||0;a=a.1A}1R(a);E[2V,b]},3G:D(a){G b=0,2V=0;do{b+=a.52||0;2V+=a.5u||0;a=a.4E}1R(a);E[2V,b]},fQ:D(a){G b=0,2V=0;do{b+=a.52||0;2V+=a.5u||0;a=a.4E;if(a){if(a.1N==\'9D\')1B;G p=N.1w(a,\'1D\');if(p==\'6K\'||p==\'3k\')1B}}1R(a);E[2V,b]},4E:D(a){if(a.4E)E a.4E;if(a==1c.26)E a;1R((a=a.1A)&&a!=1c.26)if(N.1w(a,\'1D\')!=\'bt\')E a;E 1c.26},c5:D(a,x,y){if(C.fP)E C.fR(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)},fR:D(a,x,y){G b=C.c4(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==\'6W\')E((C.2E[1]+b.3j)-C.8d)/b.3j;if(a==\'9E\')E((C.2E[0]+b.3I)-C.8c)/b.3I},9F:D(a){G b=0,2V=0;G c=a;do{b+=c.52||0;2V+=c.5u||0;if(c.4E==1c.26)if(N.1w(c,\'1D\')==\'3k\')1B}1R(c=c.4E);c=a;do{if(!1p.4c||c.1N==\'9D\'){b-=c.3M||0;2V-=c.44||0}}1R(c=c.1A);E[2V,b]},3W:D(a,b){G c=V.O({fS:19,c6:19,fT:19,c7:19,52:0,5u:0},1b[2]||{});a=$(a);G p=1x.9F(a);b=$(b);G d=[0,0];G e=1h;if(N.1w(b,\'1D\')==\'3k\'){e=1x.4E(b);d=1x.9F(e)}if(e==1c.26){d[0]-=1c.26.5u;d[1]-=1c.26.52}if(c.fS)b.12.1s=(p[0]-d[0]+c.5u)+\'1K\';if(c.c6)b.12.1r=(p[1]-d[1]+c.52)+\'1K\';if(c.fT)b.12.1C=a.3I+\'1K\';if(c.c7)b.12.1q=a.3j+\'1K\'},c8:D(a){a=$(a);if(a.12.1D==\'3k\')E;1x.51();G b=1x.fQ(a);G c=b[1];G d=b[0];G e=a.7U;G f=a.4U;a.fU=d-3H(a.12.1s||0);a.fV=c-3H(a.12.1r||0);a.fW=a.12.1C;a.fX=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\'},fY:D(a){a=$(a);if(a.12.1D==\'6K\')E;1x.51();a.12.1D=\'6K\';G b=3H(a.12.1r||0)-(a.fV||0);G c=3H(a.12.1s||0)-(a.fU||0);a.12.1r=b+\'1K\';a.12.1s=c+\'1K\';a.12.1q=a.fX;a.12.1C=a.fW}};if(1k.1X.3U){1x.3G=D(a){G b=0,2V=0;do{b+=a.52||0;2V+=a.5u||0;if(a.4E==1c.26)if(N.1w(a,\'1D\')==\'3k\')1B;a=a.4E}1R(a);E[2V,b]}}N.bz();G 8e={7o:"1.7.kU",fZ:D(a){1c.kV("<4q 1O=\\"3Y/b8\\" 4W=\\""+a+"\\"></"+"4q>")},c9:"1.5.1",ca:D(){D cb(a){G r=a.4w(".");E 3O(r[0])*kW+3O(r[1])*2Q+3O(r[2])}if(1m 1k=="1M"||1m N=="1M"||1m N.1v=="1M"||cb(1k.7o)<cb(8e.c9)){2p"4q.9G.9H 9I g0 1k kX kY >= "+8e.c9;}G d=/(kZ|l0)l1[a-g1-9.3y-]*\\.js(\\?.*)?$/;$A(1c.3E("4q")).8Z(D(s){E s.4W&&s.4W.1t(d)}).1j(D(s){G b=s.4W.1I(d,"");G c=(s.4W.1t(/\\?.*ca=([a-z,]*)/)||[,""])[1];c.4w(",").90("").1j(D(a){8e.fZ(b+a+".js")})})}};G 53={g2:{g3:"1P",bD:"2L",bE:"2L",bF:"2L",g4:"l2",bC:"2B",cc:"2B",g5:"3X",6M:"2L",7X:"2L",bH:"2L",bI:"2L",7W:"2L",6N:"2L"},14:D(a){a=a.2f();G b=C.g2[a]||"2O";G c=1c.23(b);2z{c.2r="<"+a+"></"+a+">"}2H(e){}G d=c.4x||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.9J(1b[1])||1b[1]4r 1V||1b[1].1N){C.cd(d,1b[1])}1e{G f=C.g6(1b[1]);if(f.Y){2z{c.2r="<"+a+" "+f+"></"+a+">"}2H(e){}d=c.4x||1h;if(!d){d=1c.23(a);1g(4Y in 1b[1]){d[4Y=="7M"?"2v":4Y]=1b[1][4Y]}}if(d.1N.2f()!=a){d=c.3E(a)[0]}}}}if(1b[2]){C.cd(d,1b[2])}E d},ce:D(a){E 1c.4P(a)},cf:{2v:"7M",l3:"1g"},g6:D(a){G b=[];1g(5T in a){b.1f((5T in C.cf?C.cf[5T]:5T)+"=\\""+a[5T].3u().7x().3v(/"/,"&l4;")+"\\"")}E b.2j(" ")},cd:D(a,b){if(b.1N){a.25(b);E}if(1m b=="3X"){b.4g().1j(D(e){if(1m e=="3X"){a.25(e)}1e if(53.9J(e)){a.25(53.ce(e))}})}1e if(53.9J(b)){a.25(53.ce(b))}},9J:D(a){E 1m a=="2J"||1m a=="bU"},l5:D(a){G b=C.14("2O");$(b).1G(a.5h());E b.32()},l6:D(b){if(1m b!="3X"&&1m b!="D"){b=1p}G c="A l7 l8 l9 la g3 B lb lc ld lf lg 9D lh g7 bD lj lk ll bE bF lm f9 ln f0 g8 eZ lo lp eW lq eU lr fd f1 f2 f3 f4 f5 f6 ls lu 9u I fe fa bA f7 lv lw lx g4 cg ly lz lA lB lC lD lE eY bC cc P g5 lF Q S lG lH bB lI lJ lK lL lM lN lO lP 6M 7X 9s bH bI 7W lQ 6N lR U eX lS".4w(/\\s+/);c.1j(D(a){b[a]=D(){E 53.14.3V(53,[a].2e($A(1b)))}})}};2A.1d.5v=D(){G a="#";if(C.3w(0,4)=="lT("){G b=C.3w(4,C.Y-1).4w(",");G i=0;do{a+=3O(b[i]).6y()}1R(++i<3)}1e{if(C.3w(0,1)=="#"){if(C.Y==4){1g(G i=1;i<4;i++){a+=(C.5I(i)+C.5I(i)).2s()}}if(C.Y==7){a=C.2s()}}}E a.Y==7?a:1b[0]||C};N.9K=D(b){E $A($(b).2k).7B(D(a){E a.3F==3?a.5i:a.ch()?N.9K(a):""}).4g().2j("")};N.9L=D(b,c){E $A($(b).2k).7B(D(a){E a.3F==3?a.5i:a.ch()&&!N.bo(a,c)?N.9L(a,c):""}).4g().2j("")};N.g9=D(a,b){a=$(a);a.1J({6c:b/3L+"em"});if(1k.1X.3U){1p.ci(0,0)}E a};N.54=D(a){E $(a).12.2d||""};N.cj=D(a){2z{a=$(a);G n=1c.4P(" ");a.25(n);a.7O(n)}2H(e){}};1V.1d.91=D(){G a=1b;C.1j(D(f){f.3V(C,a)})};G 11={6X:{3a:"lU",lV:"lW bx lX M lY 4Z lZ, m0 is m1 1g C 6Y 3o m2"},ga:D(c){if(1m 53=="1M"){2p"11.ga 9I ck 4q.9G.9H\' m3.js cl";}G d="1D:6K";if(1k.1X.4b){d+=";cn:1"}c=$(c);$A(c.2k).1j(D(b){if(b.3F==3){b.5i.3x().1j(D(a){c.4X(53.14("m4",{12:d},a==" "?2A.dW(m5):a),b)});N.3C(b)}})},eT:D(c,d){G e;if((1m c=="3X"||1m c=="D")&&c.Y){e=c}1e{e=$(c).2k}G f=V.O({gb: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.gb+g}))})},co:{m6:["gc","gd"],m7:["ge","gf"],gg:["9M","cp"]},bh:D(a,b){a=$(a);b=(b||"gg").2s();G c=V.O({3Q:{1D:"3g",8f:a.id||"8g",cq:1}},1b[2]||{});11[a.9e()?11.co[b][1]:11.co[b][0]](a,c)}};G m8=11;11.45={gh:1k.K,6d:D(a){E-1T.cr(a*1T.cs)/2+0.5},5M:D(a){E 1-a},gj:D(a){G a=-1T.cr(a*1T.cs)/4+0.75+1T.m9()/4;E a>1?1:a},ma:D(a){E-1T.cr(a*1T.cs*(9*a))/2+0.5},gk:D(a,b){b=b||5;E 1T.3p(a%(1/b)*b)==0?a*b*2-1T.gl(a*b*2):1-(a*b*2-1T.gl(a*b*2))},42:D(a){E 0},gm:D(a){E 1}};11.ct=1H.1E();V.O(V.O(11.ct.1d,3f),{1Q:D(){C.22=[];C.8h=1h},3A:D(a){C.22.3A(a)},41:D(a){G b=(18 7u).gn();G c=1m a.J.3Q=="2J"?a.J.3Q:a.J.3Q.1D;4M(c){1F"mb":C.22.8Z(D(e){E e.6Z=="cu"}).1j(D(e){e.5w+=a.5x;e.5x+=a.5x});1B;1F"5J-2u":b=C.22.5L("5w").5K()||b;1B;1F"3g":b=C.22.5L("5x").5K()||b;1B;5Z:}a.5w+=b;a.5x+=b;if(!a.J.3Q.cq||C.22.Y<a.J.3Q.cq){C.22.1f(a)}if(!C.8h){C.8h=8T(C.70.1o(C),15)}},3C:D(a){C.22=C.22.6D(D(e){E e==a});if(C.22.Y==0){aP(C.8h);C.8h=1h}},70:D(){G a=(18 7u).gn();1g(G i=0,7y=C.22.Y;i<7y;i++){C.22[i]&&C.22[i].70(a)}}});11.9N={9O:$H(),6F:D(a){if(1m a!="2J"){E a}if(!C.9O[a]){C.9O[a]=18 11.ct}E C.9O[a]}};11.mc=11.9N.6F("8g");11.go={3R:11.45.6d,2o:1,gp:3L,3q:17,31:0,3o:1,3P:0,3Q:"md"};11.2C=D(){};11.2C.1d={1D:1h,1S:D(c){D 8i(a,b){E(a[b+"9P"]?"C.J."+b+"9P(C);":"")+(a[b]?"C.J."+b+"(C);":"")}if(c.3R===17){c.3R=11.45.gh}C.J=V.O(V.O({},11.go),c||{});C.cv=0;C.6Z="cu";C.5w=C.J.3P*2Q;C.5x=C.5w+C.J.2o*2Q;C.gq=C.J.3o-C.J.31;C.gr=C.5x-C.5w;C.gs=C.J.gp*C.J.2o;7w("C.4F = D(8j){ "+"if(C.6Z==\\"cu\\"){C.6Z=\\"gu\\";"+8i(c,"6e")+(C.6f?"C.6f();":"")+8i(c,"cw")+"};if(C.6Z==\\"gu\\"){"+"8j=C.J.3R(8j)*"+C.gq+"+"+C.J.31+";"+"C.1D=8j;"+8i(c,"me")+(C.1G?"C.1G(8j);":"")+8i(c,"mf")+"}}");C.4e("mg");if(!C.J.3q){11.9N.6F(1m C.J.3Q=="2J"?"8g":C.J.3Q.8f).41(C)}},70:D(a){if(a>=C.5w){if(a>=C.5x){C.4F(1);C.71();C.4e("gv");if(C.6g){C.6g()}C.4e("cx");E}G b=(a-C.5w)/C.gr,cy=1T.3p(b*C.gs);if(cy>C.cv){C.4F(b);C.cv=cy}}},71:D(){if(!C.J.3q){11.9N.6F(1m C.J.3Q=="2J"?"8g":C.J.3Q.8f).3C(C)}C.6Z="mh"},4e:D(a){if(C.J[a+"9P"]){C.J[a+"9P"](C)}if(C.J[a]){C.J[a](C)}},2i:D(){G a=$H();1g(9Q in C){if(1m C[9Q]!="D"){a[9Q]=C[9Q]}}E"#<11:"+a.2i()+",J:"+$H(C.J).2i()+">"}};11.6h=1H.1E();V.O(V.O(11.6h.1d,11.2C.1d),{1Q:D(a){C.22=a||[];C.1S(1b[1])},1G:D(a){C.22.7C("4F",a)},6g:D(b){C.22.1j(D(a){a.4F(1);a.71();a.4e("gv");if(a.6g){a.6g(b)}a.4e("cx")})}});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.4d});11.4k=1H.1E();V.O(V.O(11.4k.1d,11.2C.1d),{1Q:D(a){C.M=$(a);if(!C.M){2p 11.6X;}if(1k.1X.4b&&!C.M.9n.gw){C.M.1J({cn:1})}G b=V.O({31:C.M.7T()||0,3o:1},1b[1]||{});C.1S(b)},1G:D(a){C.M.6J(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.6X;}G b=V.O({x:0,y:0,gx:"6K"},1b[1]||{});C.1S(b)},6f:D(){C.M.3J();C.8k=3H(C.M.1w("1s")||"0");C.8l=3H(C.M.1w("1r")||"0");if(C.J.gx=="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.mi=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.6X;}G c=V.O({4G:19,8m:19,4H:19,9R:17,55:"cz",6i:3L,gy:b},1b[2]||{});C.1S(c)},6f:D(){C.47=C.J.47||17;C.gz=C.M.1w("1D");C.cA={};["1r","1s","1C","1q","6c"].1j((D(k){C.cA[k]=C.M.12[k]}).1o(C));C.8l=C.M.52;C.8k=C.M.5u;G b=C.M.1w("mj-7F")||"3L%";["em","1K","%","gA"].1j((D(a){if(b.2y(a)>0){C.6c=3H(b);C.gB=a}}).1o(C));C.gC=(C.J.gy-C.J.6i)/3L;C.4l=1h;if(C.J.55=="cz"){C.4l=[C.M.3j,C.M.3I]}if(/^7Z/.3Z(C.J.55)){C.4l=[C.M.gD,C.M.mk]}if(!C.4l){C.4l=[C.J.55.9S,C.J.55.9T]}},1G:D(a){G b=C.J.6i/3L+C.gC*a;if(C.J.4H&&C.6c){C.M.1J({6c:C.6c*b+C.gB})}C.gE(C.4l[0]*b,C.4l[1]*b)},6g:D(a){if(C.47){C.M.1J(C.cA)}},gE:D(a,b){G d={};if(C.J.4G){d.1C=1T.3p(b)+"1K"}if(C.J.8m){d.1q=1T.3p(a)+"1K"}if(C.J.9R){G c=(a-C.4l[0])/2;G e=(b-C.4l[1])/2;if(C.gz=="3k"){if(C.J.8m){d.1r=C.8l-c+"1K"}if(C.J.4G){d.1s=C.8k-e+"1K"}}1e{if(C.J.8m){d.1r=-c+"1K"}if(C.J.4G){d.1s=-e+"1K"}}}C.M.1J(d)}});11.9U=1H.1E();V.O(V.O(11.9U.1d,11.2C.1d),{1Q:D(a){C.M=$(a);if(!C.M){2p 11.6X;}G b=V.O({9V:"#ml"},1b[1]||{});C.1S(b)},6f:D(){if(C.M.1w("3i")=="42"){C.71();E}C.cB={};if(!C.J.mn){C.cB.gF=C.M.1w("9W-mo");C.M.1J({gF:"42"})}if(!C.J.9X){C.J.9X=C.M.1w("9W-56").5v("#gG")}if(!C.J.9Y){C.J.9Y=C.M.1w("9W-56")}C.cC=$R(0,2).1P((D(i){E 3O(C.J.9V.3w(i*2+1,i*2+3),16)}).1o(C));C.gH=$R(0,2).1P((D(i){E 3O(C.J.9X.3w(i*2+1,i*2+3),16)-C.cC[i]}).1o(C))},1G:D(a){C.M.1J({57:$R(0,2).4v("#",(D(m,v,i){E m+1T.3p(C.cC[i]+C.gH[i]*a).6y()}).1o(C))})},6g:D(){C.M.1J(V.O(C.cB,{57:C.J.9Y}))}});11.gI=1H.1E();V.O(V.O(11.gI.1d,11.2C.1d),{1Q:D(a){C.M=$(a);C.1S(1b[1]||{})},6f:D(){1x.51();G a=1x.3G(C.M);if(C.J.2E){a[1]+=C.J.2E}G b=1p.cD?1p.1q-1p.cD:1c.26.gD-(1c.3n.4U?1c.3n.4U:1c.26.4U);C.cE=1x.8b;C.72=(a[1]>b?b:a[1])-C.cE},1G:D(a){1x.51();1p.7S(1x.8a,C.cE+a*C.72)}});11.cp=D(b){b=$(b);G c=b.54();G d=V.O({31: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.4k(b,d)};11.9M=D(b){b=$(b);G c=V.O({31:b.1w("3i")=="42"?0:b.7T()||0,3o:1,2b:D(a){a.M.cj()},6e:D(a){a.M.6J(a.J.31).2w()}},1b[1]||{});E 18 11.4k(b,c)};11.mp=D(b){b=$(b);G c={2d:b.54(),1D:b.1w("1D"),1r:b.12.1r,1s:b.12.1s,1C:b.12.1C,1q:b.12.1q};E 18 11.6h([18 11.3S(b,ew,{3q:19,9R:19,4H:19,47:19}),18 11.4k(b,{3q:19,3o:0})],V.O({2o:1,mq:D(a){1x.c8(a.22[0].M)},2b:D(a){a.22[0].M.1Z().1J(c)}},1b[1]||{}))};11.gf=D(b){b=$(b);b.4A();E 18 11.3S(b,0,V.O({4H:17,4G:17,47:19,2b:D(a){a.M.1Z().4B()}},1b[1]||{}))};11.ge=D(b){b=$(b);G c=b.5V();E 18 11.3S(b,3L,V.O({4H:17,4G:17,6i:0,55:{9S:c.1q,9T:c.1C},47:19,cw:D(a){a.M.4A().1J({1q:"cF"}).2w()},2b:D(a){a.M.4B()}},1b[1]||{}))};11.mr=D(c){c=$(c);G d=c.54();E 18 11.9M(c,V.O({2o:0.4,31:0,3R:11.45.gj,2b:D(b){18 11.3S(b.M,1,{2o:0.3,9R:19,4G:17,4H:17,47:19,6e:D(a){a.M.3J().4A()},2b:D(a){a.M.1Z().4B().4z().1J({2d:d})}})}},1b[1]||{}))};11.ms=D(b){b=$(b);G c={1r:b.1w("1r"),1s:b.1w("1s"),2d:b.54()};E 18 11.6h([18 11.3r(b,{x:0,y:3L,3q:19}),18 11.4k(b,{3q:19,3o:0})],V.O({2o:0.5,6e:D(a){a.22[0].M.3J()},2b:D(a){a.22[0].M.1Z().4z().1J(c)}},1b[1]||{}))};11.mt=D(g){g=$(g);G h={1r:g.1w("1r"),1s:g.1w("1s")};E 18 11.3r(g,{x:20,y:0,2o:0.gJ,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.gJ,2b:D(a){a.M.4z().1J(h)}})}})}})}})}})}})};11.gc=D(b){b=$(b).6I();G c=b.32().1w("3K");G d=b.5V();E 18 11.3S(b,3L,V.O({4H:17,4G:17,6i:1p.4c?0:1,55:{9S:d.1q,9T:d.1C},47:19,cw:D(a){a.M.3J();a.M.32().3J();if(1p.4c){a.M.1J({1r:""})}a.M.4A().1J({1q:"cF"}).2w()},gK:D(a){a.M.32().1J({3K:a.4l[0]-a.M.4U+"1K"})},2b:D(a){a.M.4B().4z();a.M.32().4z().1J({3K:c})}},1b[1]||{}))};11.gd=D(b){b=$(b).6I();G c=b.32().1w("3K");E 18 11.3S(b,1p.4c?0:1,V.O({4H:17,4G:17,55:"cz",6i:3L,47:19,gL:D(a){a.M.3J();a.M.32().3J();if(1p.4c){a.M.1J({1r:""})}a.M.4A().2w()},gK:D(a){a.M.32().1J({3K:a.4l[0]-a.M.4U+"1K"})},2b:D(a){a.M.1Z().4B().4z().1J({3K:c});a.M.32().4z()}},1b[1]||{}))};11.mu=D(b){E 18 11.3S(b,1p.4c?1:0,{47:19,6e:D(a){a.M.4A()},2b:D(a){a.M.1Z().4B()}})};11.mv=D(c){c=$(c);G d=V.O({9Z:"a0",a1:11.45.6d,a2:11.45.6d,a3:11.45.gm},1b[1]||{});G e={1r:c.12.1r,1s:c.12.1s,1q:c.12.1q,1C:c.12.1C,2d:c.54()};G f=c.5V();G g,6j;G h,3s;4M(d.9Z){1F"1r-1s":g=6j=h=3s=0;1B;1F"1r-5Y":g=f.1C;6j=3s=0;h=-f.1C;1B;1F"3K-1s":g=h=0;6j=f.1q;3s=-f.1q;1B;1F"3K-5Y":g=f.1C;6j=f.1q;h=-f.1C;3s=-f.1q;1B;1F"a0":g=f.1C/2;6j=f.1q/2;h=-f.1C/2;3s=-f.1q/2;1B;5Z:}E 18 11.3r(c,{x:g,y:6j,2o:0.mw,6e:D(a){a.M.1Z().4A().3J()},2b:D(b){18 11.6h([18 11.4k(b.M,{3q:19,3o:1,31:0,3R:d.a3}),18 11.3r(b.M,{x:h,y:3s,3q:19,3R:d.a1}),18 11.3S(b.M,3L,{55:{9S:f.1q,9T:f.1C},3q:19,6i:1p.4c?1:0,3R:d.a2,47:19})],V.O({6e:D(a){a.22[0].M.1J({1q:"cF"}).2w()},2b:D(a){a.22[0].M.4B().4z().1J(e)}},d))}})};11.mx=D(b){b=$(b);G c=V.O({9Z:"a0",a1:11.45.6d,a2:11.45.6d,a3:11.45.42},1b[1]||{});G d={1r:b.12.1r,1s:b.12.1s,1q:b.12.1q,1C:b.12.1C,2d:b.54()};G e=b.5V();G f,3s;4M(c.9Z){1F"1r-1s":f=3s=0;1B;1F"1r-5Y":f=e.1C;3s=0;1B;1F"3K-1s":f=0;3s=e.1q;1B;1F"3K-5Y":f=e.1C;3s=e.1q;1B;1F"a0":f=e.1C/2;3s=e.1q/2;1B;5Z:}E 18 11.6h([18 11.4k(b,{3q:19,3o:0,31:1,3R:c.a3}),18 11.3S(b,1p.4c?1:0,{3q:19,3R:c.a2,47:19}),18 11.3r(b,{x:f,y:3s,3q:19,3R:c.a1})],V.O({gL:D(a){a.22[0].M.3J().4A()},2b:D(a){a.22[0].M.1Z().4B().4z().1J(d)}},c))};11.my=D(b){b=$(b);G c=1b[1]||{};G d=b.54();G e=c.3R||11.45.6d;G f=D(a){E e(1-11.45.gk(a,c.mz))};f.1o(e);E 18 11.4k(b,V.O(V.O({2o:2,31:0,2b:D(a){a.M.1J({2d:d})}},c),{3R:f}))};11.mA=D(c){c=$(c);G d={1r:c.12.1r,1s:c.12.1s,1C:c.12.1C,1q:c.12.1q};c.4A();E 18 11.3S(c,5,V.O({4H:17,4G:17,2b:D(b){18 11.3S(c,1,{4H:17,8m:17,2b:D(a){a.M.1Z().4B().1J(d)}})}},1b[1]||{}))};11.a4=1H.1E();V.O(V.O(11.a4.1d,11.2C.1d),{1Q:D(c){C.M=$(c);if(!C.M){2p 11.6X;}G d=V.O({12:{}},1b[1]||{});if(1m d.12=="2J"){if(d.12.2y(":")==-1){G e="",65="."+d.12;$A(1c.mB).5M().1j(D(b){if(b.8n){8n=b.8n}1e if(b.gM){8n=b.gM}$A(8n).5M().1j(D(a){if(65==a.mC){e=a.12.eR;2p $1B;}});if(e){2p $1B;}});C.12=e.cG();d.2b=D(b){b.M.4y(b.J.12);b.a5.1j(D(a){if(a.12!="2d"){b.M.12[a.12]=""}})}}1e{C.12=d.12.cG()}}1e{C.12=$H(d.12)}C.1S(d)},6f:D(){D 5v(a){if(!a||["mD(0, 0, 0, 0)","gN"].24(a)){a="#gG"}a=a.5v();E $R(0,2).1P(D(i){E 3O(a.3w(i*2+1,i*2+3),16)})}C.a5=C.12.1P((D(a){G b=a[0],1l=a[1],4I=1h;if(1l.5v("#gO")!="#gO"){1l=1l.5v();4I="56"}1e if(b=="2d"){1l=3H(1l);if(1k.1X.4b&&!C.M.9n.gw){C.M.1J({cn:1})}}1e if(N.gP.3Z(1l)){G c=1l.1t(/^([\\+\\-]?[0-9\\.]+)(.*)$/);1l=3H(c[1]);4I=c.Y==3?c[2]:1h}G d=C.M.1w(b);E{12:b.6z(),4m:4I=="56"?5v(d):3H(d||0),6k:4I=="56"?5v(1l):1l,4I:4I}}).1o(C)).6D(D(a){E a.4m==a.6k||a.4I!="56"&&(gQ(a.4m)||gQ(a.6k))})},1G:D(a){G b={},2W,i=C.a5.Y;1R(i--){b[(2W=C.a5[i]).12]=2W.4I=="56"?"#"+1T.3p(2W.4m[0]+(2W.6k[0]-2W.4m[0])*a).6y()+1T.3p(2W.4m[1]+(2W.6k[1]-2W.4m[1])*a).6y()+1T.3p(2W.4m[2]+(2W.6k[2]-2W.4m[2])*a).6y():2W.4m+1T.3p((2W.6k-2W.4m)*a*2Q)/2Q+2W.4I}C.M.1J(b,19)}});11.gR=1H.1E();V.O(11.gR.1d,{1Q:D(a){C.4n=[];C.J=1b[1]||{};C.gS(a)},gS:D(c){c.1j((D(a){G b=$H(a).29().3B();C.4n.1f($H({cH:$H(a).aN().3B(),6Y:11.a4,J:{12:b}}))}).1o(C));E C},cI:D(){E 18 11.6h(C.4n.1P(D(a){G b=[$(a.cH)||$$(a.cH)].4g();E b.1P(D(e){E 18 a.6Y(e,V.O({3q:19},a.J))})}).4g(),C.J)}});N.gT=$w("57 mE mF mG mH mI mJ mK mL mM mN mO mP mQ mR 3K mS 56 6c mT 1q 1s mU mV mW mX mY mZ n0 n1 n2 n3 n4 2d n5 n6 n7 n8 n9 na nb 5Y nc 1r 1C nd 8o");N.gP=/^(([\\+\\-]?[0-9\\.]+)(em|ex|1K|in|cm|mm|gA|ne|\\%))|0$/;2A.1d.cG=D(){G b=1c.23("2O");b.2r="<2O 12=\\""+C+"\\"></2O>";G c=b.2k[0].12,a6=$H();N.gT.1j(D(a){if(c[a]){a6[a]=c[a]}});if(1k.1X.4b&&C.2y("2d")>-1){a6.2d=C.1t(/2d:\\s*((?:0|1)?(?:\\.\\d*)?)/)[1]}E a6};N.gU=D(a,b){18 11.a4(a,V.O({12:b},1b[2]||{}));E a};["54","cj","g9","9K","9L","gU"].1j(D(f){N.1v[f]=N[f]});N.1v.nf=D(a,b,c){s=b.dY().6z();gV=s.5I(0).2f()+s.6A(1);18 11[gV](a,c);E $(a)};N.bz();if(1m 11=="1M"){2p"ng.js 9I ck 4q.9G.9H\' 22.js cl";}G 3T={73:[],3C:D(a){C.73=C.73.6D(D(d){E d.M==$(a)})},41:D(a){a=$(a);G b=V.O({nh:19,4J:1h,3t:17},1b[1]||{});if(b.6l){b.8p=[];G d=b.6l;if(1m d=="3X"&&d.5j==1V){d.1j(D(c){b.8p.1f($(c))})}1e{b.8p.1f($(d))}}if(b.8q){b.8q=[b.8q].4g()}N.3J(a);b.M=a;C.73.1f(b)},gW:D(a){a7=a[0];1g(i=1;i<a.Y;++i){if(N.8r(a[i].M,a7.M)){a7=a[i]}}E a7},gX:D(a,b){G d;if(b.3t){d=a.cJ}1e{d=a.1A}E b.8p.6C(D(c){E d==c})},cK:D(a,b,c){E c.M!=b&&(!c.8p||C.gX(b,c))&&(!c.8q||N.6H(b).6C(D(v){E c.8q.24(v)}))&&1x.c5(c.M,a[0],a[1])},8s:D(a){if(a.4J){N.5W(a.M,a.4J)}C.4o=1h},5s:D(a){if(a.4J){N.4y(a.M,a.4J)}C.4o=a},2w:D(b,c){if(!C.73.Y){E}G d=[];if(C.4o){C.8s(C.4o)}C.73.1j(D(a){if(3T.cK(b,c,a)){d.1f(a)}});if(d.Y>0){5y=3T.gW(d);1x.c5(5y.M,b[0],b[1]);if(5y.5z){5y.5z(c,5y.M,1x.3N(5y.3N,5y.M))}3T.5s(5y)}},gY:D(a,b){if(!C.4o){E}1x.51();if(C.cK([1a.6a(a),1a.6b(a)],b,C.4o)){if(C.4o.gZ){C.4o.gZ(b,C.4o.M,a);E 19}}},85:D(){if(C.4o){C.8s(C.4o)}}};G 1W={74:[],2U:[],94:D(a){if(C.74.Y==0){C.76=C.77.2P(C);C.78=C.a8.2P(C);C.cL=C.a9.2P(C);1a.21(1c,"aa",C.76);1a.21(1c,"ab",C.78);1a.21(1c,"89",C.cL)}C.74.1f(a)},b1:D(a){C.74=C.74.6D(D(d){E d==a});if(C.74.Y==0){1a.2D(1c,"aa",C.76);1a.2D(1c,"ab",C.78);1a.2D(1c,"89",C.cL)}},5s:D(a){if(a.J.3P){C.8t=3D((D(){1W.8t=1h;1p.6U();1W.4K=a}).1o(C),a.J.3P)}1e{1p.6U();C.4K=a}},8s:D(){C.4K=1h},a8:D(a){if(!C.4K){E}G b=[1a.6a(a),1a.6b(a)];if(C.79&&C.79.2i()==b.2i()){E}C.79=b;C.4K.a8(a,b)},77:D(a){if(C.8t){9c(C.8t);C.8t=1h}if(!C.4K){E}C.79=1h;C.4K.77(a);C.4K=1h},a9:D(a){if(C.4K){C.4K.a9(a)}},h0:D(a){C.2U.1f(a);C.cM()},h1:D(a){C.2U=C.2U.6D(D(o){E o.M==a});C.cM()},8u:D(a,b,c){if(C[a+"h2"]>0){C.2U.1j(D(o){if(o[a]){o[a](a,b,c)}})}if(b.J[a]){b.J[a](b,c)}},cM:D(){["cN","cO","cP"].1j(D(a){1W[a+"h2"]=1W.2U.2B(D(o){E o[a]}).Y})}};G 5A=1H.1E();5A.8v={};5A.1d={1Q:D(e){G f={2G:17,6m:D(a,b,c){G d=1T.ni(1T.ac(b^2)+1T.ac(c^2))*0.nj;18 11.3r(a,{x:-c,y:-b,2o:d,3Q:{8f:"h3",1D:"3g"}})},6n:D(a){G b=1m a.ad=="bU"?a.ad:1;18 11.4k(a,{2o:0.2,31:0.7,3o:b,3Q:{8f:"h3",1D:"3g"},cx:D(){5A.8v[a]=17}})},6o:2Q,cQ:17,7a:17,1L:17,48:20,3b:15,58:17,3P:0};if(!1b[1]||1m 1b[1].6n=="1M"){V.O(f,{7b:D(a){a.ad=N.7T(a);5A.8v[a]=19;18 11.4k(a,{2o:0.2,31:a.ad,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.bi){g.1L=$(g.1L);C.cR=N.eO(C.M,g.1L)}N.3J(C.M);C.72=C.ae();C.J=g;C.49=17;C.5B=C.h4.2P(C);1a.21(C.2G,"7c",C.5B);1W.94(C)},af:D(){1a.2D(C.2G,"7c",C.5B);1W.b1(C)},ae:D(){E[3O(N.1w(C.M,"1s")||"0"),3O(N.1w(C.M,"1r")||"0")]},h4:D(a){if(1m 5A.8v[C.M]!="1M"&&5A.8v[C.M]){E}if(1a.c3(a)){G b=1a.M(a);if((7d=b.1N.2f())&&(7d=="bA"||7d=="bB"||7d=="cc"||7d=="g7"||7d=="9s")){E}G c=[1a.6a(a),1a.6b(a)];G d=1x.3G(C.M);C.2E=[0,1].1P(D(i){E c[i]-d[i]});1W.5s(C);1a.2I(a)}},ag:D(a){C.49=19;if(C.J.6o){C.h5=3O(N.1w(C.M,"z-2q")||0);C.M.12.8o=C.J.6o}if(C.J.5C){C.ah=C.M.nk(19);1x.c8(C.M);C.M.1A.4X(C.ah,C.M)}if(C.J.1L){if(C.J.1L==1p){G b=C.ai(C.J.1L);C.cS=b.1s;C.cT=b.1r}1e{C.cS=C.J.1L.44;C.cT=C.J.1L.3M}}1W.8u("cN",C,a);if(C.J.7b){C.J.7b(C.M)}},a8:D(a,b){if(!C.49){C.ag(a)}if(!C.J.7a){1x.51();3T.2w(b,C.M)}1W.8u("cP",C,a);C.8w(b);if(C.J.88){C.J.88(C)}if(C.J.1L){C.cU();G p;if(C.J.1L==1p){5J(C.ai(C.J.1L)){p=[1s,1r,1s+1C,1r+1q]}}1e{p=1x.9F(C.J.1L);p[0]+=C.J.1L.44+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.48){c[0]=b[0]-(p[0]+C.J.48)}if(b[1]<p[1]+C.J.48){c[1]=b[1]-(p[1]+C.J.48)}if(b[0]>p[2]-C.J.48){c[0]=b[0]-(p[2]-C.J.48)}if(b[1]>p[3]-C.J.48){c[1]=b[1]-(p[3]-C.J.48)}C.h6(c)}if(1k.1X.3U){1p.ci(0,0)}1a.2I(a)},8x:D(a,b){C.49=17;if(C.J.7a){1x.51();G c=[1a.6a(a),1a.6b(a)];3T.2w(c,C.M)}if(C.J.5C){1x.fY(C.M);N.3C(C.ah);C.ah=1h}G e=17;if(b){e=3T.gY(a,C.M);if(!e){e=17}}if(e&&C.J.h7){C.J.h7(C.M)}1W.8u("cO",C,a);G f=C.J.cQ;if(f&&1m f=="D"){f=f(C.M)}G d=C.ae();if(f&&C.J.6m){if(e==0||f!="7J"){C.J.6m(C.M,d[1]-C.72[1],d[0]-C.72[0])}}1e{C.72=d}if(C.J.6o){C.M.12.8o=C.h5}if(C.J.6n){C.J.6n(C.M)}1W.8s(C);3T.85()},a9:D(a){if(a.8y!=1a.c2){E}C.8x(a,17);1a.2I(a)},77:D(a){if(!C.49){E}C.cU();C.8x(a,19);1a.2I(a)},8w:D(a){G b=1x.3G(C.M);if(C.J.5C){G r=1x.c4(C.M);b[0]+=r[0]-1x.8a;b[1]+=r[1]-1x.8b}G d=C.ae();b[0]-=d[0];b[1]-=d[1];if(C.J.1L&&C.J.1L!=1p&&C.cR){b[0]-=C.J.1L.44-C.cS;b[1]-=C.J.1L.3M-C.cT}G p=[0,1].1P((D(i){E a[i]-b[i]-C.2E[i]}).1o(C));if(C.J.58){if(1m C.J.58=="D"){p=C.J.58(p[0],p[1],C)}1e{if(C.J.58 4r 1V){p=p.1P((D(v,i){E 1T.3p(v/C.J.58[i])*C.J.58[i]}).1o(C))}1e{p=p.1P((D(v){E 1T.3p(v/C.J.58)*C.J.58}).1o(C))}}}G c=C.M.12;if(!C.J.6p||C.J.6p=="9E"){c.1s=p[0]+"1K"}if(!C.J.6p||C.J.6p=="6W"){c.1r=p[1]+"1K"}if(c.5X=="5m"){c.5X=""}},cU:D(){if(C.aj){aP(C.aj);C.aj=1h;1W.4L=1h}},h6:D(a){if(!(a[0]||a[1])){E}C.3b=[a[0]*C.J.3b,a[1]*C.J.3b];C.cV=18 7u;C.aj=8T(C.1L.1o(C),10)},1L:D(){G a=18 7u;G b=a-C.cV;C.cV=a;if(C.J.1L==1p){5J(C.ai(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.44+=C.3b[0]*b/2Q;C.J.1L.3M+=C.3b[1]*b/2Q}1x.51();3T.2w(1W.79,C.M);1W.8u("cP",C);if(C.cR){1W.4L=1W.4L||$A(1W.79);1W.4L[0]+=C.3b[0]*b/2Q;1W.4L[1]+=C.3b[1]*b/2Q;if(1W.4L[0]<0){1W.4L[0]=0}if(1W.4L[1]<0){1W.4L[1]=0}C.8w(1W.4L)}if(C.J.88){C.J.88(C)}},ai:D(w){G T,L,W,H;5J(w.1c){if(w.1c.3n&&3n.3M){T=3n.3M;L=3n.44}1e if(w.1c.26){T=26.3M;L=26.44}if(w.h8){W=w.h8;H=w.cD}1e if(w.1c.3n&&3n.7U){W=3n.7U;H=3n.4U}1e{W=26.3I;H=26.3j}}E{1r:T,1s:L,1C:W,1q:H}}};G cW=1H.1E();cW.1d={1Q:D(a,b){C.M=$(a);C.7e=b;C.3m=1z.4D(C.M)},cN:D(){C.3m=1z.4D(C.M)},cO:D(){1z.5r();if(C.3m!=1z.4D(C.M)){C.7e(C.M)}}};G 1z={h9:/^[^3y\\-](?:[A-nl-g1-9\\-\\3y]*)[3y](.*)$/,8z:{},ha:D(a){1R(a.1N.2f()!="9D"){if(a.id&&1z.8z[a.id]){E a}a=a.1A}},J:D(a){a=1z.ha($(a));if(!a){E}E 1z.8z[a.id]},af:D(a){G s=1z.J(a);if(s){1W.h1(s.M);s.8A.1j(D(d){3T.3C(d)});s.cX.7C("af");92 1z.8z[s.M.id]}},1E:D(b){b=$(b);G c=V.O({M:b,7f:"li",hb:17,3t:17,8B:"cY",3N:"6W",6p:"6W",6l:b,2G:17,43:17,3P:0,4J:1h,5C:17,7a:17,1L:17,48:20,3b:15,5D:C.h9,7K:17,2h:17,59:1k.4d,hc:1k.4d},1b[1]||{});C.af(b);G d={cQ:19,7a:c.7a,1L:c.1L,3b:c.3b,48:c.48,3P:c.3P,5C:c.5C,6p:c.6p,2G:c.2G};if(c.7b){d.7b=c.7b}if(c.6m){d.6m=c.6m}1e if(c.5C){d.6m=D(a){a.12.1r=0;a.12.1s=0}}if(c.6n){d.6n=c.6n}if(c.6o){d.6o=c.6o}G f={3N:c.3N,6l:c.6l,3t:c.3t,4J:c.4J,5z:1z.5z};G g={5z:1z.hd,3N:c.3N,6l:c.6l,4J:c.4J};N.6I(b);c.cX=[];c.8A=[];if(c.hb||c.3t){3T.41(b,g);c.8A.1f(b)}(c.7K||C.4j(b,c)||[]).1j(D(e,i){G a=c.2h?$(c.2h[i]):c.2G?$(e).6G(c.2G)[0]:e;c.cX.1f(18 5A(e,V.O(d,{2G:a})));3T.41(e,f);if(c.3t){e.cJ=b}c.8A.1f(e)});if(c.3t){(1z.he(b,c)||[]).1j(D(e){3T.41(e,g);e.cJ=b;c.8A.1f(e)})}C.8z[b.id]=c;1W.h0(18 cW(b,c.hc))},4j:D(a,b){E N.ak(a,b.43,b.3t?19:17,b.7f)},he:D(a,b){E N.ak(a,b.43,b.3t?19:17,b.8B)},5z: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.63(b,"nm");if(b.bl!=a){G d=a.1A;a.12.5X="5m";b.1A.4X(a,b);if(b.1A!=d){1z.J(d).59(a)}1z.J(b.1A).59(a)}}1e{1z.63(b,"hf");G e=b.5U||1h;if(e!=a){G d=a.1A;a.12.5X="5m";b.1A.4X(a,e);if(b.1A!=d){1z.J(d).59(a)}1z.J(b.1A).59(a)}}},hd:D(a,b,c){G d=a.1A;G e=1z.J(b);if(!N.8r(b,a)){G f;G g=1z.4j(b,{7f:e.7f,43:e.43});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.4X(a,h);1z.J(d).59(a);e.59(a)}},5r:D(){if(1z.5a){1z.5a.1Z()}},63:D(a,b){G c=1z.J(a.1A);if(c&&!c.5C){E}if(!1z.5a){1z.5a=($("hg")||N.O(1c.23("g8"))).1Z().4y("hg").1J({1D:"3k"});1c.3E("26").nn(0).25(1z.5a)}G d=1x.3G(a);1z.5a.1J({1s:d[0]+"1K",1r:d[1]+"1K"});if(b=="hf"){if(c.3N=="9E"){1z.5a.1J({1s:d[0]+a.7U+"1K"})}1e{1z.5a.1J({1r:d[1]+a.4U+"1K"})}}1z.5a.2w()},cZ:D(a,b,c){G d=1z.4j(a,b)||[];1g(G i=0;i<d.Y;++i){G e=d[i].id.1t(b.5D);if(!e){3z}G f={id:4Q(e?e[1]:1h),M:a,d0:c,64:[],1D:c.64.Y,5k:$(d[i]).32(b.8B)};if(f.5k){C.cZ(f.5k,b,f)}c.64.1f(f)}E c},3t:D(a){a=$(a);G b=C.J(a);G c=V.O({7f:b.7f,8B:b.8B,43:b.43,3a:a.id,5D:b.5D},1b[1]||{});G d={id:1h,d0:1h,64:[],5k:a,1D:0};E 1z.cZ(a,c,d)},hh:D(a){G b="";do{if(a.id){b="["+a.1D+"]"+b}}1R((a=a.d0)!=1h);E b},hi:D(b){b=$(b);G c=V.O(C.J(b),1b[1]||{});E $(C.4j(b,c)||[]).1P(D(a){E a.id.1t(c.5D)?a.id.1t(c.5D)[1]:""})},np:D(b,c){b=$(b);G d=V.O(C.J(b),1b[2]||{});G e={};C.4j(b,d).1j(D(n){if(n.id.1t(d.5D)){e[n.id.1t(d.5D)[1]]=[n,n.1A]}n.1A.7O(n)});c.1j(D(a){G n=e[a];if(n){n[1].25(n[0]);92 e[a]}})},4D:D(b){b=$(b);G c=V.O(1z.J(b),1b[1]||{});G d=4Q(1b[1]&&1b[1].3a?1b[1].3a:b.id);if(c.3t){E 1z.3t(b,1b[1]).64.1P(D(a){E[d+1z.hh(a)+"[id]="+4Q(a.id)].2e(a.64.1P(1b.8U))}).4g().2j("&")}1e{E 1z.hi(b,1b[1]).1P(D(a){E d+"[]="+4Q(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.ak=D(b,c,d,f){if(!b.ch()){E 1h}f=f.2f();if(c){c=[c].4g()}G g=[];$A(b.2k).1j(D(e){if(e.1N&&e.1N.2f()==f&&(!c||N.6H(e).6C(D(v){E c.24(v)}))){g.1f(e)}if(d){G a=N.ak(e,c,d,f);if(a){g.1f(a)}}});E g.Y>0?g.4g():[]};N.8C=D(a,b){E a["2E"+(b=="6W"||b=="1q"?"nq":"nr")]};if(1m 11=="1M"){2p"ns.js 9I ck 4q.9G.9H\' 22.js cl";}G 5b={};5b.2C=D(){};5b.2C.1d={d1:D(c,d,e){c=$(c);C.M=c;C.1G=$(d);C.7g=17;C.8D=17;C.3c=17;C.2q=0;C.5c=0;if(C.5O){C.5O(e)}1e{C.J=e||{}}C.J.7h=C.J.7h||C.M.3a;C.J.6q=C.J.6q||[];C.J.4t=C.J.4t||0.4;C.J.d2=C.J.d2||1;C.J.d3=C.J.d3||D(a,b){if(!b.12.1D||b.12.1D=="3k"){b.12.1D="3k";1x.3W(a,b,{c7:17,52:a.3j})}11.9M(b,{2o:0.15})};C.J.d4=C.J.d4||D(a,b){18 11.cp(b,{2o:0.15})};if(1m C.J.6q=="2J"){C.J.6q=18 1V(C.J.6q)}C.7e=1h;C.M.7i("hj","nt");N.1Z(C.1G);1a.21(C.M,"fw",C.hk.2P(C));1a.21(C.M,"89",C.hl.2P(C));1a.21(1p,"nu",D(){c.7i("hj","5Q")})},2w:D(){if(N.1w(C.1G,"3i")=="42"){C.J.d3(C.M,C.1G)}if(!C.5E&&1k.1X.4b&&N.1w(C.1G,"1D")=="3k"){18 2M.bL(C.1G,"<hm id=\\""+C.1G.id+"hn\\" "+"12=\\"3i:42;1D:3k;7V:nv:nw.ei.nx(2d=0);\\" "+"4W=\\"b8:17;\\" ny=\\"0\\" nz=\\"no\\"></hm>");C.5E=$(C.1G.id+"hn")}if(C.5E){3D(C.ho.1o(C),50)}},ho:D(){1x.3W(C.1G,C.5E,{c6:!C.1G.12.1q});C.5E.12.8o=1;C.1G.12.8o=2;N.2w(C.5E)},1Z:D(){C.d5();if(N.1w(C.1G,"3i")!="42"){C.J.d4(C.M,C.1G)}if(C.5E){N.1Z(C.5E)}},hp:D(){if(C.J.al){N.2w(C.J.al)}},d5:D(){if(C.J.al){N.1Z(C.J.al)}},hl:D(a){if(C.3c){4M(a.8y){1F 1a.c0:1F 1a.c1:C.am();1a.2I(a);1F 1a.c2:C.1Z();C.3c=17;1a.2I(a);E;1F 1a.fD:1F 1a.fF:E;1F 1a.fE:C.hq();C.4F();if(1k.1X.3U){1a.2I(a)}E;1F 1a.fG:C.hr();C.4F();if(1k.1X.3U){1a.2I(a)}E;5Z:}}1e if(a.8y==1a.c0||a.8y==1a.c1||1k.1X.3U>0&&a.8y==0){E}C.8D=19;C.7g=19;if(C.7e){9c(C.7e)}C.7e=3D(C.hs.1o(C),C.J.4t*2Q)},5s:D(){C.8D=17;C.7g=19;C.an()},5z:D(a){G b=1a.5l(a,"cg");if(C.2q!=b.ao){C.2q=b.ao;C.4F()}1a.2I(a)},ht:D(a){G b=1a.5l(a,"cg");C.2q=b.ao;C.am();C.1Z()},hk:D(a){3D(C.1Z.1o(C),nA);C.7g=17;C.3c=17},4F:D(){if(C.5c>0){1g(G i=0;i<C.5c;i++){C.2q==i?N.4y(C.6r(i),"69"):N.5W(C.6r(i),"69")}if(C.7g){C.2w();C.3c=19}}1e{C.3c=17;C.1Z()}},hq:D(){if(C.2q>0){C.2q--}1e{C.2q=C.5c-1}C.6r(C.2q).hu(19)},hr:D(){if(C.2q<C.5c-1){C.2q++}1e{C.2q=0}C.6r(C.2q).hu(17)},6r:D(a){E C.1G.4x.2k[a]},hv:D(){E C.6r(C.2q)},am:D(){C.3c=17;C.ap(C.hv())},ap:D(a){if(C.J.ap){C.J.ap(a);E}G b="";if(C.J.2B){G c=1c.6G(C.J.2B,a)||[];if(c.Y>0){b=N.9K(c[0],C.J.2B)}}1e{b=N.9L(a,"nB")}G d=C.d6();if(d!=-1){G e=C.M.1l.5d(0,d+1);G f=C.M.1l.5d(d+1).1t(/^\\s+/);if(f){e+=f[0]}C.M.1l=e+b}1e{C.M.1l=b}C.M.6U();if(C.J.hw){C.J.hw(C.M,a)}},d7:D(a){if(!C.8D&&C.7g){C.1G.2r=a;N.6I(C.1G);N.6I(C.1G.32());if(C.1G.4x&&C.1G.32().2k){C.5c=C.1G.32().2k.Y;1g(G i=0;i<C.5c;i++){G b=C.6r(i);b.ao=i;C.hx(b)}}1e{C.5c=0}C.d5();C.2q=0;if(C.5c==1&&C.J.nC){C.am();C.1Z()}1e{C.4F()}}},hx:D(a){1a.21(a,"8E",C.5z.2P(C));1a.21(a,"6V",C.ht.2P(C))},hs:D(){C.8D=17;if(C.aq().Y>=C.J.d2){C.an()}1e{C.3c=17;C.1Z()}},aq:D(){G a=C.d6();if(a!=-1){G b=C.M.1l.5d(a+1).1I(/^\\s+/,"").1I(/\\s+$/,"")}1e{G b=C.M.1l}E/\\n/.3Z(b)?"":b},d6:D(){G a=-1;1g(G i=0;i<C.J.6q.Y;i++){G b=C.M.1l.e3(C.J.6q[i]);if(b>a){a=b}}E a}};1u.5b=1H.1E();V.O(V.O(1u.5b.1d,5b.2C.1d),{1Q:D(a,b,c,d){C.d1(a,b,d);C.J.5P=19;C.J.2g=C.2g.1o(C);C.J.d8=C.J.3h||1h;C.2T=c},an:D(){C.hp();G a=4Q(C.J.7h)+"="+4Q(C.aq());C.J.3h=C.J.3e?C.J.3e(C.M,a):a;if(C.J.d8){C.J.3h+="&"+C.J.d8}18 1u.4R(C.2T,C.J)},2g:D(a){C.d7(a.5R)}});5b.hy=1H.1E();5b.hy.1d=V.O(18 5b.2C,{1Q:D(a,b,c,d){C.d1(a,b,d);C.J.6B=c},an:D(){C.d7(C.J.65(C))},5O:D(h){C.J=V.O({d9:10,hz:19,hA:2,da:19,hB:17,65:D(a){G b=[];G c=[];G d=a.aq();G e=0;1g(G i=0;i<a.J.6B.Y&&b.Y<a.J.d9;i++){G f=a.J.6B[i];G g=a.J.da?f.2s().2y(d.2s()):f.2y(d);1R(g!=-1){if(g==0&&f.Y!=d.Y){b.1f("<li><ar>"+f.5d(0,d.Y)+"</ar>"+f.5d(d.Y)+"</li>");1B}1e if(d.Y>=a.J.hA&&a.J.hz&&g!=-1){if(a.J.hB||/\\s/.3Z(f.5d(g-1,1))){c.1f("<li>"+f.5d(0,g)+"<ar>"+f.5d(g,d.Y)+"</ar>"+f.5d(g+d.Y)+"</li>");1B}}g=a.J.da?f.2s().2y(d.2s(),g+1):f.2y(d,g+1)}}if(c.Y){b=b.2e(c.3w(0,a.J.d9-b.Y))}E"<cY>"+b.2j("")+"</cY>"}},h||{})}});87.db=D(a){3D(D(){87.5s(a)},1)};1u.8F=1H.1E();1u.8F.hC="#nD";1u.8F.1d={1Q:D(c,d,e){C.2T=d;C.M=$(c);C.J=V.O({7h:"1l",dc:19,dd:17,as:"hD",de:17,df:19,dg:"71",dh:"",di:"",dj:"",hE:"nE...",hF:"nF 3o nG",as:"hD",at:1,2g:D(a,b){18 11.9U(b,{9V:C.J.8G})},6s:D(a){nH("e7 nI 5J g0 nJ: "+a.5R.8V())},3e:D(a){E 1y.4D(a)},hG:19,hH:"el...",dk:"au-7j",dl:"au-nK",hI:"au-1U",8G:1u.8F.hC,hJ:"#nL",2X:1h,dm:17,av:{},4O:17},e||{});if(!C.J.8H&&C.M.id){C.J.8H=C.M.id+"-au";if($(C.J.8H)){C.J.8H=1h}}if(C.J.2X){C.J.2X=$(C.J.2X)}C.7k=N.1w(C.M,"9W-56");if(!C.7k){C.7k="gN"}C.M.bw=C.J.hF;C.8I=C.hK.2P(C);C.8J=C.hL.2P(C);C.8K=C.aw.2P(C);1a.21(C.M,"6V",C.8I);1a.21(C.M,"8E",C.8J);1a.21(C.M,"ax",C.8K);if(C.J.2X){1a.21(C.J.2X,"6V",C.8I);1a.21(C.J.2X,"8E",C.8J);1a.21(C.J.2X,"ax",C.8K)}},hK:D(a){if(C.7j){E}if(C.dn){E}C.dn=19;C.hM();if(C.J.2X){N.1Z(C.J.2X)}N.1Z(C.M);C.hN();C.M.1A.4X(C.1U,C.M);if(!C.J.8L){87.db(C.4p)}if(a){1a.2I(a)}E 17},hN:D(){C.1U=1c.23("1U");C.1U.id=C.J.8H;N.4y(C.1U,C.J.hI);C.1U.nM=C.8M.1o(C);C.dp();if(C.J.68){G a=1c.23("br");C.1U.25(a)}if(C.J.dh){C.1U.25(1c.4P(C.J.dh))}if(C.J.dc){G b=1c.23("67");b.1O="bX";b.1l=C.J.as;b.2v="nN";C.1U.25(b)}if(C.J.dd){G c=1c.23("a");c.by="#";c.25(1c.4P(C.J.as));c.dq=C.8M.1o(C);c.2v="nO";C.1U.25(c)}if(C.J.di&&(C.J.dd||C.J.dc)&&(C.J.df||C.J.de)){C.1U.25(1c.4P(C.J.di))}if(C.J.de){G d=1c.23("67");d.1O="bX";d.1l=C.J.dg;d.dq=C.dr.1o(C);d.2v="nP";C.1U.25(d)}if(C.J.df){G e=1c.23("a");e.by="#";e.25(1c.4P(C.J.dg));e.dq=C.dr.1o(C);e.2v="nQ nR";C.1U.25(e)}if(C.J.dj){C.1U.25(1c.4P(C.J.dj))}},hO:D(a){if(!C.J.hG){E 17}E a.1t(/<br/i)||a.1t(/<p>/i)},hP:D(a){E a.1I(/<br>/gi,"\\n").1I(/<br\\/>/gi,"\\n").1I(/<\\/p>/gi,"\\n").1I(/<p>/gi,"")},dp:D(){G a;if(C.J.8L){a=C.J.hH}1e{a=C.hQ()}G b=C;if(C.J.at==1&&!C.hO(a)){C.J.68=17;G c=1c.23("67");c.hR=C;c.1O="3Y";c.3a=C.J.7h;c.1l=a;c.12.57=C.J.8G;c.2v="hS";G d=C.J.7F||C.J.ds||0;if(d!=0){c.7F=d}if(C.J.dm){c.hT=C.8M.1o(C)}C.4p=c}1e{C.J.68=19;G e=1c.23("68");e.hR=C;e.3a=C.J.7h;e.1l=C.hP(a);e.at=C.J.at;e.ds=C.J.ds||40;e.2v="hS";if(C.J.dm){e.hT=C.8M.1o(C)}C.4p=e}if(C.J.8L){C.dt()}C.1U.25(C.4p)},hQ:D(){E C.M.2r},dt:D(){N.4y(C.1U,C.J.dl);C.4p.2x=19;18 1u.4R(C.J.8L,V.O({5P:19,2g:C.hU.1o(C)},C.J.av))},hU:D(a){N.5W(C.1U,C.J.dl);C.4p.2x=17;C.4p.1l=a.5R.8V();87.db(C.4p)},dr:D(){C.2g();C.ay();E 17},6s:D(a){C.J.6s(a);if(C.6t){C.M.2r=C.6t;C.6t=1h}E 17},8M:D(){G a=C.1U;G b=C.4p.1l;C.hV();if(C.J.4O){18 1u.4R(C.2T,V.O({3h:C.J.3e(a,b),2g:C.2g.1o(C),6s:C.6s.1o(C),5P:19,4O:19},C.J.av))}1e{18 1u.9b({4S:C.M,7J:1h},C.2T,V.O({3h:C.J.3e(a,b),2g:C.2g.1o(C),6s:C.6s.1o(C)},C.J.av))}if(1b.Y>1){1a.2I(1b[0])}E 17},hV:D(){C.7j=19;C.du();C.aw();C.hW()},hW:D(){C.6t=C.M.2r;C.M.2r=C.J.hE;N.4y(C.M,C.J.dk);C.M.12.57=C.7k;N.2w(C.M)},du:D(){if(C.1U){if(C.1U.1A){N.3C(C.1U)}C.1U=1h}},hL:D(){if(C.7j){E}C.M.12.57=C.J.8G;if(C.6Y){C.6Y.71()}N.4y(C.M,C.J.hX)},aw:D(){if(C.J.57){C.M.12.57=C.nS}N.5W(C.M,C.J.hX);if(C.7j){E}C.6Y=18 11.9U(C.M,{9V:C.J.8G,9X:C.J.hJ,9Y:C.7k})},ay:D(){N.5W(C.M,C.J.dk);C.du();C.aw();C.M.12.57=C.7k;N.2w(C.M);if(C.J.2X){N.2w(C.J.2X)}C.dn=17;C.7j=17;C.6t=1h;C.hY()},2g:D(a){C.ay();C.J.2g.1o(C)(a,C.M)},hM:D(){},hY:D(){},hZ:D(){if(C.6t){C.M.2r=C.6t}C.ay();1a.2D(C.M,"6V",C.8I);1a.2D(C.M,"8E",C.8J);1a.2D(C.M,"ax",C.8K);if(C.J.2X){1a.2D(C.J.2X,"6V",C.8I);1a.2D(C.J.2X,"8E",C.8J);1a.2D(C.J.2X,"ax",C.8K)}}};1u.dv=1H.1E();V.O(1u.dv.1d,1u.8F.1d);V.O(1u.dv.1d,{dp:D(){if(!C.dw){G c=1c.23("2B");G d=C.J.nT||[];G f;d.1j((D(e,i){f=1c.23("nU");f.1l=e 4r 1V?e[0]:e;if(1m C.J.1l=="1M"&&(e 4r 1V?C.M.2r==e[1]:e==f.1l)){f.69=19}if(C.J.1l==f.1l){f.69=19}f.25(1c.4P(e 4r 1V?e[1]:e));c.25(f)}).1o(C));C.dw=c}C.4p=C.dw;if(C.J.8L){C.dt()}C.1U.25(C.4p);C.J.3e=D(a,b){E"1l="+4Q(b)}}});1y.N.i0=1H.1E();1y.N.i0.1d={1Q:D(a,b,c){C.3P=b||0.5;C.M=$(a);C.3e=c;C.4f=1h;C.3m=$F(C.M);1a.21(C.M,"nV",C.i1.2P(C))},i1:D(a){if(C.3m==$F(C.M)){E}if(C.4f){9c(C.4f)}C.4f=3D(C.4N.1o(C),C.3P*2Q);C.3m=$F(C.M)},4N:D(){C.4f=1h;C.3e(C.M,$F(C.M))}};if(!az){G az={}}az.i2=1H.1E();az.i2.1d={1Q:D(a,b,c){G d=C;if(a 4r 1V){C.2h=a.7B(D(e){E $(e)})}1e{C.2h=[$(a)]}C.2c=$(b);C.J=c||{};C.dx=C.J.dx||"9E";C.i3=C.J.i3||1;C.i4=3O(C.J.i4||"1");C.28=C.J.28||$R(0,1);C.1l=0;C.29=C.2h.1P(D(){E 0});C.6u=C.J.6u?C.J.6u.1P(D(s){E $(s)}):17;C.J.aA=$(C.J.aA||1h);C.J.aB=$(C.J.aB||1h);C.dy=C.J.dy||17;C.aC=C.J.aC||C.28.3g;C.dz=C.J.dz||C.28.1S;C.dA=3O(C.J.dA||"0");C.8N=3O(C.J.8N||"0");C.dB=C.i5()-C.i6();C.aD=C.5F()?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.49=17;C.2x=17;if(C.J.2x){C.i7()}C.4a=C.J.29?C.J.29.aW(1k.K):17;if(C.4a){C.dz=C.4a.7D();C.aC=C.4a.5K()}C.5B=C.ag.2P(C);C.76=C.77.2P(C);C.78=C.1G.2P(C);C.2h.1j(D(h,i){i=d.2h.Y-1-i;d.8O(3H((d.J.dC 4r 1V?d.J.dC[i]:d.J.dC)||d.28.1S),i);N.3J(h);1a.21(h,"7c",d.5B)});1a.21(C.2c,"7c",C.5B);1a.21(1c,"aa",C.76);1a.21(1c,"ab",C.78);C.aE=19},hZ:D(){G a=C;1a.2D(C.2c,"7c",C.5B);1a.2D(1c,"aa",C.76);1a.2D(1c,"ab",C.78);C.2h.1j(D(h){1a.2D(h,"7c",a.5B)})},i7:D(){C.2x=19},nW:D(){C.2x=17},i8:D(b){if(C.4a){if(b>=C.4a.5K()){E C.4a.5K()}if(b<=C.4a.7D()){E C.4a.7D()}G c=1T.ac(C.4a[0]-b);G d=C.4a[0];C.4a.1j(D(v){G a=1T.ac(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.7l=b||0;C.7m=C.2h[C.7l];C.dD()}b=b||C.7l||0;if(C.aE&&C.dy){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.i8(a);C.29[b]=a;C.1l=C.29[0];C.2h[b].12[C.5F()?"1r":"1s"]=C.7n(a);C.i9();if(!C.49||!C.4e){C.dE()}},nX:D(a,b){C.8O(C.29[b||C.7l||0]+a,b||C.7l||0)},7n:D(a){E 1T.3p((C.dB-C.aD)/(C.28.3g-C.28.1S)*(a-C.28.1S))+"1K"},dF:D(a){E a/(C.dB-C.aD)*(C.28.3g-C.28.1S)+C.28.1S},aF:D(a){G v=C.29.aW(1k.K);a=a||0;E $R(v[a],v[a+1])},i6:D(){E C.5F()?C.8N:C.dA},i5:D(){E C.5F()?(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},5F:D(){E C.dx=="6W"},i9:D(){G a=C;if(C.6u){$R(0,C.6u.Y-1).1j(D(r){a.aG(a.6u[r],a.aF(r))})}if(C.J.aA){C.aG(C.J.aA,$R(0,C.29.Y>1?C.aF(0).7D():C.1l))}if(C.J.aB){C.aG(C.J.aB,$R(C.29.Y>1?C.aF(C.6u.Y-1).5K():C.1l,C.aC))}},aG:D(a,b){if(C.5F()){a.12.1r=C.7n(b.1S);a.12.1q=C.7n(b.3g-b.1S+C.28.1S)}1e{a.12.1s=C.7n(b.1S);a.12.1C=C.7n(b.3g-b.1S+C.28.1S)}},dD:D(){C.2h.1j(D(h){N.5W(h,"69")});N.4y(C.7m,"69")},ag:D(a){if(1a.c3(a)){if(!C.2x){C.3c=19;G b=1a.M(a);G c=[1a.6a(a),1a.6b(a)];G d=b;if(d==C.2c){G e=1x.3G(C.2c);C.4e=a;C.8O(C.dF((C.5F()?c[1]-e[1]:c[0]-e[0])-C.aD/2));G e=1x.3G(C.7m);C.dG=c[0]-e[0];C.dH=c[1]-e[1]}1e{1R(C.2h.2y(b)==-1&&b.1A){b=b.1A}if(C.2h.2y(b)!=-1){C.7m=b;C.7l=C.2h.2y(C.7m);C.dD();G e=1x.3G(C.7m);C.dG=c[0]-e[0];C.dH=c[1]-e[1]}}}1a.2I(a)}},1G:D(a){if(C.3c){if(!C.49){C.49=19}C.8w(a);if(1k.1X.3U){1p.ci(0,0)}1a.2I(a)}},8w:D(a){G b=[1a.6a(a),1a.6b(a)];G c=1x.3G(C.2c);b[0]-=C.dG+c[0];b[1]-=C.dH+c[1];C.4e=a;C.8O(C.dF(C.5F()?b[1]:b[0]));if(C.aE&&C.J.ia){C.J.ia(C.29.Y>1?C.29:C.1l,C)}},77:D(a){if(C.3c&&C.49){C.8x(a,19);1a.2I(a)}C.3c=17;C.49=17},8x:D(a,b){C.3c=17;C.49=17;C.dE()},dE:D(){if(C.aE&&C.J.59){C.J.59(C.29.Y>1?C.29:C.1l,C)}C.4e=1h}};6v={4n:{},aH:19,7A:18 2R("<nY 12=\\"1q:0\\" id=\\"aI#{2c}3y#{id}\\" 4W=\\"#{2T}\\" 70=\\"17\\" ib=\\"19\\" 5m=\\"19\\"/>"),9A:D(){6v.aH=19},9z:D(){6v.aH=17},cI:D(c){if(!6v.aH){E}G d=V.O({2c:"8g",2T:c,1I:17},1b[1]||{});if(d.1I&&C.4n[d.2c]){$R(0,C.4n[d.2c].id).1j(D(a){G b=$("aI"+d.2c+"3y"+a);b.ic&&b.ic();b.3C()});C.4n[d.2c]=1h}if(!C.4n[d.2c]){C.4n[d.2c]={id:0}}1e{C.4n[d.2c].id++}d.id=C.4n[d.2c].id;if(1k.1X.4b){G e=1c.23("nZ");e.7i("id","aI"+d.2c+"3y"+d.id);e.7i("4W",d.2T);e.7i("70","1");e.7i("ib","19");$$("26")[0].25(e)}1e{18 2M.bK($$("26")[0],6v.7A.3d(d))}}};if(1k.1X.7q&&5e.6w.2y("o0")>0){if(5e.ie&&$A(5e.ie).6C(D(p){E p.3a.2y("o1")!=-1})){6v.7A=18 2R("<3X id=\\"aI#{2c}3y#{id}\\" 1C=\\"0\\" 1q=\\"0\\" 1O=\\"o2/o3\\" dT=\\"#{2T}\\"/>")}1e{6v.cI=D(){}}}8e.ca();',62,1492,'||||||||||||||||||||||||||||||||||||||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|match|Ajax|Methods|getStyle|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|Template|method|url|observers|valueL|transform|externalControl|Abstract|toJSON||from|down||||||||name|scrollSpeed|active|evaluate|callback|Enumerable|end|parameters|display|offsetHeight|absolute|getValue|lastValue|documentElement|to|round|sync|Move|moveY|tree|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|RegExp|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|without|call|delete|ObjectRange|register|dispatch|onCreate|request|status|json|port|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|Test|getTransport|activeRequestCount|unregister|application|encoding|Complete|_complete|respondToReadyState|onStateChange|javascript|getHeader|isSameOrigin|protocol|domain|location|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|z0|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|https|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|proto|scripta|culous|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|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,{}))
//effects
// script.aculo.us effects.js v1.7.1_beta2, Sat Apr 28 15:20:12 CEST 2007

// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// Contributors:
//  Justin Palmer (http://encytemedia.com/)
//  Mark Pilgrim (http://diveintomark.org/)
//  Martin Bialasinki
// 
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/ 

// converts rgb() and #xxx to #xxxxxx format,  
// returns self (or first argument) if not convertable  
String.prototype.parseColor = function() {  
  var color = '#';
  if(this.slice(0,4) == 'rgb(') {  
    var cols = this.slice(4,this.length-1).split(',');  
    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  
  } else {  
    if(this.slice(0,1) == '#') {  
      if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  
      if(this.length==7) color = this.toLowerCase();  
    }  
  }  
  return(color.length==7 ? color : (arguments[0] || this));  
}

/*--------------------------------------------------------------------------*/

Element.collectTextNodes = function(element) {  
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue : 
      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
  }).flatten().join('');
}

Element.collectTextNodesIgnoreClass = function(element, className) {  
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue : 
      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? 
        Element.collectTextNodesIgnoreClass(node, className) : ''));
  }).flatten().join('');
}

Element.setContentZoom = function(element, percent) {
  element = $(element);  
  element.setStyle({fontSize: (percent/100) + 'em'});   
  if(Prototype.Browser.WebKit) window.scrollBy(0,0);
  return element;
}

Element.getInlineOpacity = function(element){
  return $(element).style.opacity || '';
}

Element.forceRerendering = function(element) {
  try {
    element = $(element);
    var n = document.createTextNode(' ');
    element.appendChild(n);
    element.removeChild(n);
  } catch(e) { }
};

/*--------------------------------------------------------------------------*/

Array.prototype.call = function() {
  var args = arguments;
  this.each(function(f){ f.apply(this, args) });
}

/*--------------------------------------------------------------------------*/

var Effect = {
  _elementDoesNotExistError: {
    name: 'ElementDoesNotExistError',
    message: 'The specified DOM element does not exist, but is required for this effect to operate'
  },
  tagifyText: function(element) {
    if(typeof Builder == 'undefined')
      throw("Effect.tagifyText requires including script.aculo.us' builder.js library");
      
    var tagifyStyle = 'position:relative';
    if(Prototype.Browser.IE) tagifyStyle += ';zoom:1';
    
    element = $(element);
    $A(element.childNodes).each( function(child) {
      if(child.nodeType==3) {
        child.nodeValue.toArray().each( function(character) {
          element.insertBefore(
            Builder.node('span',{style: tagifyStyle},
              character == ' ' ? String.fromCharCode(160) : character), 
              child);
        });
        Element.remove(child);
      }
    });
  },
  multiple: function(element, effect) {
    var elements;
    if(((typeof element == 'object') || 
        (typeof element == 'function')) && 
       (element.length))
      elements = element;
    else
      elements = $(element).childNodes;
      
    var options = Object.extend({
      speed: 0.1,
      delay: 0.0
    }, arguments[2] || {});
    var masterDelay = options.delay;

    $A(elements).each( function(element, index) {
      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
    });
  },
  PAIRS: {
    'slide':  ['SlideDown','SlideUp'],
    'blind':  ['BlindDown','BlindUp'],
    'appear': ['Appear','Fade']
  },
  toggle: function(element, effect) {
    element = $(element);
    effect = (effect || 'appear').toLowerCase();
    var options = Object.extend({
      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
    }, arguments[2] || {});
    Effect[element.visible() ? 
      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
  }
};

var Effect2 = Effect; // deprecated

/* ------------- transitions ------------- */

Effect.Transitions = {
  linear: Prototype.K,
  sinoidal: function(pos) {
    return (-Math.cos(pos*Math.PI)/2) + 0.5;
  },
  reverse: function(pos) {
    return 1-pos;
  },
  flicker: function(pos) {
    var pos = ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
    return (pos > 1 ? 1 : pos);
  },
  wobble: function(pos) {
    return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
  },
  pulse: function(pos, pulses) { 
    pulses = pulses || 5; 
    return (
      Math.round((pos % (1/pulses)) * pulses) == 0 ? 
            ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) : 
        1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2))
      );
  },
  none: function(pos) {
    return 0;
  },
  full: function(pos) {
    return 1;
  }
};

/* ------------- core effects ------------- */

Effect.ScopedQueue = Class.create();
Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {
  initialize: function() {
    this.effects  = [];
    this.interval = null;    
  },
  _each: function(iterator) {
    this.effects._each(iterator);
  },
  add: function(effect) {
    var timestamp = new Date().getTime();
    
    var position = (typeof effect.options.queue == 'string') ? 
      effect.options.queue : effect.options.queue.position;
    
    switch(position) {
      case 'front':
        // move unstarted effects after this effect  
        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
            e.startOn  += effect.finishOn;
            e.finishOn += effect.finishOn;
          });
        break;
      case 'with-last':
        timestamp = this.effects.pluck('startOn').max() || timestamp;
        break;
      case 'end':
        // start effect after last queued effect has finished
        timestamp = this.effects.pluck('finishOn').max() || timestamp;
        break;
    }
    
    effect.startOn  += timestamp;
    effect.finishOn += timestamp;

    if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
      this.effects.push(effect);
    
    if(!this.interval)
      this.interval = setInterval(this.loop.bind(this), 15);
  },
  remove: function(effect) {
    this.effects = this.effects.reject(function(e) { return e==effect });
    if(this.effects.length == 0) {
      clearInterval(this.interval);
      this.interval = null;
    }
  },
  loop: function() {
    var timePos = new Date().getTime();
    for(var i=0, len=this.effects.length;i<len;i++) 
      this.effects[i] && this.effects[i].loop(timePos);
  }
});

Effect.Queues = {
  instances: $H(),
  get: function(queueName) {
    if(typeof queueName != 'string') return queueName;
    
    if(!this.instances[queueName])
      this.instances[queueName] = new Effect.ScopedQueue();
      
    return this.instances[queueName];
  }
}
Effect.Queue = Effect.Queues.get('global');

Effect.DefaultOptions = {
  transition: Effect.Transitions.sinoidal,
  duration:   1.0,   // seconds
  fps:        100,   // 100= assume 66fps max.
  sync:       false, // true for combining
  from:       0.0,
  to:         1.0,
  delay:      0.0,
  queue:      'parallel'
}

Effect.Base = function() {};
Effect.Base.prototype = {
  position: null,
  start: function(options) {
    function codeForEvent(options,eventName){
      return (
        (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +
        (options[eventName] ? 'this.options.'+eventName+'(this);' : '')
      );
    }
    if(options.transition === false) options.transition = Effect.Transitions.linear;
    this.options      = Object.extend(Object.extend({},Effect.DefaultOptions), options || {});
    this.currentFrame = 0;
    this.state        = 'idle';
    this.startOn      = this.options.delay*1000;
    this.finishOn     = this.startOn+(this.options.duration*1000);
    this.fromToDelta  = this.options.to-this.options.from;
    this.totalTime    = this.finishOn-this.startOn;
    this.totalFrames  = this.options.fps*this.options.duration;
    
    eval('this.render = function(pos){ '+
      'if(this.state=="idle"){this.state="running";'+
      codeForEvent(options,'beforeSetup')+
      (this.setup ? 'this.setup();':'')+ 
      codeForEvent(options,'afterSetup')+
      '};if(this.state=="running"){'+
      'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+
      'this.position=pos;'+
      codeForEvent(options,'beforeUpdate')+
      (this.update ? 'this.update(pos);':'')+
      codeForEvent(options,'afterUpdate')+
      '}}');
    
    this.event('beforeStart');
    if(!this.options.sync)
      Effect.Queues.get(typeof this.options.queue == 'string' ? 
        'global' : this.options.queue.scope).add(this);
  },
  loop: function(timePos) {
    if(timePos >= this.startOn) {
      if(timePos >= this.finishOn) {
        this.render(1.0);
        this.cancel();
        this.event('beforeFinish');
        if(this.finish) this.finish(); 
        this.event('afterFinish');
        return;  
      }
      var pos   = (timePos - this.startOn) / this.totalTime,
          frame = Math.round(pos * this.totalFrames);
      if(frame > this.currentFrame) {
        this.render(pos);
        this.currentFrame = frame;
      }
    }
  },
  cancel: function() {
    if(!this.options.sync)
      Effect.Queues.get(typeof this.options.queue == 'string' ? 
        'global' : this.options.queue.scope).remove(this);
    this.state = 'finished';
  },
  event: function(eventName) {
    if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
    if(this.options[eventName]) this.options[eventName](this);
  },
  inspect: function() {
    var data = $H();
    for(property in this)
      if(typeof this[property] != 'function') data[property] = this[property];
    return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
  }
}

Effect.Parallel = Class.create();
Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {
  initialize: function(effects) {
    this.effects = effects || [];
    this.start(arguments[1]);
  },
  update: function(position) {
    this.effects.invoke('render', position);
  },
  finish: function(position) {
    this.effects.each( function(effect) {
      effect.render(1.0);
      effect.cancel();
      effect.event('beforeFinish');
      if(effect.finish) effect.finish(position);
      effect.event('afterFinish');
    });
  }
});

Effect.Event = Class.create();
Object.extend(Object.extend(Effect.Event.prototype, Effect.Base.prototype), {
  initialize: function() {
    var options = Object.extend({
      duration: 0
    }, arguments[0] || {});
    this.start(options);
  },
  update: Prototype.emptyFunction
});

Effect.Opacity = Class.create();
Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    // make this work on IE on elements without 'layout'
    if(Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
      this.element.setStyle({zoom: 1});
    var options = Object.extend({
      from: this.element.getOpacity() || 0.0,
      to:   1.0
    }, arguments[1] || {});
    this.start(options);
  },
  update: function(position) {
    this.element.setOpacity(position);
  }
});

Effect.Move = Class.create();
Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      x:    0,
      y:    0,
      mode: 'relative'
    }, arguments[1] || {});
    this.start(options);
  },
  setup: function() {
    // Bug in Opera: Opera returns the "real" position of a static element or
    // relative element that does not have top/left explicitly set.
    // ==> Always set top and left for position relative elements in your stylesheets 
    // (to 0 if you do not need them) 
    this.element.makePositioned();
    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
    if(this.options.mode == 'absolute') {
      // absolute movement, so we need to calc deltaX and deltaY
      this.options.x = this.options.x - this.originalLeft;
      this.options.y = this.options.y - this.originalTop;
    }
  },
  update: function(position) {
    this.element.setStyle({
      left: Math.round(this.options.x  * position + this.originalLeft) + 'px',
      top:  Math.round(this.options.y  * position + this.originalTop)  + 'px'
    });
  }
});

// for backwards compatibility
Effect.MoveBy = function(element, toTop, toLeft) {
  return new Effect.Move(element, 
    Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));
};

Effect.Scale = Class.create();
Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
  initialize: function(element, percent) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      scaleX: true,
      scaleY: true,
      scaleContent: true,
      scaleFromCenter: false,
      scaleMode: 'box',        // 'box' or 'contents' or {} with provided values
      scaleFrom: 100.0,
      scaleTo:   percent
    }, arguments[2] || {});
    this.start(options);
  },
  setup: function() {
    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
    this.elementPositioning = this.element.getStyle('position');
    
    this.originalStyle = {};
    ['top','left','width','height','fontSize'].each( function(k) {
      this.originalStyle[k] = this.element.style[k];
    }.bind(this));
      
    this.originalTop  = this.element.offsetTop;
    this.originalLeft = this.element.offsetLeft;
    
    var fontSize = this.element.getStyle('font-size') || '100%';
    ['em','px','%','pt'].each( function(fontSizeType) {
      if(fontSize.indexOf(fontSizeType)>0) {
        this.fontSize     = parseFloat(fontSize);
        this.fontSizeType = fontSizeType;
      }
    }.bind(this));
    
    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
    
    this.dims = null;
    if(this.options.scaleMode=='box')
      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
    if(/^content/.test(this.options.scaleMode))
      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
    if(!this.dims)
      this.dims = [this.options.scaleMode.originalHeight,
                   this.options.scaleMode.originalWidth];
  },
  update: function(position) {
    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
    if(this.options.scaleContent && this.fontSize)
      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
  },
  finish: function(position) {
    if(this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
  },
  setDimensions: function(height, width) {
    var d = {};
    if(this.options.scaleX) d.width = Math.round(width) + 'px';
    if(this.options.scaleY) d.height = Math.round(height) + 'px';
    if(this.options.scaleFromCenter) {
      var topd  = (height - this.dims[0])/2;
      var leftd = (width  - this.dims[1])/2;
      if(this.elementPositioning == 'absolute') {
        if(this.options.scaleY) d.top = this.originalTop-topd + 'px';
        if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
      } else {
        if(this.options.scaleY) d.top = -topd + 'px';
        if(this.options.scaleX) d.left = -leftd + 'px';
      }
    }
    this.element.setStyle(d);
  }
});

Effect.Highlight = Class.create();
Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});
    this.start(options);
  },
  setup: function() {
    // Prevent executing on elements not in the layout flow
    if(this.element.getStyle('display')=='none') { this.cancel(); return; }
    // Disable background image during the effect
    this.oldStyle = {};
    if (!this.options.keepBackgroundImage) {
      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
      this.element.setStyle({backgroundImage: 'none'});
    }
    if(!this.options.endcolor)
      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
    if(!this.options.restorecolor)
      this.options.restorecolor = this.element.getStyle('background-color');
    // init color calculations
    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
  },
  update: function(position) {
    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
      return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });
  },
  finish: function() {
    this.element.setStyle(Object.extend(this.oldStyle, {
      backgroundColor: this.options.restorecolor
    }));
  }
});

Effect.ScrollTo = Class.create();
Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    this.start(arguments[1] || {});
  },
  setup: function() {
    Position.prepare();
    var offsets = Position.cumulativeOffset(this.element);
    if(this.options.offset) offsets[1] += this.options.offset;
    var max = window.innerHeight ? 
      window.height - window.innerHeight :
      document.body.scrollHeight - 
        (document.documentElement.clientHeight ? 
          document.documentElement.clientHeight : document.body.clientHeight);
    this.scrollStart = Position.deltaY;
    this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;
  },
  update: function(position) {
    Position.prepare();
    window.scrollTo(Position.deltaX, 
      this.scrollStart + (position*this.delta));
  }
});

/* ------------- combination effects ------------- */

Effect.Fade = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  var options = Object.extend({
  from: element.getOpacity() || 1.0,
  to:   0.0,
  afterFinishInternal: function(effect) { 
    if(effect.options.to!=0) return;
    effect.element.hide().setStyle({opacity: oldOpacity}); 
  }}, arguments[1] || {});
  return new Effect.Opacity(element,options);
}

Effect.Appear = function(element) {
  element = $(element);
  var options = Object.extend({
  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
  to:   1.0,
  // force Safari to render floated elements properly
  afterFinishInternal: function(effect) {
    effect.element.forceRerendering();
  },
  beforeSetup: function(effect) {
    effect.element.setOpacity(effect.options.from).show(); 
  }}, arguments[1] || {});
  return new Effect.Opacity(element,options);
}

Effect.Puff = function(element) {
  element = $(element);
  var oldStyle = { 
    opacity: element.getInlineOpacity(), 
    position: element.getStyle('position'),
    top:  element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height
  };
  return new Effect.Parallel(
   [ new Effect.Scale(element, 200, 
      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), 
     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], 
     Object.extend({ duration: 1.0, 
      beforeSetupInternal: function(effect) {
        Position.absolutize(effect.effects[0].element)
      },
      afterFinishInternal: function(effect) {
         effect.effects[0].element.hide().setStyle(oldStyle); }
     }, arguments[1] || {})
   );
}

Effect.BlindUp = function(element) {
  element = $(element);
  element.makeClipping();
  return new Effect.Scale(element, 0,
    Object.extend({ scaleContent: false, 
      scaleX: false, 
      restoreAfterFinish: true,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping();
      } 
    }, arguments[1] || {})
  );
}

Effect.BlindDown = function(element) {
  element = $(element);
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleX: false,
    scaleFrom: 0,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
    },  
    afterFinishInternal: function(effect) {
      effect.element.undoClipping();
    }
  }, arguments[1] || {}));
}

Effect.SwitchOff = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  return new Effect.Appear(element, Object.extend({
    duration: 0.4,
    from: 0,
    transition: Effect.Transitions.flicker,
    afterFinishInternal: function(effect) {
      new Effect.Scale(effect.element, 1, { 
        duration: 0.3, scaleFromCenter: true,
        scaleX: false, scaleContent: false, restoreAfterFinish: true,
        beforeSetup: function(effect) { 
          effect.element.makePositioned().makeClipping();
        },
        afterFinishInternal: function(effect) {
          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
        }
      })
    }
  }, arguments[1] || {}));
}

Effect.DropOut = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left'),
    opacity: element.getInlineOpacity() };
  return new Effect.Parallel(
    [ new Effect.Move(element, {x: 0, y: 100, sync: true }), 
      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
    Object.extend(
      { duration: 0.5,
        beforeSetup: function(effect) {
          effect.effects[0].element.makePositioned(); 
        },
        afterFinishInternal: function(effect) {
          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
        } 
      }, arguments[1] || {}));
}

Effect.Shake = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left') };
    return new Effect.Move(element, 
      { x:  20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
        effect.element.undoPositioned().setStyle(oldStyle);
  }}) }}) }}) }}) }}) }});
}

Effect.SlideDown = function(element) {
  element = $(element).cleanWhitespace();
  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleX: false, 
    scaleFrom: window.opera ? 0 : 1,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if(window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
    },
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' }); 
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
    }, arguments[1] || {})
  );
}

Effect.SlideUp = function(element) {
  element = $(element).cleanWhitespace();
  var oldInnerBottom = element.down().getStyle('bottom');
  return new Effect.Scale(element, window.opera ? 0 : 1,
   Object.extend({ scaleContent: false, 
    scaleX: false, 
    scaleMode: 'box',
    scaleFrom: 100,
    restoreAfterFinish: true,
    beforeStartInternal: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if(window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().show();
    },  
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' });
    },
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom});
      effect.element.down().undoPositioned();
    }
   }, arguments[1] || {})
  );
}

// Bug in opera makes the TD containing this element expand for a instance after finish 
Effect.Squish = function(element) {
  return new Effect.Scale(element, window.opera ? 1 : 0, { 
    restoreAfterFinish: true,
    beforeSetup: function(effect) {
      effect.element.makeClipping(); 
    },  
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping(); 
    }
  });
}

Effect.Grow = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.full
  }, arguments[1] || {});
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();    
  var initialMoveX, initialMoveY;
  var moveX, moveY;
  
  switch (options.direction) {
    case 'top-left':
      initialMoveX = initialMoveY = moveX = moveY = 0; 
      break;
    case 'top-right':
      initialMoveX = dims.width;
      initialMoveY = moveY = 0;
      moveX = -dims.width;
      break;
    case 'bottom-left':
      initialMoveX = moveX = 0;
      initialMoveY = dims.height;
      moveY = -dims.height;
      break;
    case 'bottom-right':
      initialMoveX = dims.width;
      initialMoveY = dims.height;
      moveX = -dims.width;
      moveY = -dims.height;
      break;
    case 'center':
      initialMoveX = dims.width / 2;
      initialMoveY = dims.height / 2;
      moveX = -dims.width / 2;
      moveY = -dims.height / 2;
      break;
  }
  
  return new Effect.Move(element, {
    x: initialMoveX,
    y: initialMoveY,
    duration: 0.01, 
    beforeSetup: function(effect) {
      effect.element.hide().makeClipping().makePositioned();
    },
    afterFinishInternal: function(effect) {
      new Effect.Parallel(
        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
          new Effect.Scale(effect.element, 100, {
            scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, 
            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
        ], Object.extend({
             beforeSetup: function(effect) {
               effect.effects[0].element.setStyle({height: '0px'}).show(); 
             },
             afterFinishInternal: function(effect) {
               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); 
             }
           }, options)
      )
    }
  });
}

Effect.Shrink = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.none
  }, arguments[1] || {});
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();
  var moveX, moveY;
  
  switch (options.direction) {
    case 'top-left':
      moveX = moveY = 0;
      break;
    case 'top-right':
      moveX = dims.width;
      moveY = 0;
      break;
    case 'bottom-left':
      moveX = 0;
      moveY = dims.height;
      break;
    case 'bottom-right':
      moveX = dims.width;
      moveY = dims.height;
      break;
    case 'center':  
      moveX = dims.width / 2;
      moveY = dims.height / 2;
      break;
  }
  
  return new Effect.Parallel(
    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
    ], Object.extend({            
         beforeStartInternal: function(effect) {
           effect.effects[0].element.makePositioned().makeClipping(); 
         },
         afterFinishInternal: function(effect) {
           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
       }, options)
  );
}

Effect.Pulsate = function(element) {
  element = $(element);
  var options    = arguments[1] || {};
  var oldOpacity = element.getInlineOpacity();
  var transition = options.transition || Effect.Transitions.sinoidal;
  var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) };
  reverser.bind(transition);
  return new Effect.Opacity(element, 
    Object.extend(Object.extend({  duration: 2.0, from: 0,
      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
    }, options), {transition: reverser}));
}

Effect.Fold = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height };
  element.makeClipping();
  return new Effect.Scale(element, 5, Object.extend({   
    scaleContent: false,
    scaleX: false,
    afterFinishInternal: function(effect) {
    new Effect.Scale(element, 1, { 
      scaleContent: false, 
      scaleY: false,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping().setStyle(oldStyle);
      } });
  }}, arguments[1] || {}));
};

Effect.Morph = Class.create();
Object.extend(Object.extend(Effect.Morph.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      style: {}
    }, arguments[1] || {});
    if (typeof options.style == 'string') {
      if(options.style.indexOf(':') == -1) {
        var cssText = '', selector = '.' + options.style;
        $A(document.styleSheets).reverse().each(function(styleSheet) {
          if (styleSheet.cssRules) cssRules = styleSheet.cssRules;
          else if (styleSheet.rules) cssRules = styleSheet.rules;
          $A(cssRules).reverse().each(function(rule) {
            if (selector == rule.selectorText) {
              cssText = rule.style.cssText;
              throw $break;
            }
          });
          if (cssText) throw $break;
        });
        this.style = cssText.parseStyle();
        options.afterFinishInternal = function(effect){
          effect.element.addClassName(effect.options.style);
          effect.transforms.each(function(transform) {
            if(transform.style != 'opacity')
              effect.element.style[transform.style] = '';
          });
        }
      } else this.style = options.style.parseStyle();
    } else this.style = $H(options.style)
    this.start(options);
  },
  setup: function(){
    function parseColor(color){
      if(!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
      color = color.parseColor();
      return $R(0,2).map(function(i){
        return parseInt( color.slice(i*2+1,i*2+3), 16 ) 
      });
    }
    this.transforms = this.style.map(function(pair){
      var property = pair[0], value = pair[1], unit = null;

      if(value.parseColor('#zzzzzz') != '#zzzzzz') {
        value = value.parseColor();
        unit  = 'color';
      } else if(property == 'opacity') {
        value = parseFloat(value);
        if(Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
          this.element.setStyle({zoom: 1});
      } else if(Element.CSS_LENGTH.test(value)) {
          var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
          value = parseFloat(components[1]);
          unit = (components.length == 3) ? components[2] : null;
      }

      var originalValue = this.element.getStyle(property);
      return { 
        style: property.camelize(), 
        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), 
        targetValue: unit=='color' ? parseColor(value) : value,
        unit: unit
      };
    }.bind(this)).reject(function(transform){
      return (
        (transform.originalValue == transform.targetValue) ||
        (
          transform.unit != 'color' &&
          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
        )
      )
    });
  },
  update: function(position) {
    var style = {}, transform, i = this.transforms.length;
    while(i--)
      style[(transform = this.transforms[i]).style] = 
        transform.unit=='color' ? '#'+
          (Math.round(transform.originalValue[0]+
            (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
          (Math.round(transform.originalValue[1]+
            (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
          (Math.round(transform.originalValue[2]+
            (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
        transform.originalValue + Math.round(
          ((transform.targetValue - transform.originalValue) * position) * 1000)/1000 + transform.unit;
    this.element.setStyle(style, true);
  }
});

Effect.Transform = Class.create();
Object.extend(Effect.Transform.prototype, {
  initialize: function(tracks){
    this.tracks  = [];
    this.options = arguments[1] || {};
    this.addTracks(tracks);
  },
  addTracks: function(tracks){
    tracks.each(function(track){
      var data = $H(track).values().first();
      this.tracks.push($H({
        ids:     $H(track).keys().first(),
        effect:  Effect.Morph,
        options: { style: data }
      }));
    }.bind(this));
    return this;
  },
  play: function(){
    return new Effect.Parallel(
      this.tracks.map(function(track){
        var elements = [$(track.ids) || $$(track.ids)].flatten();
        return elements.map(function(e){ return new track.effect(e, Object.extend({ sync:true }, track.options)) });
      }).flatten(),
      this.options
    );
  }
});

Element.CSS_PROPERTIES = $w(
  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + 
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
  'fontSize fontWeight height left letterSpacing lineHeight ' +
  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
  'right textIndent top width wordSpacing zIndex');
  
Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;

String.prototype.parseStyle = function(){
  var element = document.createElement('div');
  element.innerHTML = '<div style="' + this + '"></div>';
  var style = element.childNodes[0].style, styleRules = $H();
  
  Element.CSS_PROPERTIES.each(function(property){
    if(style[property]) styleRules[property] = style[property]; 
  });
  if(Prototype.Browser.IE && this.indexOf('opacity') > -1) {
    styleRules.opacity = this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1];
  }
  return styleRules;
};

Element.morph = function(element, style) {
  new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || {}));
  return element;
};

['getInlineOpacity','forceRerendering','setContentZoom',
 'collectTextNodes','collectTextNodesIgnoreClass','morph'].each( 
  function(f) { Element.Methods[f] = Element[f]; }
);

Element.Methods.visualEffect = function(element, effect, options) {
  s = effect.dasherize().camelize();
  effect_class = s.charAt(0).toUpperCase() + s.substring(1);
  new Effect[effect_class](element, options);
  return $(element);
};

Element.addMethods();
//MenuBar

//*****************************************************************************
// Do not remove this notice.
//
// Copyright 2000-2004 by Mike Hall.
// See http://www.brainjar.com for terms of use.
//*****************************************************************************
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}('k 1s(){f a,s,i;q.n=E;q.W=E;q.X=E;q.N=5;a=1G.1H;s="1I";3((i=a.Y(s))>=0){q.W=F;q.N=1b(a.1c(i+s.z));g}s="1J/";3((i=a.Y(s))>=0){q.X=F;q.N=1b(a.1c(i+s.z));g}s="1K";3((i=a.Y(s))>=0){q.X=F;q.N=6.1;g}s="1L";3((i=a.Y(s))){q.n=F;q.N=1b(a.1c(i+s.z));g}}f l=1t 1s();f o=5;k 1d(a,b){f c;3(l.n)c=r.G.Z;B c=a.10;c.1M();3(c.8==5){c.8=m.1u(b);3(c.8.1e==5)1f(c.8)}3(c.C==5)c.C=O;3(c==o)g E;3(o!=5)1g(o);3(c!=o){1v(c);o=c}B o=5;g E}k 1N(a,b){f c;3(o==5){1d(a,b);g}3(l.n)c=r.G.Z;B c=a.10;3(o!=5&&o!=c)1d(a,b)}k 1v(a){f x,y;a.H+=" 1w";3(a.C==5)a.C=O;3(a.8.C==5)a.8.C=O;x=11(a);y=12(a)+a.13;3(l.n){x+=a.I.1O;y+=a.I.1P}a.8.7.J=x+"v";a.8.7.K=y+"v";a.8.7.14="1x";3(a.8.h!=5){a.8.h.7.J=a.8.7.J;a.8.h.7.K=a.8.7.K;a.8.h.7.15=a.8.p+"v";a.8.h.7.1y=a.8.13+"v";a.8.h.7.P=""}}k 1g(a){1h(a,"1w");3(a.8!=5){Q(a.8);a.8.7.14="1z";3(a.8.h!=5)a.8.h.7.P="1i"}}k 1Q(a){f b;3(l.n)b=R(r.G.Z,"1j","8");B b=a.10;3(b.t!=5)Q(b)}k 1R(a,b){f c,8,x,y;3(l.n)c=R(r.G.Z,"A","1S");B c=a.10;8=R(c,"1j","8");3(8.t!=5)Q(8);8.t=c;c.H+=" 1A";3(c.9==5){c.9=m.1u(b);3(c.9.1e==5)1f(c.9)}3(c.9.C==5)c.9.C=O;x=11(c)+c.p;y=12(c);f d,L;3(l.n){d=S.16(m.D.1k,m.17.1k)+(m.D.1l!=0?m.D.1l:m.17.1l);L=S.16(m.D.1m,m.17.1m)+(m.D.1n!=0?m.D.1n:m.17.1n)}3(l.W){d=m.D.1k+r.1B;L=m.D.1m+r.1C}3(l.X){d=r.1T+r.1B;L=r.1U+r.1C}d-=c.9.p;L-=c.9.13;3(x>d)x=S.16(0,x-c.p-c.9.p+(8.p-c.p));y=S.16(0,S.1V(y,L));c.9.7.J=x+"v";c.9.7.K=y+"v";c.9.7.14="1x";3(c.9.h!=5){c.9.h.7.J=c.9.7.J;c.9.h.7.K=c.9.7.K;c.9.h.7.15=c.9.p+"v";c.9.h.7.1y=c.9.13+"v";c.9.h.7.P=""}3(l.n)r.G.1W=F;B a.1X()}k Q(a){3(a==5||a.t==5)g;3(a.t.9!=5){Q(a.t.9);a.t.9.7.14="1z";3(a.t.9.h!=5)a.t.9.h.7.P="1i";a.t.9=5}1h(a.t,"1A");a.t=5}k O(a){f b;3(o==5)g;3(l.n)b=r.G.1Y;B 3(a.18!=5)b=(a.18.1o?a.18:a.18.1p);3(R(b,"1j","8")==5){1g(o);o=5}}k 1f(a){f b,u;f c,M;f d;f w,1q;f i,j;3(l.n){a.7.1Z="2.20";u=a.1r("1D");T(i=0;i<u.z;i++)3(U(u[i],"1E")){u[i].7.21="22";u[i].23.24="4"}}b=a.1r("A");3(b.z>0)d=b[0].p;B g;T(i=0;i<b.z;i++){u=b[i].1r("1D");c=5;M=5;T(j=0;j<u.z;j++){3(U(u[j],"25"))c=u[j];3(U(u[j],"1E"))M=u[j]}3(c!=5&&M!=5){c.7.26=(d-(c.p+M.p))+"v";3(l.W)M.7.27="28"}}3(l.n){w=b[0].p;b[0].7.15=w+"v";1q=b[0].p-w;w-=1q;b[0].7.15=w+"v"}3(l.n){f e=m.29("2a");e.2b=0;e.2c="2d:E;";e.7.P="1i";e.7.2e="2f";e.7.2g="2h:2i.2j.2k(7=0,2l=0)";a.h=a.1p.2m(e,a)}a.1e=F}k R(a,b,c){2n(a!=5){3(a.1o!=5&&a.1o==b&&U(a,c))g a;a=a.1p}g a}k U(a,b){f i,19;19=a.H.1F(" ");T(i=0;i<19.z;i++)3(19[i]==b)g F;g E}k 1h(a,b){f i,V,1a;3(a.H==5)g;1a=1t 2o();V=a.H.1F(" ");T(i=0;i<V.z;i++)3(V[i]!=b)1a.2p(V[i]);a.H=1a.2q(" ")}k 11(a){f x;x=a.2r;3(a.I!=5)x+=11(a.I);g x}k 12(a){f y;y=a.2s;3(a.I!=5)y+=12(a.I);g y}',62,153,'|||if||null||style|menu|subMenu||||||var|return|iframeEl|||function|browser|document|isIE|activeButton|offsetWidth|this|window||activeItem|spanList|px||||length||else|onmouseout|documentElement|false|true|event|className|offsetParent|left|top|maxY|arrowEl|version|buttonOrMenuMouseout|display|closeSubMenu|getContainerWith|Math|for|hasClassName|curList|isOP|isNS|indexOf|srcElement|currentTarget|getPageOffsetLeft|getPageOffsetTop|offsetHeight|visibility|width|max|body|relatedTarget|list|newList|parseFloat|substr|buttonClick|isInitialized|menuInit|resetButton|removeClassName|none|DIV|scrollLeft|clientWidth|scrollTop|clientHeight|tagName|parentNode|dw|getElementsByTagName|Browser|new|getElementById|depressButton|menuButtonActive|visible|height|hidden|menuItemHighlight|innerWidth|innerHeight|SPAN|menuItemArrow|split|navigator|userAgent|Opera|Netscape6|Gecko|MSIE|blur|buttonMouseover|clientLeft|clientTop|menuMouseover|menuItemMouseover|menuItem|scrollX|scrollY|min|cancelBubble|stopPropagation|toElement|lineHeight|5ex|fontFamily|Webdings|firstChild|nodeValue|menuItemText|paddingRight|marginRight|0px|createElement|IFRAME|frameBorder|src|javascript|position|absolute|filter|progid|DXImageTransform|Microsoft|Alpha|opacity|insertBefore|while|Array|push|join|offsetLeft|offsetTop'.split('|'),0,{}))

//LightWindow
// lightwindow.js v2.0
//
// Copyright (c) 2007 stickmanlabs
// Author: Kevin P Miller | http://www.stickmanlabs.com
// 
// LightWindow is freely distributable under the terms of an MIT-style license.
//
// I don't care what you think about the file size...
//   Be a pro: 
//	    http://www.thinkvitamin.com/features/webapps/serving-javascript-fast
//      http://rakaz.nl/item/make_your_pages_load_faster_by_combining_and_compressing_javascript_and_css_files
//

/*-----------------------------------------------------------------------------------------------*/

if(typeof Effect == 'undefined')
  throw("lightwindow.js requires including script.aculo.us' effects.js library!");

// This will stop image flickering in IE6 when elements with images are moved
try {
	document.execCommand("BackgroundImageCache", false, true);
} catch(e) {}

var lightwindow = Class.create();	
lightwindow.prototype = {
	//
	//	Setup Variables
	//
	element : null,
	contentToFetch : null,
	windowActive : false,
	dataEffects : [],
	dimensions : {
		cruft : null,
		container : null,
		viewport : {
			height : null,
			width : null,
			offsetTop : null,
			offsetLeft : null
		}
	},
	pagePosition : {
		x : 0,
		y : 0
	},
	pageDimensions : {
		width : null,
		height : null
	},
	preloadImage : [],
	preloadedImage : [],
	galleries : [],
	resizeTo : {
		height : null,
		heightPercent : null,
		width : null,
		widthPercent : null,
		fixedTop : null,
		fixedLeft : null
	},
	scrollbarOffset : 18,
	navigationObservers : {
		previous : null,
		next : null
	},
	containerChange : {
		height : 0,
		width : 0
	},
	activeGallery : false,
	galleryLocation : {
		current : 0,
		total : 0
	},
	//
	//	Initialize the lightwindow.
	//
	initialize : function(options) {
		this.options = Object.extend({
			resizeSpeed : 8,
			contentOffset : {
				height : 20,
				width : 20
			},
			dimensions : {
				image : {height : 250, width : 250},
				page : {height : 250, width : 250},
				inline : {height : 250, width : 250},
				media : {height : 250, width : 250},
				external : {height : 250, width : 250},
				titleHeight : 25
			},
			classNames : {	
				standard : 'lightwindow',
				action : 'lightwindow_action'
			},
			fileTypes : {
				page : ['asp', 'aspx', 'cgi', 'cfm', 'htm', 'html', 'pl', 'php4', 'php3', 'php', 'php5', 'phtml', 'rhtml', 'shtml', 'txt', 'vbs', 'rb'],
				media : ['aif', 'aiff', 'asf', 'avi', 'divx', 'm1v', 'm2a', 'm2v', 'm3u', 'mid', 'midi', 'mov', 'moov', 'movie', 'mp2', 'mp3', 'mpa', 'mpa', 'mpe', 'mpeg', 'mpg', 'mpg', 'mpga', 'pps', 'qt', 'rm', 'ram', 'swf', 'viv', 'vivo', 'wav'],
				image : ['bmp', 'gif', 'jpg', 'png', 'tiff']
			},
			mimeTypes : {
				avi : 'video/avi',
				aif : 'audio/aiff',
				aiff : 'audio/aiff',
				gif : 'image/gif',
				bmp : 'image/bmp',
				jpeg : 'image/jpeg',
				m1v : 'video/mpeg',
				m2a : 'audio/mpeg',
				m2v : 'video/mpeg',
				m3u : 'audio/x-mpequrl',
				mid : 'audio/x-midi',
				midi : 'audio/x-midi',
				mjpg : 'video/x-motion-jpeg',
				moov : 'video/quicktime',
				mov : 'video/quicktime',
				movie : 'video/x-sgi-movie',
				mp2 : 'audio/mpeg',
				mp3 : 'audio/mpeg3',
				mpa : 'audio/mpeg',
				mpa : 'video/mpeg',
				mpe : 'video/mpeg',
				mpeg : 'video/mpeg',
				mpg : 'audio/mpeg',
				mpg : 'video/mpeg',
				mpga : 'audio/mpeg',
				pdf : 'application/pdf',
				png : 'image/png',
				pps : 'application/mspowerpoint',
				qt : 'video/quicktime',
				ram : 'audio/x-pn-realaudio-plugin',
				rm : 'application/vnd.rn-realmedia',
				swf	: 'application/x-shockwave-flash',
				tiff : 'image/tiff',
				viv : 'video/vivo',
				vivo : 'video/vivo',
				wav : 'audio/wav',
				wmv : 'application/x-mplayer2'			
			},	
			classids : {
				mov : 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',
				swf : 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000',
				wmv : 'clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6'
			},
			codebases : {
				mov : 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',
				swf : 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0',
				wmv : 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715'
			},	
			viewportPadding : 10,
			EOLASFix : 'swf,wmv,fla,flv',
			overlay : {
				opacity : 0.7,
				image : 'images/black.png',
				presetImage : 'images/black-70.png'
			},
			skin : 	{
				main : 	'<div id="lightwindow_container" >'+
							'<div id="lightwindow_title_bar" >'+
								'<div id="lightwindow_title_bar_inner" >'+
									'<span id="lightwindow_title_bar_title"></span>'+
									'<a id="lightwindow_title_bar_close_link" >close</a>'+
								'</div>'+
							'</div>'+
							'<div id="lightwindow_stage" >'+
								'<div id="lightwindow_contents" >'+
								'</div>'+
								'<div id="lightwindow_navigation" >'+
									'<a href="#" id="lightwindow_previous" >'+
										'<span id="lightwindow_previous_title"></span>'+
									'</a>'+
									'<a href="#" id="lightwindow_next" >'+
										'<span id="lightwindow_next_title"></span>'+
									'</a>'+
									'<iframe name="lightwindow_navigation_shim" id="lightwindow_navigation_shim" src="javascript:false;" frameBorder="0" scrolling="no"></iframe>'+
								'</div>'+								
								'<div id="lightwindow_galleries">'+
									'<div id="lightwindow_galleries_tab_container" >'+
										'<a href="#" id="lightwindow_galleries_tab" >'+
											'<span id="lightwindow_galleries_tab_span" class="up" >Galleries</span>'+
										'</a>'+
									'</div>'+
									'<div id="lightwindow_galleries_list" >'+
									'</div>'+
								'</div>'+
							'</div>'+
							'<div id="lightwindow_data_slide" >'+
								'<div id="lightwindow_data_slide_inner" >'+
									'<div id="lightwindow_data_details" >'+
										'<div id="lightwindow_data_gallery_container" >'+
											'<span id="lightwindow_data_gallery_current"></span>'+
											' of '+
											'<span id="lightwindow_data_gallery_total"></span>'+
										'</div>'+
										'<div id="lightwindow_data_author_container" >'+
											'by <span id="lightwindow_data_author"></span>'+
										'</div>'+
									'</div>'+
									'<div id="lightwindow_data_caption" >'+
									'</div>'+
								'</div>'+
							'</div>'+
						'</div>',	
				loading : 	'<div id="lightwindow_loading" >'+
								'<img src="images/ajax-loading.gif" alt="loading" />'+
								'<span>Loading or <a href="javascript: myLightWindow.deactivate();">Cancel</a></span>'+
								'<iframe name="lightwindow_loading_shim" id="lightwindow_loading_shim" src="javascript:false;" frameBorder="0" scrolling="no"></iframe>'+
							'</div>',
				iframe : 	'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'+
							'<html xmlns="http://www.w3.org/1999/xhtml">'+
								'<body>'+
									'{body_replace}'+
								'</body>'+
							'</html>',
				gallery : {
					top :		'<div class="lightwindow_galleries_list">'+
									'<h1>{gallery_title_replace}</h1>'+
									'<ul>',
					middle : 			'<li>'+
											'{gallery_link_replace}'+
										'</li>',
					bottom : 		'</ul>'+
								'</div>'
				}
			},
			formMethod : 'get',
			hideFlash : false,
			hideGalleryTab : false,
			showTitleBar : true,
			animationHandler : false,
			navigationHandler : false,
			transitionHandler : false,
			finalAnimationHandler : false,
			formHandler : false,
			galleryAnimationHandler : false,
			showGalleryCount : true
		}, options || {});
		this.duration = ((11-this.options.resizeSpeed)*0.15);
		this._setupLinks();
		this._getScroll();
		this._getPageDimensions();
		this._browserDimensions();
		this._addLightWindowMarkup(false);
		this._setupDimensions(); 
		this.buildGalleryList();
	},
	//
	//	Activate the lightwindow.
	//
	activate : function(e, link){		
		// Clear out the window Contents
		this._clearWindowContents(true);
			
		// Add back in out loading panel
		this._addLoadingWindowMarkup();

		// Setup the element properties
		this._setupWindowElements(link);
		
		// Setup everything
		this._getScroll();
		this._browserDimensions();
		this._setupDimensions();
		this._toggleTroubleElements('hidden', false);
		this._displayLightWindow('block', 'hidden');
		this._setStatus(true);
		this._monitorKeyboard(true);
		this._prepareIE(true);
		this._loadWindow();
	},
	//
	//	Turn off the window
	//
	deactivate : function(){
		// The window is not active
		this.windowActive = false;
		
		// There is no longer a gallery active
		this.activeGallery = false;
		if (!this.options.hideGalleryTab) {
			this._handleGalleryAnimation(false);
		}
		
		// Kill the animation
		this.animating = false;
		
		// Clear our element
		this.element = null;
		
		// hide the window.
		this._displayLightWindow('none', 'visible');
		
		// Clear out the window Contents
		this._clearWindowContents(false);
		
		// Stop all animation
		var queue = Effect.Queues.get('lightwindowAnimation').each(function(e){e.cancel();});
		
		// Undo the setup
		this._prepareIE(false);
		this._setupDimensions();
		this._toggleTroubleElements('visible', false);	
		this._monitorKeyboard(false);	
	},
	//
	//  Initialize specific window
	//
	createWindow : function(element, attributes) {
		this._processLink($(element));
	},
	//
	//  Open a Window from a hash of attributes
	//
	activateWindow : function(options) {
		this.element = Object.extend({
			href : null,
			title : null,
			author : null,
			caption : null,
			rel : null,
			top : null,
			left : null,
			type : null,
			showImages : null,
			height : null,
			width : null,
			loadingAnimation : null,
			iframeEmbed : null,
			form : null
		}, options || {});
		
		// Set the window type
		this.contentToFetch = this.element.href;
		this.windowType = this.element.type ? this.element.type : this._fileType(this.element.href);	
		
		// Clear out the window Contents
		this._clearWindowContents(true);
			
		// Add back in out loading panel
		this._addLoadingWindowMarkup();
		
		// Setup everything
		this._getScroll();
		this._browserDimensions();
		this._setupDimensions();
		this._toggleTroubleElements('hidden', false);
		this._displayLightWindow('block', 'hidden');
		this._setStatus(true);
		this._monitorKeyboard(true);
		this._prepareIE(true);
		this._loadWindow();
	},
	//
	//  Fire off our Form handler
	//
	submitForm : function(e) {
		if (this.options.formHandler) {
			this.options.formHandler(e);
		} else {
			this._defaultFormHandler(e);
		}
	},
	//
	//	Reload the window with another location
	//
	openWindow : function(element) {
		var element = $(element);

		// The window is active
		this.windowActive = true;
		
		// Clear out the window Contents
		this._clearWindowContents(true);
		
		// Add back in out loading panel
		this._addLoadingWindowMarkup();
		
		// Setup the element properties
		this._setupWindowElements(element);

		this._setStatus(true);
		this._handleTransition();
	},
	//
	//  Navigate the window
	//
	navigateWindow : function(direction) {
		this._handleNavigation(false);
		if (direction == 'previous') {
			this.openWindow(this.navigationObservers.previous);
		} else if (direction == 'next'){ 
			this.openWindow(this.navigationObservers.next);
		}
	},
	//
	//  Build the Gallery List and Load it
	//
	buildGalleryList : function() {
		var output = '';
		var galleryLink;
		for (i in this.galleries) {
			if (typeof this.galleries[i] == 'object') {
				output += (this.options.skin.gallery.top).replace('{gallery_title_replace}', unescape(i));
				for (j in this.galleries[i]) {
					if (typeof this.galleries[i][j] == 'object') {						
						galleryLink = '<a href="#" id="lightwindow_gallery_'+i+'_'+j+'" >'+unescape(j)+'</a>';
						output += (this.options.skin.gallery.middle).replace('{gallery_link_replace}', galleryLink);
					}
				}
				output += this.options.skin.gallery.bottom;
			}
		}
		new Insertion.Top('lightwindow_galleries_list', output);
		
		// Attach Events
		for (i in this.galleries) {
			if (typeof this.galleries[i] == 'object') {
				for (j in this.galleries[i]) {
					if (typeof this.galleries[i][j] == 'object') {
						Event.observe($('lightwindow_gallery_'+i+'_'+j), 'click', this.openWindow.bind(this, this.galleries[i][j][0]), false);
						$('lightwindow_gallery_'+i+'_'+j).onclick = function() {return false;};	
					}
				}
			}
		}
	},
	// 
	//  Set Links Up
	//
	_setupLinks : function() {
		var links = $$('.'+this.options.classNames.standard);
		links.each(function(link) {
			this._processLink(link);
		}.bind(this));	
	},
	//
	//  Process a Link
	//
	_processLink : function(link) {
		if ((this._fileType(link.getAttribute('href')) == 'image' || this._fileType(link.getAttribute('href')) == 'media')) {
			if (gallery = this._getGalleryInfo(link.rel)) {
				if (!this.galleries[gallery[0]]) {
					this.galleries[gallery[0]] = new Array();
				}
				if (!this.galleries[gallery[0]][gallery[1]]) {
					this.galleries[gallery[0]][gallery[1]] = new Array();
				}
				this.galleries[gallery[0]][gallery[1]].push(link);
			}
		}
		
		// Take care of our inline content
		var url = link.getAttribute('href');
		if (url.indexOf('?') > -1) {
			url = url.substring(0, url.indexOf('?'));
		}
		
		var container = url.substring(url.indexOf('#')+1);
		if($(container)) {
			$(container).setStyle({
				display : 'none'
			});
		}
		
		Event.observe(link, 'click', this.activate.bindAsEventListener(this, link), false);
		link.onclick = function() {return false;};		
	},
	//
	//	Setup our actions
	//
	_setupActions : function() {
		var links = $$('#lightwindow_container .'+this.options.classNames.action);
		links.each(function(link) {
			Event.observe(link, 'click', this[link.getAttribute('rel')].bindAsEventListener(this, link), false);
			link.onclick = function() {return false;};
		}.bind(this));
	},
	//
	//	Add the markup to the page.
	//
	_addLightWindowMarkup : function(rebuild) {
		var overlay = Element.extend(document.createElement('div'));
		overlay.setAttribute('id', 'lightwindow_overlay');		
		// FF Mac has a problem with putting Flash above a layer without a 100% opacity background, so we need to use a pre-made
		if (Prototype.Browser.Gecko) {
			overlay.setStyle({
				backgroundImage: 'url('+this.options.overlay.presetImage+')',
				backgroundRepeat: 'repeat',
				height: this.pageDimensions.height+'px'
			});			
		} else {
			overlay.setStyle({
				opacity: this.options.overlay.opacity,
				backgroundImage: 'url('+this.options.overlay.image+')',
				backgroundRepeat: 'repeat',
				height: this.pageDimensions.height+'px'
			});
		}
		
		var lw = document.createElement('div');
		lw.setAttribute('id', 'lightwindow');
		lw.innerHTML = this.options.skin.main;
		
		var body = document.getElementsByTagName('body')[0];
		body.appendChild(overlay);
		body.appendChild(lw);	
				
		if ($('lightwindow_title_bar_close_link')) {
			Event.observe('lightwindow_title_bar_close_link', 'click', this.deactivate.bindAsEventListener(this));
			$('lightwindow_title_bar_close_link').onclick = function() {return false;};
		}
			
		Event.observe($('lightwindow_previous'), 'click', this.navigateWindow.bind(this, 'previous'), false);
		$('lightwindow_previous').onclick = function() {return false;};		
		Event.observe($('lightwindow_next'), 'click', this.navigateWindow.bind(this, 'next'), false);
		$('lightwindow_next').onclick = function() {return false;};

		if (!this.options.hideGalleryTab) {
			Event.observe($('lightwindow_galleries_tab'), 'click', this._handleGalleryAnimation.bind(this, true), false);
			$('lightwindow_galleries_tab').onclick = function() {return false;};
		}
		
		// Because we use position absolute, kill the scroll Wheel on animations
		if (Prototype.Browser.IE) {
			Event.observe(document, 'mousewheel', this._stopScrolling.bindAsEventListener(this), false);
		} else {
			Event.observe(window, 'DOMMouseScroll', this._stopScrolling.bindAsEventListener(this), false);
		}
				
		Event.observe(overlay, 'click', this.deactivate.bindAsEventListener(this), false);
		overlay.onclick = function() {return false;};
	},
	//
	//  Add loading window markup
	//
	_addLoadingWindowMarkup : function() {
		$('lightwindow_contents').innerHTML += this.options.skin.loading;
	},
	//
	//  Setup the window elements
	//
	_setupWindowElements : function(link) {
		this.element = link;
		this.element.title = null ? '' : link.getAttribute('title');
		this.element.author = null ? '' : link.getAttribute('author');
		this.element.caption = null ? '' : link.getAttribute('caption');
		this.element.rel = null ? '' : link.getAttribute('rel');
		this.element.params = null ? '' : link.getAttribute('params');

		// Set the window type
		this.contentToFetch = this.element.href;
		this.windowType = this._getParameter('lightwindow_type') ? this._getParameter('lightwindow_type') : this._fileType(this.contentToFetch);	
	},
	//
	//  Clear the window contents out
	//
	_clearWindowContents : function(contents) {
		// If there is an iframe, its got to go
		if ($('lightwindow_iframe')) {
			Element.remove($('lightwindow_iframe'));
		}

		// Stop playing an object if its still around
		if ($('lightwindow_media_primary')) {
			try {
				$('lightwindow_media_primary').Stop();
			} catch(e) {}
			Element.remove($('lightwindow_media_primary'));
		}

		// Stop playing an object if its still around		
		if ($('lightwindow_media_secondary')) {
			try {
				$('lightwindow_media_secondary').Stop();
			} catch(e) {}
			Element.remove($('lightwindow_media_secondary'));
		}
		
		this.activeGallery = false;
		this._handleNavigation(this.activeGallery);
		
		if (contents) {
			// Empty the contents
			$('lightwindow_contents').innerHTML = '';
			
			// Reset the scroll bars
			$('lightwindow_contents').setStyle({
				overflow: 'hidden'
			});		
			
			if (!this.windowActive) {
				$('lightwindow_data_slide_inner').setStyle({
					display: 'none'
				});

				$('lightwindow_title_bar_title').innerHTML = '';
			}

			// Because of browser differences and to maintain flexible captions we need to reset this height at close
			$('lightwindow_data_slide').setStyle({
				height: 'auto'
			});
		}
		
		this.resizeTo.height = null;
		this.resizeTo.width = null;
	},
	//
	//	Set the status of our animation to keep things from getting clunky
	//
	_setStatus : function(status) {
		this.animating = status;
		if (status) {
			Element.show('lightwindow_loading');
		}
		if (!(/MSIE 6./i.test(navigator.userAgent))) {
			this._fixedWindow(status);
		}
	},
	//
	//  Make this window Fixed
	//
	_fixedWindow : function(status) {
		if (status) {
			if (this.windowActive) {
				this._getScroll();
				$('lightwindow').setStyle({
					position: 'absolute',
					top: parseFloat($('lightwindow').getStyle('top'))+this.pagePosition.y+'px',
					left: parseFloat($('lightwindow').getStyle('left'))+this.pagePosition.x+'px'
				});		
			} else {
				$('lightwindow').setStyle({
					position: 'absolute'
				});						
			}
		} else {
			if (this.windowActive) {
				this._getScroll();
				$('lightwindow').setStyle({
					position: 'fixed',
					top: parseFloat($('lightwindow').getStyle('top'))-this.pagePosition.y+'px',
					left: parseFloat($('lightwindow').getStyle('left'))-this.pagePosition.x+'px'
				});		
			} else {
				if ($('lightwindow_iframe')) {
					// Ideally here we would set a 50% value for top and left, but Safari rears it ugly head again and we need to do it by pixels
					this._browserDimensions();
				}
				$('lightwindow').setStyle({
					position: 'fixed',
					top: (parseFloat(this._getParameter('lightwindow_top')) ? parseFloat(this._getParameter('lightwindow_top'))+'px' : this.dimensions.viewport.height/2+'px'),
					left: (parseFloat(this._getParameter('lightwindow_left')) ? parseFloat(this._getParameter('lightwindow_left'))+'px' : this.dimensions.viewport.width/2+'px')
				});
			}
		}
	},
	//
	//	Prepare the window for IE.
	//
	_prepareIE : function(setup) {
		if (Prototype.Browser.IE) {
			var height, overflowX, overflowY;
			if (setup) { 
				var height = '100%';
			} else {
				var height = 'auto';
			}
			var body = document.getElementsByTagName('body')[0];
			var html = document.getElementsByTagName('html')[0];
			html.style.height = body.style.height = height;
		}
	},
	_stopScrolling : function(e) {
		if (this.animating) {
			if (e.preventDefault) {
				e.preventDefault();
			}
			e.returnValue = false;		
		}
	},
	//
	//	Get the scroll for the page.
	//
	_getScroll : function(){
      	if(typeof(window.pageYOffset) == 'number') {
        	this.pagePosition.x = window.pageXOffset;
        	this.pagePosition.y = window.pageYOffset;
      	} else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) {
	       	this.pagePosition.x = document.body.scrollLeft;
        	this.pagePosition.y = document.body.scrollTop;
		} else if(document.documentElement) {
        	this.pagePosition.x = document.documentElement.scrollLeft;
        	this.pagePosition.y = document.documentElement.scrollTop;
      	}
	},
	//
	//	Reset the scroll.
	//
	_setScroll : function(x, y) {
		document.documentElement.scrollLeft = x; 
		document.documentElement.scrollTop = y; 
	},
	//
	//	Hide Selects from the page because of IE.
	//     We could use iframe shims instead here but why add all the extra markup for one browser when this is much easier and cleaner
	//
	_toggleTroubleElements : function(visibility, content){
		
		if (content) {
			var selects = $('lightwindow_contents').getElementsByTagName('select');
		} else {
			var selects = document.getElementsByTagName('select');
		}
		
		for(var i = 0; i < selects.length; i++) {
			selects[i].style.visibility = visibility;
		}
		
		if (!content) {
			if (this.options.hideFlash){
				var objects = document.getElementsByTagName('object');
				for (i = 0; i != objects.length; i++) {
					objects[i].style.visibility = visibility;
				}
				var embeds = document.getElementsByTagName('embed');
				for (i = 0; i != embeds.length; i++) {
					embeds[i].style.visibility = visibility;
				}
			}
			var iframes = document.getElementsByTagName('iframe');
			for (i = 0; i != iframes.length; i++) {
				iframes[i].style.visibility = visibility;
			}
		}
	},
	// 
	//  Get the actual page size
	//
	_getPageDimensions : 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){ 
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		} else { 
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}

		var windowWidth, windowHeight;
		if (self.innerHeight) {	
			windowWidth = self.innerWidth;
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { 
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { 
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}	

		if(yScroll < windowHeight){
			this.pageDimensions.height = windowHeight;
		} else { 
			this.pageDimensions.height = yScroll;
		}

		if(xScroll < windowWidth){	
			this.pageDimensions.width = windowWidth;
		} else {
			this.pageDimensions.width = xScroll;
		}
	},
	//
	//	Display the lightWindow.
	//
	_displayLightWindow : function(display, visibility) {
		$('lightwindow_overlay').style.display = $('lightwindow').style.display = $('lightwindow_container').style.display = display;	
		$('lightwindow_overlay').style.visibility = $('lightwindow').style.visibility = $('lightwindow_container').style.visibility = visibility;
	},
	//
	//	Setup Dimensions of lightwindow.

	//
	_setupDimensions : function() {

		var originalHeight, originalWidth;
		switch (this.windowType) {
			case 'page' :
				originalHeight = this.options.dimensions.page.height;
				originalWidth = this.options.dimensions.page.width;
				break;

			case 'image' :
				originalHeight = this.options.dimensions.image.height;
				originalWidth = this.options.dimensions.image.width;
				break;
				
			case 'media' :
				originalHeight = this.options.dimensions.media.height;
				originalWidth = this.options.dimensions.media.width;
				break;
			
			case 'external' : 
				originalHeight = this.options.dimensions.external.height;
				originalWidth = this.options.dimensions.external.width;
				break;
				
			case 'inline' :
				originalHeight = this.options.dimensions.inline.height;
				originalWidth = this.options.dimensions.inline.width;
				break;
				
			default :
				originalHeight = this.options.dimensions.page.height;
				originalWidth = this.options.dimensions.page.width;
				break;
				
		}

		var offsetHeight = this._getParameter('lightwindow_top') ? parseFloat(this._getParameter('lightwindow_top'))+this.pagePosition.y : this.dimensions.viewport.height/2+this.pagePosition.y;
		var offsetWidth = this._getParameter('lightwindow_left') ? parseFloat(this._getParameter('lightwindow_left'))+this.pagePosition.x : this.dimensions.viewport.width/2+this.pagePosition.x;
		
		// So if a theme has say shadowed edges, they should be consistant and take care of in the contentOffset
		$('lightwindow').setStyle({
			top: offsetHeight+'px',
			left: offsetWidth+'px'
		});
		
		$('lightwindow_container').setStyle({
			height: originalHeight+'px',
			width: originalWidth+'px',
			left: -(originalWidth/2)+'px',
			top: -(originalHeight/2)+'px'
		});

		$('lightwindow_contents').setStyle({
			height: originalHeight+'px',
			width: originalWidth+'px'
		});
	},
	//
	//	Get the type of file.
	//
	_fileType : function(url) {
		var image = new RegExp("[^\.]\.("+this.options.fileTypes.image.join('|')+")\s*$", "i");
		if (image.test(url)) return 'image';
		if (url.indexOf('#') > -1 && (document.domain == this._getDomain(url))) return 'inline';		
		if (url.indexOf('?') > -1) url = url.substring(0, url.indexOf('?'));
		var type = 'unknown';
		var page = new RegExp("[^\.]\.("+this.options.fileTypes.page.join('|')+")\s*$", "i");
		var media = new RegExp("[^\.]\.("+this.options.fileTypes.media.join('|')+")\s*$", "i");
		if (document.domain != this._getDomain(url)) type = 'external';
	  	if (media.test(url)) type = 'media';
		if (type == 'external' || type == 'media') return type;
	  	if (page.test(url) || url.substr((url.length-1), url.length) == '/') type = 'page';
		return type;
	},
	//
	//  Get file Extension
	//
	_fileExtension : function(url) {
		if (url.indexOf('?') > -1) {
			url = url.substring(0, url.indexOf('?'));
		}
		var extenstion = '';
		for (var x = (url.length-1); x > -1; x--) {
			if (url.charAt(x) == '.') {
				return extenstion;
			}
			extenstion = url.charAt(x)+extenstion;
		}
	},
	//
	//	Monitor the keyboard while this lightwindow is up
	//
	_monitorKeyboard : function(status) {
		if (status) document.onkeydown = this._eventKeypress.bind(this); 
		else document.onkeydown = '';
	},
	//
	//  Perform keyboard actions
	//
	_eventKeypress : function(e) {
		if (e == null) {
			var keycode = event.keyCode;
		} else {
			var keycode = e.which;
		}
		
		switch (keycode) { 
			case 27: 
				this.deactivate(); 
				break;
			
			case 13:
				return;
				
			default:
				break;
		}
	
		// Gotta stop those quick fingers
		if (this.animating) {
			return false;
		}
		
		switch (String.fromCharCode(keycode).toLowerCase()) {
			case 'p':
				if (this.navigationObservers.previous) {
					this.navigateWindow('previous');
				}
				break;
				
			case 'n':
				if (this.navigationObservers.next) {
					this.navigateWindow('next');
				}
				break;
				
			default:
				break;
		}
	},
	//
	//	Get Gallery Information
	//
	_getGalleryInfo : function(rel) {
		if (!rel) return false;
		if (rel.indexOf('[') > -1) {
			return new Array(escape(rel.substring(0, rel.indexOf('['))), escape(rel.substring(rel.indexOf('[')+1, rel.indexOf(']'))));
		} else {
			return false;
		}
	},
	//
	//	Get the domain from a string.
	//
	_getDomain : function(url) {    
        var leadSlashes = url.indexOf('//');
        var domainStart = leadSlashes+2;
        var withoutResource = url.substring(domainStart, url.length);
        var nextSlash = withoutResource.indexOf('/');
        var domain = withoutResource.substring(0, nextSlash);
		if (domain.indexOf(':') > -1){
			var portColon = domain.indexOf(':');
			domain = domain.substring(0, portColon);
       	}
		return domain;
    },
	//
	//	Get the value from the params attribute string.
	//
	_getParameter : function(parameter, parameters) {
		if (!this.element) return false;
		if (parameter == 'lightwindow_top' && this.element.top) {
			return unescape(this.element.top);
		} else if (parameter == 'lightwindow_left' && this.element.left) {
			return unescape(this.element.left);
		} else if (parameter == 'lightwindow_type' && this.element.type) {
			return unescape(this.element.type);
		} else if (parameter == 'lightwindow_show_images' && this.element.showImages) {
			return unescape(this.element.showImages);
		} else if (parameter == 'lightwindow_height' && this.element.height) {
			return unescape(this.element.height);
		} else if (parameter == 'lightwindow_width' && this.element.width) {
			return unescape(this.element.width);
		} else if (parameter == 'lightwindow_loading_animation' && this.element.loadingAnimation) {
			return unescape(this.element.loadingAnimation);
		} else if (parameter == 'lightwindow_iframe_embed' && this.element.iframeEmbed) {
			return unescape(this.element.iframeEmbed);
		} else if (parameter == 'lightwindow_form' && this.element.form) {
			return unescape(this.element.form);
		} else {
			if (!parameters) {
				if (this.element.params) parameters = this.element.params;
				else return;
			}
			var value;
			var parameterArray = parameters.split(',');
			var compareString = parameter+'=';
			var compareLength = compareString.length;
			for (var i = 0; i < parameterArray.length; i++) {
				if (parameterArray[i].substr(0, compareLength) == compareString) {
					var currentParameter = parameterArray[i].split('=');
					value = currentParameter[1];
					break;
				}
			}
			if (!value) return false;
			else return unescape(value);
		}
	},
	//
	//  Get the Browser Viewport Dimensions
	//
	_browserDimensions : function() {
		if (Prototype.Browser.IE) {
            this.dimensions.viewport.height = document.documentElement.clientHeight;
            this.dimensions.viewport.width = document.documentElement.clientWidth;   
        } else {
            this.dimensions.viewport.height = window.innerHeight;
            this.dimensions.viewport.width = document.width || document.body.offsetWidth;
        }
	},
	//
	//  Get the scrollbar offset, I don't like this method but there is really no other way I can find.
	//
	_getScrollerWidth : function() {
	    var scrollDiv = Element.extend(document.createElement('div'));
		scrollDiv.setAttribute('id', 'lightwindow_scroll_div');
		scrollDiv.setStyle({
			position: 'absolute',
			top: '-10000px',
			left: '-10000px',
			width: '100px',
			height: '100px',
			overflow: 'hidden'
		});



	    var contentDiv = Element.extend(document.createElement('div'));
		contentDiv.setAttribute('id', 'lightwindow_content_scroll_div');
		contentDiv.setStyle({
			width: '100%',
			height: '200px'
		});

	    scrollDiv.appendChild(contentDiv);

		var body = document.getElementsByTagName('body')[0];
		body.appendChild(scrollDiv);

	    var noScroll = $('lightwindow_content_scroll_div').offsetWidth;
	    scrollDiv.style.overflow = 'auto';
    	var withScroll = $('lightwindow_content_scroll_div').offsetWidth;

	   	Element.remove($('lightwindow_scroll_div'));

	    this.scrollbarOffset = noScroll-withScroll;
	},
	

	//
	//  Add a param to an object dynamically created
	//
	_addParamToObject : function(name, value, object, id) {
		var param = document.createElement('param');
		param.setAttribute('value', value);
		param.setAttribute('name', name);
		if (id) {
			param.setAttribute('id', id);
		}
		object.appendChild(param);
		return object;
	},
	//
	//  Get the outer HTML of an object CROSS BROWSER
	//
	_outerHTML : function(object) {
 		if (Prototype.Browser.IE) {
			return object.outerHTML;
		} else {
			var clone = object.cloneNode(true);
			var cloneDiv = document.createElement('div');
			cloneDiv.appendChild(clone);
			return cloneDiv.innerHTML;
		}
	},
	//
	//  Convert an object to markup
	//
	_convertToMarkup : function(object, closeTag) {
		var markup = this._outerHTML(object).replace('</'+closeTag+'>', '');
		if (Prototype.Browser.IE) {
			for (var i = 0; i < object.childNodes.length; i++){
				markup += this._outerHTML(object.childNodes[i]);
			}
			markup += '</'+closeTag+'>';
		}
		return markup;
	},
	//
	//  Depending what type of browser it is we have to append the object differently... DAMN YOU IE!!
	//
	_appendObject : function(object, closeTag, appendTo) {
		if (Prototype.Browser.IE) {
			appendTo.innerHTML += this._convertToMarkup(object, closeTag);
			
			// Fix the Eolas activate thing but only for specified media, for example doing this to a quicktime film breaks it.
			if (this.options.EOLASFix.indexOf(this._fileType(this.element.href)) > -1) {
				var objectElements = document.getElementsByTagName('object');
				for (var i = 0; i < objectElements.length; i++) {
					if (objectElements[i].getAttribute("data")) objectElements[i].removeAttribute('data');
					objectElements[i].outerHTML = objectElements[i].outerHTML;
					objectElements[i].style.visibility = "visible";
				}
			}
		} else {
			appendTo.appendChild(object);	
		}	
	},
	//
	//  Add in iframe
	//
	_appendIframe : function(scroll) {
		var iframe = document.createElement('iframe');
		iframe.setAttribute('id', 'lightwindow_iframe');
		iframe.setAttribute('name', 'lightwindow_iframe');
		iframe.setAttribute('src', 'about:blank');
		iframe.setAttribute('height', '100%');
		iframe.setAttribute('width', '100%');
		iframe.setAttribute('frameborder', '0');
		iframe.setAttribute('marginwidth', '0');
		iframe.setAttribute('marginheight', '0');
		iframe.setAttribute('scrolling', scroll);	
		
		this._appendObject(iframe, 'iframe', $('lightwindow_contents'));
	},
	//
	//  Write Content to the iframe using the skin
	//
	_writeToIframe : function(content) {
		var template = this.options.skin.iframe;
		template = template.replace('{body_replace}', content); 
		if ($('lightwindow_iframe').contentWindow){
			$('lightwindow_iframe').contentWindow.document.open();
			$('lightwindow_iframe').contentWindow.document.write(template);
			$('lightwindow_iframe').contentWindow.document.close();
		} else {
			$('lightwindow_iframe').contentDocument.open();
			$('lightwindow_iframe').contentDocument.write(template);
			$('lightwindow_iframe').contentDocument.close();
		}
	},
	//
	//  Load the window Information
	//  
	_loadWindow : function() {
		switch (this.windowType) {
			case 'image' :

				var current = 0;
				var images = [];
				this.checkImage = [];
				this.resizeTo.height = this.resizeTo.width = 0;
				this.imageCount = this._getParameter('lightwindow_show_images') ? parseInt(this._getParameter('lightwindow_show_images')) : 1;

				// If there is a gallery get it
				if (gallery = this._getGalleryInfo(this.element.rel)) {	
					for (current = 0; current < this.galleries[gallery[0]][gallery[1]].length; current++) {
						if (this.contentToFetch.indexOf(this.galleries[gallery[0]][gallery[1]][current].href) > -1) {
							break;
						}
					}
					if (this.galleries[gallery[0]][gallery[1]][current-this.imageCount]) {
						this.navigationObservers.previous = this.galleries[gallery[0]][gallery[1]][current-this.imageCount];
					} else {
						this.navigationObservers.previous = false;
					}
					if (this.galleries[gallery[0]][gallery[1]][current+this.imageCount]) {
						this.navigationObservers.next = this.galleries[gallery[0]][gallery[1]][current+this.imageCount];
					} else {
						this.navigationObservers.next = false;
					}
					
					this.activeGallery = true;
				} else {
					this.navigationObservers.previous = false;
					this.navigationObservers.next = false;					

					this.activeGallery = false;
				}
				
				for (var i = current; i < (current+this.imageCount); i++) {
		
					if (gallery && this.galleries[gallery[0]][gallery[1]][i]) {
						this.contentToFetch = this.galleries[gallery[0]][gallery[1]][i].href;
						
						this.galleryLocation = {current: (i+1)/this.imageCount, total: (this.galleries[gallery[0]][gallery[1]].length)/this.imageCount};
											
						if (!this.galleries[gallery[0]][gallery[1]][i+this.imageCount]) {
							$('lightwindow_next').setStyle({
								display: 'none'
							});
						} else {
							$('lightwindow_next').setStyle({
								display: 'block'
							});
							$('lightwindow_next_title').innerHTML = this.galleries[gallery[0]][gallery[1]][i+this.imageCount].title;
						}
						
						if (!this.galleries[gallery[0]][gallery[1]][i-this.imageCount]) {
							$('lightwindow_previous').setStyle({
								display: 'none'
							});
						} else {
							$('lightwindow_previous').setStyle({
								display: 'block'
							});
							$('lightwindow_previous_title').innerHTML = this.galleries[gallery[0]][gallery[1]][i-this.imageCount].title;
						}
					}

					images[i] = document.createElement('img');
					images[i].setAttribute('id', 'lightwindow_image_'+i);
					images[i].setAttribute('border', '0');
					images[i].setAttribute('src', this.contentToFetch);
					$('lightwindow_contents').appendChild(images[i]);

					// We have to do this instead of .onload 
					this.checkImage[i] = new PeriodicalExecuter(function(i) {
						if (!(typeof $('lightwindow_image_'+i).naturalWidth != "undefined" && $('lightwindow_image_'+i).naturalWidth == 0)) {
	
							this.checkImage[i].stop();
	
							var imageHeight = $('lightwindow_image_'+i).getHeight();
							if (imageHeight > this.resizeTo.height) {
								this.resizeTo.height = imageHeight;
							}
							this.resizeTo.width += $('lightwindow_image_'+i).getWidth();
							this.imageCount--;
	
							$('lightwindow_image_'+i).setStyle({
								height: '100%'
							});
	
						 	if (this.imageCount == 0) {
								this._processWindow();
						 	}
						}
					
					}.bind(this, i), 1);			
				}


			break;
		
		case 'media' :			
		
			var current = 0;
			this.resizeTo.height = this.resizeTo.width = 0;

			// If there is a gallery get it
			if (gallery = this._getGalleryInfo(this.element.rel)) {	
				for (current = 0; current < this.galleries[gallery[0]][gallery[1]].length; current++) {
					if (this.contentToFetch.indexOf(this.galleries[gallery[0]][gallery[1]][current].href) > -1) {
						break;
					}
				}
				
				if (this.galleries[gallery[0]][gallery[1]][current-1]) {
					this.navigationObservers.previous = this.galleries[gallery[0]][gallery[1]][current-1];
				} else {
					this.navigationObservers.previous = false;
				}
				if (this.galleries[gallery[0]][gallery[1]][current+1]) {
					this.navigationObservers.next = this.galleries[gallery[0]][gallery[1]][current+1];
				} else {
					this.navigationObservers.next = false;
				}
		
				this.activeGallery = true;
			} else {
				this.navigationObservers.previous = false;
				this.navigationObservers.next = false;
				
				this.activeGallery = false;
			}
		

			if (gallery && this.galleries[gallery[0]][gallery[1]][current]) {
				this.contentToFetch = this.galleries[gallery[0]][gallery[1]][current].href;

				this.galleryLocation = {current: current+1, total: this.galleries[gallery[0]][gallery[1]].length};
				
				if (!this.galleries[gallery[0]][gallery[1]][current+1]) {
					$('lightwindow_next').setStyle({
						display: 'none'
					});
				} else {
					$('lightwindow_next').setStyle({
						display: 'block'
					});
					$('lightwindow_next_title').innerHTML = this.galleries[gallery[0]][gallery[1]][current+1].title;
				}
				
				if (!this.galleries[gallery[0]][gallery[1]][current-1]) {
					$('lightwindow_previous').setStyle({
						display: 'none'
					});
				} else {
					$('lightwindow_previous').setStyle({
						display: 'block'
					});
					$('lightwindow_previous_title').innerHTML = this.galleries[gallery[0]][gallery[1]][current-1].title;
				}
			}
			
			if (this._getParameter('lightwindow_iframe_embed')) {
				this.resizeTo.height = this.dimensions.viewport.height;
				this.resizeTo.width = this.dimensions.viewport.width;	
			} else {
				this.resizeTo.height = this._getParameter('lightwindow_height');
				this.resizeTo.width = this._getParameter('lightwindow_width');				
			}
			
			this._processWindow();
			
			break;

		case 'external' :		

			this._appendIframe('auto');

			this.resizeTo.height = this.dimensions.viewport.height;
			this.resizeTo.width = this.dimensions.viewport.width;
						
			this._processWindow();

			break;
				
		case 'page' :	
			
			var newAJAX = new Ajax.Request(
				this.contentToFetch, {
					method: 'get', 
					parameters: '', 
					onComplete: function(response) {
						$('lightwindow_contents').innerHTML += response.responseText;
						this.resizeTo.height = $('lightwindow_contents').scrollHeight+(this.options.contentOffset.height);
						this.resizeTo.width = $('lightwindow_contents').scrollWidth+(this.options.contentOffset.width);
						this._processWindow();
					}.bind(this)
				}
			);
			
			break;
			
		case 'inline' : 
		
			var content = this.contentToFetch;
			if (content.indexOf('?') > -1) {
				content = content.substring(0, content.indexOf('?'));
			}
			content = content.substring(content.indexOf('#')+1);
			
			new Insertion.Top($('lightwindow_contents'), $(content).innerHTML);
			
			this.resizeTo.height = $('lightwindow_contents').scrollHeight+(this.options.contentOffset.height);
			this.resizeTo.width = $('lightwindow_contents').scrollWidth+(this.options.contentOffset.width);
			
			this._toggleTroubleElements('hidden', true); 			
			this._processWindow();
			
			break;
			
		default : 
			throw("Page Type could not be determined, please amend this lightwindow URL "+this.contentToFetch);
			break;
		}
	},
	//
	//  Resize the Window to fit the viewport if necessary
	//
	_resizeWindowToFit : function() {
		if (this.resizeTo.height+this.dimensions.cruft.height > this.dimensions.viewport.height) {
			var heightRatio = this.resizeTo.height/this.resizeTo.width;
			this.resizeTo.height = this.dimensions.viewport.height-this.dimensions.cruft.height-(2*this.options.viewportPadding);
			// We only care about ratio's with this window type			
			if (this.windowType == 'image' || (this.windowType == 'media' && !this._getParameter('lightwindow_iframe_embed'))) {
				this.resizeTo.width = this.resizeTo.height/heightRatio;
				$('lightwindow_data_slide_inner').setStyle({
					width: this.resizeTo.width+'px'
				});			
			}
		} 
		if (this.resizeTo.width+this.dimensions.cruft.width > this.dimensions.viewport.width) {
			var widthRatio = this.resizeTo.width/this.resizeTo.height;
			this.resizeTo.width = this.dimensions.viewport.width-2*this.dimensions.cruft.width-(2*this.options.viewportPadding);
			// We only care about ratio's with this window type
			if (this.windowType == 'image' || (this.windowType == 'media' && !this._getParameter('lightwindow_iframe_embed'))) {
				this.resizeTo.height = this.resizeTo.width/widthRatio;
				$('lightwindow_data_slide_inner').setStyle({
					height: this.resizeTo.height+'px'
				});
			}
		}
			
	},
	//
	//  Set the Window to a preset size
	//
	_presetWindowSize : function() {
		if (this._getParameter('lightwindow_height')) {
			this.resizeTo.height = parseFloat(this._getParameter('lightwindow_height'));
		}
		if (this._getParameter('lightwindow_width')) {
			this.resizeTo.width = parseFloat(this._getParameter('lightwindow_width'));
		}
	},
	//
	//  Process the Window
	//
	_processWindow : function() {
		// Clean out our effects
		this.dimensions.dataEffects = [];
       if (this.element.closeLabel != null) {        
           $('lightwindow_title_bar_close_link').innerHTML = this.element.closeLabel;
       } else {
           $('lightwindow_title_bar_close_link').innerHTML = 'close';
       }
		// Set up the data-slide if we have caption information
		if (this.element.caption || this.element.author || (this.activeGallery && this.options.showGalleryCount)) {
			if (this.element.caption) {
				$('lightwindow_data_caption').innerHTML = this.element.caption;
				$('lightwindow_data_caption').setStyle({
					display: 'block'
				});
			} else {
				$('lightwindow_data_caption').setStyle({
					display: 'none'
				});				
			}
			if (this.element.author) {
				$('lightwindow_data_author').innerHTML = this.element.author;
				$('lightwindow_data_author_container').setStyle({
					display: 'block'
				});
			} else {
				$('lightwindow_data_author_container').setStyle({
					display: 'none'
				});				
			}
			if (this.activeGallery && this.options.showGalleryCount) {
				$('lightwindow_data_gallery_current').innerHTML = this.galleryLocation.current;
				$('lightwindow_data_gallery_total').innerHTML = this.galleryLocation.total;
				$('lightwindow_data_gallery_container').setStyle({
					display: 'block'
				});
			} else {
				$('lightwindow_data_gallery_container').setStyle({
					display: 'none'
				});				
			}

			$('lightwindow_data_slide_inner').setStyle({
				width: this.resizeTo.width+'px',
				height: 'auto',
				visibility: 'visible',
				display: 'block'
			});
			$('lightwindow_data_slide').setStyle({
				height: $('lightwindow_data_slide').getHeight()+'px',
				width: '1px',
				overflow: 'hidden',
				display: 'block'
			});
		} else {
			$('lightwindow_data_slide').setStyle({
				display: 'none',
				width: 'auto'
			});
			$('lightwindow_data_slide_inner').setStyle({
				display: 'none',
				visibility: 'hidden',
				width: this.resizeTo.width+'px',
				height: '0px'
			});
		}
				
		if (this.element.title != 'null') {		
			$('lightwindow_title_bar_title').innerHTML = this.element.title;
		} else {
			$('lightwindow_title_bar_title').innerHTML = '';
		}
		
		var originalContainerDimensions = {height: $('lightwindow_container').getHeight(), width: $('lightwindow_container').getWidth()};
		// Position the window
    	$('lightwindow_container').setStyle({
			height: 'auto',
			// We need to set the width to a px not auto as opera has problems with it
			width: $('lightwindow_container').getWidth()+this.options.contentOffset.width-(this.windowActive ? this.options.contentOffset.width : 0)+'px'
		});
		var newContainerDimensions = {height: $('lightwindow_container').getHeight(), width: $('lightwindow_container').getWidth()};
 		
		// We need to record the container dimension changes
		this.containerChange = {height: originalContainerDimensions.height-newContainerDimensions.height, width: originalContainerDimensions.width-newContainerDimensions.width};

		// Get out general dimensions
		this.dimensions.container = {height: $('lightwindow_container').getHeight(), width: $('lightwindow_container').getWidth()};
		this.dimensions.cruft = {height: this.dimensions.container.height-$('lightwindow_contents').getHeight()+this.options.contentOffset.height, width: this.dimensions.container.width-$('lightwindow_contents').getWidth()+this.options.contentOffset.width};
		
		// Set Sizes if we need too
		this._presetWindowSize();
		this._resizeWindowToFit(); // Even if the window is preset we still don't want it to go outside of the viewport

		if (!this.windowActive) {
			// Position the window
		   	$('lightwindow_container').setStyle({
				left: -(this.dimensions.container.width/2)+'px',
				top: -(this.dimensions.container.height/2)+'px'
			});
		}
	   	$('lightwindow_container').setStyle({
			height: this.dimensions.container.height+'px',
			width: this.dimensions.container.width+'px'
		});
		
		// We are ready, lets show this puppy off!
		this._displayLightWindow('block', 'visible');
		this._animateLightWindow();
	},
	//
	//  Fire off our animation handler
	//
	_animateLightWindow : function() {
		if (this.options.animationHandler) {
			this.options.animationHandler().bind(this);
		} else {
			this._defaultAnimationHandler();
		}
	},
	//
	//  Fire off our transition handler
	//
	_handleNavigation : function(display) {
		if (this.options.navigationHandler) {
			this.options.navigationHandler().bind(this, display);
		} else {
			this._defaultDisplayNavigation(display);
		}
	},
	//
	//  Fire off our transition handler
	//
	_handleTransition : function() {
		if (this.options.transitionHandler) {
			this.options.transitionHandler().bind(this);
		} else {
			this._defaultTransitionHandler();
		}
	},
	//
	//  Handle the finish of the window animation
	// 
	_handleFinalWindowAnimation : function(delay) {
		if (this.options.finalAnimationHandler) {
			this.options.finalAnimationHandler().bind(this, delay);
		} else {
			this._defaultfinalWindowAnimationHandler(delay);
		}		
	},
	//
	//  Handle the gallery Animation
	// 
	_handleGalleryAnimation : function(list) {
		if (this.options.galleryAnimationHandler) {
			this.options.galleryAnimationHandler().bind(this, list);
		} else {
			this._defaultGalleryAnimationHandler(list);
		}		
	},
	//
	//  Display the navigation 
	//
	_defaultDisplayNavigation : function(display) {
		if (display) {
			$('lightwindow_navigation').setStyle({
				display: 'block',
				height: $('lightwindow_contents').getHeight()+'px',
				width: '100%',
				marginTop: this.options.dimensions.titleHeight+'px'
			});			
		} else {
			$('lightwindow_navigation').setStyle({
				display: 'none',
				height: 'auto',
				width: 'auto'
			});			
		}
	},
	//
	//  This is the default animation handler for LightWindow
	//
	_defaultAnimationHandler : function() {	
		// Now that we have figures out the cruft lets make the caption go away and add its effects
		if (this.element.caption || this.element.author || (this.activeGallery && this.options.showGalleryCount)) {
			$('lightwindow_data_slide').setStyle({
				display: 'none',
				width: 'auto'
			});
			this.dimensions.dataEffects.push(
				new Effect.SlideDown('lightwindow_data_slide', {sync: true}),
				new Effect.Appear('lightwindow_data_slide', {sync: true, from: 0.0, to: 1.0})
			);
		}

		// Set up the Title if we have one
		$('lightwindow_title_bar_inner').setStyle({
			height: '0px',
			marginTop: this.options.dimensions.titleHeight+'px'
		});
		
		// We always want the title bar as well
		this.dimensions.dataEffects.push(
			new Effect.Morph('lightwindow_title_bar_inner', {sync: true, style: {height: this.options.dimensions.titleHeight+'px', marginTop: '0px'}}),
		 	new Effect.Appear('lightwindow_title_bar_inner', {sync: true, from: 0.0, to: 1.0})
		);		
		
		if (!this.options.hideGalleryTab) {
			this._handleGalleryAnimation(false);
			if ($('lightwindow_galleries_tab_container').getHeight() == 0) {
				this.dimensions.dataEffects.push(
					new Effect.Morph('lightwindow_galleries_tab_container', {sync: true, style: {height: '20px', marginTop: '0px'}})
				);
				$('lightwindow_galleries').setStyle({
					width: '0px'
				});
			}
		}
		
		var resized = false;
		var ratio = this.dimensions.container.width-$('lightwindow_contents').getWidth()+this.resizeTo.width+this.options.contentOffset.width;
		if (ratio != $('lightwindow_container').getWidth()) {
			new Effect.Parallel([
					new Effect.Scale('lightwindow_contents', 100*(this.resizeTo.width/$('lightwindow_contents').getWidth()), {scaleFrom: 100*($('lightwindow_contents').getWidth()/($('lightwindow_contents').getWidth()+(this.options.contentOffset.width))), sync: true,  scaleY: false, scaleContent: false}),
					new Effect.Scale('lightwindow_container', 100*(ratio/(this.dimensions.container.width)), {sync: true, scaleY: false, scaleFromCenter: true, scaleContent: false})
				], {
					duration: this.duration, 
					delay: 0.25,
					queue: {position: 'end', scope: 'lightwindowAnimation'}
				}
			);		
		}
		
		ratio = this.dimensions.container.height-$('lightwindow_contents').getHeight()+this.resizeTo.height+this.options.contentOffset.height;
		if (ratio != $('lightwindow_container').getHeight()) {
			new Effect.Parallel([
					new Effect.Scale('lightwindow_contents', 100*(this.resizeTo.height/$('lightwindow_contents').getHeight()), {scaleFrom: 100*($('lightwindow_contents').getHeight()/($('lightwindow_contents').getHeight()+(this.options.contentOffset.height))), sync: true, scaleX: false, scaleContent: false}),
					new Effect.Scale('lightwindow_container', 100*(ratio/(this.dimensions.container.height)), {sync: true, scaleX: false, scaleFromCenter: true, scaleContent: false})
				], {
					duration: this.duration, 
					afterFinish: function() {				
						if (this.dimensions.dataEffects.length > 0) {
							if (!this.options.hideGalleryTab) {
								$('lightwindow_galleries').setStyle({
									width: this.resizeTo.width+'px'
								});
							}
							new Effect.Parallel(this.dimensions.dataEffects, {
									duration: this.duration,
									afterFinish: function() {
										this._finishWindow();
									}.bind(this),
									queue: {position: 'end', scope: 'lightwindowAnimation'} 
								}
							);
						}
					}.bind(this), 
					queue: {position: 'end', scope: 'lightwindowAnimation'} 
				}
			);
			resized = true;
		}
		
		// We need to do our data effect since there was no resizing
		if (!resized && this.dimensions.dataEffects.length > 0) {	
			new Effect.Parallel(this.dimensions.dataEffects, {
					duration: this.duration,
					beforeStart: function() {
						if (!this.options.hideGalleryTab) {
							$('lightwindow_galleries').setStyle({
								width: this.resizeTo.width+'px'
							});
						}
						if (this.containerChange.height != 0 || this.containerChange.width != 0) {
							new Effect.MoveBy('lightwindow_container', this.containerChange.height, this.containerChange.width, {transition: Effect.Transitions.sinoidal});
						}
					}.bind(this),			
					afterFinish: function() {
						this._finishWindow();
					}.bind(this),
					queue: {position: 'end', scope: 'lightwindowAnimation'} 
				}
			);
		}			
		
	},
	//
	//  Finish up Window Animation
	//
	_defaultfinalWindowAnimationHandler : function(delay) {
		if (this.windowType == 'media' || this._getParameter('lightwindow_loading_animation')) {	
			// Because of major flickering with the overlay we just hide it in this case
			Element.hide('lightwindow_loading');
			this._handleNavigation(this.activeGallery);
			this._setStatus(false);
		} else {
			Effect.Fade('lightwindow_loading', {
				duration: 0.75,
				delay: 1.0, 
				afterFinish: function() {
					// Just in case we need some scroll goodness (this also avoids the swiss cheese effect)
					if (this.windowType != 'image' && this.windowType != 'media' && this.windowType != 'external') {
						$('lightwindow_contents').setStyle({
							overflow: 'auto'
						});
					}
					this._handleNavigation(this.activeGallery);
					this._defaultGalleryAnimationHandler();
					this._setStatus(false);
				}.bind(this),
				queue: {position: 'end', scope: 'lightwindowAnimation'}
			});
		}
	},
	//
	//  Handle the gallery Animation
	//
	_defaultGalleryAnimationHandler : function(list) {
		if (this.activeGallery) {
			$('lightwindow_galleries').setStyle({
				display: 'block',
				marginBottom: $('lightwindow_data_slide').getHeight()+this.options.contentOffset.height/2+'px'
			});
			$('lightwindow_navigation').setStyle({
				height: $('lightwindow_contents').getHeight()-20+'px'
			});
		} else {
			$('lightwindow_galleries').setStyle({
				display: 'none'
			});	
			$('lightwindow_galleries_tab_container').setStyle({
				height: '0px',
				marginTop: '20px'
			});
			$('lightwindow_galleries_list').setStyle({
				height: '0px'
			});
			return false;
		}
		
		if (list) {
			if ($('lightwindow_galleries_list').getHeight() == 0) {
				var height = $('lightwindow_contents').getHeight()*0.80;
				$('lightwindow_galleries_tab_span').className = 'down';
			} else {
				var height = 0;
				$('lightwindow_galleries_tab_span').className = 'up';
			}

			new Effect.Morph('lightwindow_galleries_list', {
				duration: this.duration,
				transition: Effect.Transitions.sinoidal,
				style: {height: height+'px'},
				beforeStart: function() {
					$('lightwindow_galleries_list').setStyle({
						overflow: 'hidden'
					});					
				},
				afterFinish: function() {
					$('lightwindow_galleries_list').setStyle({
						overflow: 'auto'
					});
				},
				queue: {position: 'end', scope: 'lightwindowAnimation'}
			});	
		}
		
		
	},
	//
	//  Default Transition Handler
	//
	_defaultTransitionHandler : function() {
		// Clean out our effects
		this.dimensions.dataEffects = [];

		// Now that we have figures out the cruft lets make the caption go away and add its effects
		if ($('lightwindow_data_slide').getStyle('display') != 'none') {
			this.dimensions.dataEffects.push(
				new Effect.SlideUp('lightwindow_data_slide', {sync: true}),
				new Effect.Fade('lightwindow_data_slide', {sync: true, from: 1.0, to: 0.0})
			);
		}
		
		if (!this.options.hideGalleryTab) {
			if ($('lightwindow_galleries').getHeight() != 0 && !this.options.hideGalleryTab) {
				this.dimensions.dataEffects.push(
					new Effect.Morph('lightwindow_galleries_tab_container', {sync: true, style: {height: '0px', marginTop: '20px'}})
				);
			}
			
			if ($('lightwindow_galleries_list').getHeight() != 0) {
				$('lightwindow_galleries_tab_span').className = 'up';
				this.dimensions.dataEffects.push(
					new Effect.Morph('lightwindow_galleries_list', {
						sync: true, 
						style: {height: '0px'},
						transition: Effect.Transitions.sinoidal,
						beforeStart: function() {
							$('lightwindow_galleries_list').setStyle({
								overflow: 'hidden'
							});					
						},
						afterFinish: function() {
							$('lightwindow_galleries_list').setStyle({
								overflow: 'auto'
							});
						}
					})
				);
			}
		}
		
		// We always want the title bar as well
		this.dimensions.dataEffects.push(
			new Effect.Morph('lightwindow_title_bar_inner', {sync: true, style: {height: '0px', marginTop: this.options.dimensions.titleHeight+'px'}}),
		 	new Effect.Fade('lightwindow_title_bar_inner', {sync: true, from: 1.0, to: 0.0})
		);

		new Effect.Parallel(this.dimensions.dataEffects, {
				duration: this.duration,
				afterFinish: function() {
					this._loadWindow();
				}.bind(this),
				queue: {position: 'end', scope: 'lightwindowAnimation'} 
			}
		);	
	},
	//
	//	Default Form handler for LightWindow
	//
	_defaultFormHandler : function(e) {
		var element = Event.element(e).parentNode;
		var parameterString = Form.serialize(this._getParameter('lightwindow_form', element.getAttribute('params')));
		if (this.options.formMethod == 'post') {
			var newAJAX = new Ajax.Request(element.href, { 
				method: 'post', 
				postBody: parameterString, 
				onComplete: this.openWindow.bind(this, element)
			});
		} else if (this.options.formMethod == 'get') {
			var newAJAX = new Ajax.Request(element.href, { 
				method: 'get', 
				parameters: parameterString, 
				onComplete: this.openWindow.bind(this, element)
			});
		}
	},
	// 
	//  Wrap everything up
	//
	_finishWindow : function() {
		if (this.windowType == 'external') {
			// We set the externals source here because it allows for a much smoother animation
			$('lightwindow_iframe').setAttribute('src', this.element.href);
			this._handleFinalWindowAnimation(1);	
		} else if (this.windowType == 'media') {

			var outerObject = document.createElement('object');
			outerObject.setAttribute('classid', this.options.classids[this._fileExtension(this.contentToFetch)]);
			outerObject.setAttribute('codebase', this.options.codebases[this._fileExtension(this.contentToFetch)]);
			outerObject.setAttribute('id', 'lightwindow_media_primary');
			outerObject.setAttribute('name', 'lightwindow_media_primary');
			outerObject.setAttribute('width', this.resizeTo.width);
			outerObject.setAttribute('height', this.resizeTo.height);
			outerObject = this._addParamToObject('movie', this.contentToFetch, outerObject);
			outerObject = this._addParamToObject('src', this.contentToFetch, outerObject);
			outerObject = this._addParamToObject('controller', 'true', outerObject);
			outerObject = this._addParamToObject('wmode', 'transparent', outerObject);
			outerObject = this._addParamToObject('cache', 'false', outerObject);
			outerObject = this._addParamToObject('quality', 'high', outerObject);

			if (!Prototype.Browser.IE) {
				var innerObject = document.createElement('object');
				innerObject.setAttribute('type', this.options.mimeTypes[this._fileExtension(this.contentToFetch)]);
				innerObject.setAttribute('data', this.contentToFetch);
				innerObject.setAttribute('id', 'lightwindow_media_secondary');
				innerObject.setAttribute('name', 'lightwindow_media_secondary');
				innerObject.setAttribute('width', this.resizeTo.width);
				innerObject.setAttribute('height', this.resizeTo.height);
				innerObject = this._addParamToObject('controller', 'true', innerObject);
				innerObject = this._addParamToObject('wmode', 'transparent', innerObject);
				innerObject = this._addParamToObject('cache', 'false', innerObject);
				innerObject = this._addParamToObject('quality', 'high', innerObject);
			
				outerObject.appendChild(innerObject);
			}	
			
			if (this._getParameter('lightwindow_iframe_embed')) {
				this._appendIframe('no');
				this._writeToIframe(this._convertToMarkup(outerObject, 'object'));
			} else {
				this._appendObject(outerObject, 'object', $('lightwindow_contents'));
			}

			this._handleFinalWindowAnimation(0);
		} else {
			this._handleFinalWindowAnimation(0);
		}

		// Initialize any actions
		this._setupActions();
	}
}

/*-----------------------------------------------------------------------------------------------*/

Event.observe(window, 'load', lightwindowInit, false);

//
//	Set up all of our links
//
var myLightWindow = null;
function lightwindowInit() {
	myLightWindow = new lightwindow();
	
	// The following was added to run code immediately 
	// after this library loads and instantiates the 
    // myLightWindow object.  
    // ***********************
    // In the code on the main page we’ll need to create a 
	// lightWindow_DoneLoading() function that catches 
	// the the pseudo-event.
	// ***********************
	// Not elegant. 
    // Tightly coupled. 
	// But at least we check for the existence of
	// the lightWindow_DoneLoading() function before 
    // we try calling it.
	if(('function' == typeof window.lightWindow_DoneLoading)){
	    lightWindow_DoneLoading();
	}
}