

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

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}('D 56={9D:\'1.8.1\',9E:t(a){18.d6(\'<4b 6b="7F/9F" 3i="\'+a+\'"><\\/4b>\')},7G:\'1.6.0\',7H:t(){t 7I(a){D r=a.6c(\'.\');G 28(r[0])*d7+28(r[1])*2u+28(r[2])}C((29 1n==\'3F\')||(29 V==\'3F\')||(29 V.57==\'3F\')||(7I(1n.9D)<7I(56.7G)))2S("4b.7J.7K 7L 9G 1n d8 d9 >= "+56.7G);D d=/(da|db)dc[a-9H-9.3j-]*\\.4c(\\?.*)?$/;$A(18.6d("4b")).9I(t(s){G(s.3i&&s.3i.2F(d))}).1d(t(s){D b=s.3i.3G(d,\'\');D c=(s.3i.2F(/\\?.*7H=([a-z,]*)/)||[,\'\'])[1];c.6c(\',\').dd(\'\').1d(t(a){56.9E(b+a+\'.4c\')})})}};D 3H={9J:{9K:\'1I\',9L:\'2T\',9M:\'2T\',9N:\'2T\',9O:\'de\',9P:\'2U\',7M:\'2U\',9Q:\'4d\',9R:\'2T\',9S:\'2T\',9T:\'2T\',9U:\'2T\',9V:\'2T\',9W:\'2T\'},7N:t(a){a=a.2V();D b=q.9J[a]||\'4e\';D c=18.21(b);7O{c.2W="<"+a+"></"+a+">"}7P(e){}D d=c.58||17;C(d&&(d.2X.2V()!=a))d=d.6d(a)[0];C(!d)d=18.21(a);C(!d)G;C(12[1])C(q.6e(12[1])||(12[1]df 9X)||12[1].2X){q.7Q(d,12[1])}13{D f=q.9Y(12[1]);C(f.14){7O{c.2W="<"+a+" "+f+"></"+a+">"}7P(e){}d=c.58||17;C(!d){d=18.21(a);1U(6f 3I 12[1])d[6f==\'9Z\'?\'4f\':6f]=12[1][6f]}C(d.2X.2V()!=a)d=c.6d(a)[0]}}C(12[2])q.7Q(d,12[2]);G d},4g:t(a){G 18.59(a)},7R:{\'4f\':\'9Z\',\'dg\':\'1U\'},9Y:t(a){D b=[];1U(5a 3I a)b.1x((5a 3I q.7R?q.7R[5a]:5a)+\'="\'+a[5a].dh().di().dj(/"/,\'&dk;\')+\'"\');G b.4h(" ")},7Q:t(a,b){C(b.2X){a.1L(b);G}C(29 b==\'4d\'){b.2v().1d(t(e){C(29 e==\'4d\')a.1L(e);13 C(3H.6e(e))a.1L(3H.4g(e))})}13 C(3H.6e(b))a.1L(3H.4g(b))},6e:t(a){G(29 a==\'a0\'||29 a==\'dl\')},dm:t(a){D b=q.7N(\'4e\');$(b).1e(a.5b());G b.22()},dn:t(b){C(29 b!=\'4d\'&&29 b!=\'t\')b=1M;D c=("A dp dq dr ds 9K B dt du dv dw dx a1 "+"dy a2 9L dz dA dB 9M 9N dC dD dE dF a3 dG dH dI dJ "+"dK dL dM dN dO dP dQ dR dS dT dU dV dW I dX dY a4 dZ e0 "+"e1 e2 9O 7S e3 e4 e5 e6 e7 e8 e9 ea 9P 7M P "+"9Q eb Q S ec ed a5 ee ef eg eh ei ej ek el 9R 9S "+"a6 9T 9U 9V en 9W eo U ep eq").6c(/\\s+/);c.1d(t(a){b[a]=t(){G 3H.7N.er(3H,[a].7T($A(12)))}})}};4i.4j.3k=t(){D a=\'#\';C(q.3J(0,4)==\'es(\'){D b=q.3J(4,q.14-1).6c(\',\');D i=0;do{a+=28(b[i]).5c()}4k(++i<3)}13{C(q.3J(0,1)==\'#\'){C(q.14==4)1U(D i=1;i<4;i++)a+=(q.6g(i)+q.6g(i)).3l();C(q.14==7)a=q.3l()}}G(a.14==7?a:(12[0]||q))};V.6h=t(b){G $A($(b).2Y).7U(t(a){G(a.7V==3?a.7W:(a.7X()?V.6h(a):\'\'))}).2v().4h(\'\')};V.6i=t(b,c){G $A($(b).2Y).7U(t(a){G(a.7V==3?a.7W:((a.7X()&&!V.et(a,c))?V.6i(a,c):\'\'))}).2v().4h(\'\')};V.a7=t(a,b){a=$(a);a.1j({3K:(b/2w)+\'em\'});C(1n.2i.5d)1M.7Y(0,0);G a};V.2Z=t(a){G $(a).O.1S||\'\'};V.7Z=t(a){7O{a=$(a);D n=18.59(\' \');a.1L(n);a.a8(n)}7P(e){}};D J={4l:{3m:\'eu\',ev:\'ew ey ez E eA eB eC, eD eE eF 1U q 5e 1V eG\'},2j:{a9:1n.K,3L:t(a){G(-1B.6j(a*1B.6k)/2)+0.5},eH:t(a){G 1-a},aa:t(a){D a=((-1B.6j(a*1B.6k)/4)+0.75)+1B.eI()/4;G a>1?1:a},eJ:t(a){G(-1B.6j(a*1B.6k*(9*a))/2)+0.5},ab:t(a,b){b=b||5;G(((a%(1/b))*b).23()==0?((a*b*2)-(a*b*2).ac()):1-((a*b*2)-(a*b*2).ac()))},eK:t(a){G 1-(1B.6j(a*4.5*1B.6k)*1B.eL(-a*6))},3n:t(a){G 0},ad:t(a){G 1}},3M:{1t:1.0,ae:2w,24:M,25:0.0,1V:1.0,2a:0.0,2b:\'eM\'},eN:t(c){D d=\'1C:af\';C(1n.2i.4m)d+=\';80:1\';c=$(c);$A(c.2Y).1d(t(b){C(b.7V==3){b.7W.eO().1d(t(a){c.4n(X V(\'eP\',{O:d}).1e(a==\' \'?4i.eQ(eR):a),b)});V.3o(b)}})},eS:t(c,d){D e;C(((29 c==\'4d\')||N.4o(c))&&(c.14))e=c;13 e=$(c).2Y;D f=N.11({ag:0.1,2a:0.0},12[2]||{});D g=f.2a;$A(e).1d(t(a,b){X d(a,N.11(f,{2a:b*f.ag+g}))})},81:{\'eT\':[\'ah\',\'ai\'],\'eU\':[\'aj\',\'ak\'],\'82\':[\'6l\',\'83\']},eV:t(a,b){a=$(a);b=(b||\'82\').3l();D c=N.11({2b:{1C:\'2x\',5f:(a.19||\'5g\'),84:1}},12[2]||{});J[a.eW()?J.81[b][1]:J.81[b][0]](a,c)}};J.3M.2c=J.2j.3L;J.al=1D.1y(eX,{1G:t(){q.1m=[];q.5h=17},am:t(a){q.1m.am(a)},4p:t(a){D b=X 6m().ao();D c=N.3p(a.u.2b)?a.u.2b:a.u.2b.1C;6n(c){1E\'eY\':q.1m.9I(t(e){G e.4q==\'85\'}).1d(t(e){e.3q+=a.3r;e.3r+=a.3r});1N;1E\'5i-ap\':b=q.1m.aq(\'3q\').30()||b;1N;1E\'2x\':b=q.1m.aq(\'3r\').30()||b;1N}a.3q+=b;a.3r+=b;C(!a.u.2b.84||(q.1m.14<a.u.2b.84))q.1m.1x(a);C(!q.5h)q.5h=ar(q.4r.1g(q),15)},3o:t(a){q.1m=q.1m.4s(t(e){G e==a});C(q.1m.14==0){as(q.5h);q.5h=17}},4r:t(){D a=X 6m().ao();1U(D i=0,at=q.1m.14;i<at;i++)q.1m[i]&&q.1m[i].4r(a)}});J.6o={86:$H(),2k:t(a){C(!N.3p(a))G a;G q.86.2k(a)||q.86.6p(a,X J.al())}};J.eZ=J.6o.2k(\'5g\');J.2d=1D.1y({1C:17,1u:t(c){t 5j(a,b){G((a[b+\'6q\']?\'q.u.\'+b+\'6q(q);\':\'\')+(a[b]?\'q.u.\'+b+\'(q);\':\'\'))}C(c&&c.2c===M)c.2c=J.2j.a9;q.u=N.11(N.11({},J.3M),c||{});q.87=0;q.4q=\'85\';q.3q=q.u.2a*2u;q.3r=q.3q+(q.u.1t*2u);q.au=q.u.1V-q.u.25;q.av=q.3r-q.3q;q.aw=q.u.ae*q.u.1t;ax(\'q.2G = t(5k){ \'+\'C (q.4q=="85"){q.4q="ay";\'+5j(q.u,\'3N\')+(q.4t?\'q.4t();\':\'\')+5j(q.u,\'6r\')+\'};C (q.4q=="ay"){\'+\'5k=q.u.2c(5k)*\'+q.au+\'+\'+q.u.25+\';\'+\'q.1C=5k;\'+5j(q.u,\'f0\')+(q.1e?\'q.1e(5k);\':\'\')+5j(q.u,\'f1\')+\'}}\');q.2H(\'f2\');C(!q.u.24)J.6o.2k(N.3p(q.u.2b)?\'5g\':q.u.2b.5f).4p(q)},4r:t(a){C(a>=q.3q){C(a>=q.3r){q.2G(1.0);q.31();q.2H(\'az\');C(q.3O)q.3O();q.2H(\'88\');G}D b=(a-q.3q)/q.av,89=(b*q.aw).23();C(89>q.87){q.2G(b);q.87=89}}},31:t(){C(!q.u.24)J.6o.2k(N.3p(q.u.2b)?\'5g\':q.u.2b.5f).3o(q);q.4q=\'f3\'},2H:t(a){C(q.u[a+\'6q\'])q.u[a+\'6q\'](q);C(q.u[a])q.u[a](q)},5l:t(){D a=$H();1U(6s 3I q)C(!N.4o(q[6s]))a.6p(6s,q[6s]);G\'#<J:\'+a.5l()+\',u:\'+$H(q.u).5l()+\'>\'}});J.4u=1D.1y(J.2d,{1G:t(a){q.1m=a||[];q.1u(12[1])},1e:t(a){q.1m.aA(\'2G\',a)},3O:t(b){q.1m.1d(t(a){a.2G(1.0);a.31();a.2H(\'az\');C(a.3O)a.3O(b);a.2H(\'88\')})}});J.aB=1D.1y(J.2d,{1G:t(b,c,d){b=N.3p(b)?$(b):b;D e=$A(12),2l=e.ap(),u=e.14==5?e[3]:17;q.2l=N.4o(2l)?2l.1g(b):N.4o(b[2l])?b[2l].1g(b):t(a){b[2l]=a};q.1u(N.11({25:c,1V:d},u||{}))},1e:t(a){q.2l(a)}});J.Z=1D.1y(J.2d,{1G:t(){q.1u(N.11({1t:0},12[0]||{}))},1e:1n.3P});J.2I=1D.1y(J.2d,{1G:t(a){q.E=$(a);C(!q.E)2S(J.4l);C(1n.2i.4m&&(!q.E.8a.aC))q.E.1j({80:1});D b=N.11({25:q.E.5m()||0.0,1V:1.0},12[1]||{});q.1u(b)},1e:t(a){q.E.aD(a)}});J.2e=1D.1y(J.2d,{1G:t(a){q.E=$(a);C(!q.E)2S(J.4l);D b=N.11({x:0,y:0,aE:\'af\'},12[1]||{});q.1u(b)},4t:t(){q.E.2m();q.5n=32(q.E.1o(\'1h\')||\'0\');q.5o=32(q.E.1o(\'1c\')||\'0\');C(q.u.aE==\'3s\'){q.u.x=q.u.x-q.5n;q.u.y=q.u.y-q.5o}},1e:t(a){q.E.1j({1h:(q.u.x*a+q.5n).23()+\'1v\',1c:(q.u.y*a+q.5o).23()+\'1v\'})}});J.f4=t(a,b,c){G X J.2e(a,N.11({x:c,y:b},12[3]||{}))};J.2n=1D.1y(J.2d,{1G:t(a,b){q.E=$(a);C(!q.E)2S(J.4l);D c=N.11({2J:Y,5p:Y,2K:Y,6t:M,2L:\'8b\',3Q:2w.0,aF:b},12[2]||{});q.1u(c)},4t:t(){q.2o=q.u.2o||M;q.aG=q.E.1o(\'1C\');q.8c={};[\'1c\',\'1h\',\'1k\',\'1f\',\'3K\'].1d(t(k){q.8c[k]=q.E.O[k]}.1g(q));q.5o=q.E.aH;q.5n=q.E.f5;D b=q.E.1o(\'f6-5q\')||\'2w%\';[\'em\',\'1v\',\'%\',\'aI\'].1d(t(a){C(b.2y(a)>0){q.3K=32(b);q.aJ=a}}.1g(q));q.aK=(q.u.aF-q.u.3Q)/2w;q.2z=17;C(q.u.2L==\'8b\')q.2z=[q.E.3t,q.E.3R];C(/^f7/.5r(q.u.2L))q.2z=[q.E.f8,q.E.f9];C(!q.2z)q.2z=[q.u.2L.5s,q.u.2L.5t]},1e:t(a){D b=(q.u.3Q/2w.0)+(q.aK*a);C(q.u.2K&&q.3K)q.E.1j({3K:q.3K*b+q.aJ});q.aL(q.2z[0]*b,q.2z[1]*b)},3O:t(a){C(q.2o)q.E.1j(q.8c)},aL:t(a,b){D d={};C(q.u.2J)d.1k=b.23()+\'1v\';C(q.u.5p)d.1f=a.23()+\'1v\';C(q.u.6t){D c=(a-q.2z[0])/2;D e=(b-q.2z[1])/2;C(q.aG==\'3s\'){C(q.u.5p)d.1c=q.5o-c+\'1v\';C(q.u.2J)d.1h=q.5n-e+\'1v\'}13{C(q.u.5p)d.1c=-c+\'1v\';C(q.u.2J)d.1h=-e+\'1v\'}}q.E.1j(d)}});J.6u=1D.1y(J.2d,{1G:t(a){q.E=$(a);C(!q.E)2S(J.4l);D b=N.11({6v:\'#aM\'},12[1]||{});q.1u(b)},4t:t(){C(q.E.1o(\'5u\')==\'3n\'){q.31();G}q.8d={};C(!q.u.8e){q.8d.aN=q.E.1o(\'6w-fa\');q.E.1j({aN:\'3n\'})}C(!q.u.6x)q.u.6x=q.E.1o(\'6w-34\').3k(\'#8f\');C(!q.u.6y)q.u.6y=q.E.1o(\'6w-34\');q.8g=$R(0,2).1I(t(i){G 28(q.u.6v.3J(i*2+1,i*2+3),16)}.1g(q));q.aO=$R(0,2).1I(t(i){G 28(q.u.6x.3J(i*2+1,i*2+3),16)-q.8g[i]}.1g(q))},1e:t(a){q.E.1j({4v:$R(0,2).8h(\'#\',t(m,v,i){G m+((q.8g[i]+(q.aO[i]*a)).23().5c())}.1g(q))})},3O:t(){q.E.1j(N.11(q.8d,{4v:q.u.6y}))}});J.fb=t(a){D b=12[1]||{},8i=18.8j.aP(),6z=$(a).3u(),30=18.8j.aP[0]-18.8j.fc();C(b.5v)6z[1]+=b.5v;G X J.aB(17,8i.1c,6z[1]>30?30:6z[1],b,t(p){8k(8i.1h,p.23())})};J.83=t(b){b=$(b);D c=b.2Z();D d=N.11({25:b.5m()||1.0,1V:0.0,1q:t(a){C(a.u.1V!=0)G;a.E.1r().1j({1S:c})}},12[1]||{});G X J.2I(b,d)};J.6l=t(b){b=$(b);D c=N.11({25:(b.1o(\'5u\')==\'3n\'?0.0:b.5m()||0.0),1V:1.0,1q:t(a){a.E.7Z()},3N:t(a){a.E.aD(a.u.25).1O()}},12[1]||{});G X J.2I(b,c)};J.fd=t(b){b=$(b);D c={1S:b.2Z(),1C:b.1o(\'1C\'),1c:b.O.1c,1h:b.O.1h,1k:b.O.1k,1f:b.O.1f};G X J.4u([X J.2n(b,fe,{24:Y,6t:Y,2K:Y,2o:Y}),X J.2I(b,{24:Y,1V:0.0})],N.11({1t:1.0,ff:t(a){1p.aQ(a.1m[0].E)},1q:t(a){a.1m[0].E.1r().1j(c)}},12[1]||{}))};J.ak=t(b){b=$(b);b.35();G X J.2n(b,0,N.11({2K:M,2J:M,2o:Y,1q:t(a){a.E.1r().36()}},12[1]||{}))};J.aj=t(b){b=$(b);D c=b.5w();G X J.2n(b,2w,N.11({2K:M,2J:M,3Q:0,2L:{5s:c.1f,5t:c.1k},2o:Y,6r:t(a){a.E.35().1j({1f:\'8l\'}).1O()},1q:t(a){a.E.36()}},12[1]||{}))};J.fg=t(c){c=$(c);D d=c.2Z();G X J.6l(c,N.11({1t:0.4,25:0,2c:J.2j.aa,1q:t(b){X J.2n(b.E,1,{1t:0.3,6t:Y,2J:M,2K:M,2o:Y,3N:t(a){a.E.2m().35()},1q:t(a){a.E.1r().36().37().1j({1S:d})}})}},12[1]||{}))};J.fh=t(b){b=$(b);D c={1c:b.1o(\'1c\'),1h:b.1o(\'1h\'),1S:b.2Z()};G X J.4u([X J.2e(b,{x:0,y:2w,24:Y}),X J.2I(b,{24:Y,1V:0.0})],N.11({1t:0.5,3N:t(a){a.1m[0].E.2m()},1q:t(a){a.1m[0].E.1r().37().1j(c)}},12[1]||{}))};J.fi=t(g){g=$(g);D h=N.11({aR:20,1t:0.5},12[1]||{});D i=32(h.aR);D j=32(h.1t)/10.0;D k={1c:g.1o(\'1c\'),1h:g.1o(\'1h\')};G X J.2e(g,{x:i,y:0,1t:j,1q:t(f){X J.2e(f.E,{x:-i*2,y:0,1t:j*2,1q:t(e){X J.2e(e.E,{x:i*2,y:0,1t:j*2,1q:t(d){X J.2e(d.E,{x:-i*2,y:0,1t:j*2,1q:t(c){X J.2e(c.E,{x:i*2,y:0,1t:j*2,1q:t(b){X J.2e(b.E,{x:-i,y:0,1t:j,1q:t(a){a.E.37().1j(k)}})}})}})}})}})}})};J.ah=t(b){b=$(b).5x();D c=b.22().1o(\'2A\');D d=b.5w();G X J.2n(b,2w,N.11({2K:M,2J:M,3Q:1M.3S?0:1,2L:{5s:d.1f,5t:d.1k},2o:Y,6r:t(a){a.E.2m();a.E.22().2m();C(1M.3S)a.E.1j({1c:\'\'});a.E.35().1j({1f:\'8l\'}).1O()},aS:t(a){a.E.22().1j({2A:(a.2z[0]-a.E.6A)+\'1v\'})},1q:t(a){a.E.36().37();a.E.22().37().1j({2A:c})}},12[1]||{}))};J.ai=t(b){b=$(b).5x();D c=b.22().1o(\'2A\');D d=b.5w();G X J.2n(b,1M.3S?0:1,N.11({2K:M,2J:M,2L:\'8b\',3Q:2w,2L:{5s:d.1f,5t:d.1k},2o:Y,6r:t(a){a.E.2m();a.E.22().2m();C(1M.3S)a.E.1j({1c:\'\'});a.E.35().1O()},aS:t(a){a.E.22().1j({2A:(a.2z[0]-a.E.6A)+\'1v\'})},1q:t(a){a.E.1r().36().37();a.E.22().37().1j({2A:c})}},12[1]||{}))};J.fj=t(b){G X J.2n(b,1M.3S?1:0,{2o:Y,3N:t(a){a.E.35()},1q:t(a){a.E.1r().36()}})};J.fk=t(c){c=$(c);D d=N.11({6B:\'6C\',6D:J.2j.3L,6E:J.2j.3L,6F:J.2j.ad},12[1]||{});D e={1c:c.O.1c,1h:c.O.1h,1f:c.O.1f,1k:c.O.1k,1S:c.2Z()};D f=c.5w();D g,3T;D h,26;6n(d.6B){1E\'1c-1h\':g=3T=h=26=0;1N;1E\'1c-5y\':g=f.1k;3T=26=0;h=-f.1k;1N;1E\'2A-1h\':g=h=0;3T=f.1f;26=-f.1f;1N;1E\'2A-5y\':g=f.1k;3T=f.1f;h=-f.1k;26=-f.1f;1N;1E\'6C\':g=f.1k/2;3T=f.1f/2;h=-f.1k/2;26=-f.1f/2;1N}G X J.2e(c,{x:g,y:3T,1t:0.fl,3N:t(a){a.E.1r().35().2m()},1q:t(b){X J.4u([X J.2I(b.E,{24:Y,1V:1.0,25:0.0,2c:d.6F}),X J.2e(b.E,{x:h,y:26,24:Y,2c:d.6D}),X J.2n(b.E,2w,{2L:{5s:f.1f,5t:f.1k},24:Y,3Q:1M.3S?1:0,2c:d.6E,2o:Y})],N.11({3N:t(a){a.1m[0].E.1j({1f:\'8l\'}).1O()},1q:t(a){a.1m[0].E.36().37().1j(e)}},d))}})};J.fm=t(b){b=$(b);D c=N.11({6B:\'6C\',6D:J.2j.3L,6E:J.2j.3L,6F:J.2j.3n},12[1]||{});D d={1c:b.O.1c,1h:b.O.1h,1f:b.O.1f,1k:b.O.1k,1S:b.2Z()};D e=b.5w();D f,26;6n(c.6B){1E\'1c-1h\':f=26=0;1N;1E\'1c-5y\':f=e.1k;26=0;1N;1E\'2A-1h\':f=0;26=e.1f;1N;1E\'2A-5y\':f=e.1k;26=e.1f;1N;1E\'6C\':f=e.1k/2;26=e.1f/2;1N}G X J.4u([X J.2I(b,{24:Y,1V:0.0,25:1.0,2c:c.6F}),X J.2n(b,1M.3S?1:0,{24:Y,2c:c.6E,2o:Y}),X J.2e(b,{x:f,y:26,24:Y,2c:c.6D})],N.11({fn:t(a){a.1m[0].E.2m().35()},1q:t(a){a.1m[0].E.1r().36().37().1j(d)}},c))};J.fo=t(b){b=$(b);D c=12[1]||{};D d=b.2Z();D e=c.2c||J.2j.3L;D f=t(a){G e(1-J.2j.ab(a,c.fp))};f.1g(e);G X J.2I(b,N.11(N.11({1t:2.0,25:0,1q:t(a){a.E.1j({1S:d})}},c),{2c:f}))};J.fq=t(c){c=$(c);D d={1c:c.O.1c,1h:c.O.1h,1k:c.O.1k,1f:c.O.1f};c.35();G X J.2n(c,5,N.11({2K:M,2J:M,1q:t(b){X J.2n(c,1,{2K:M,5p:M,1q:t(a){a.E.1r().36().1j(d)}})}},12[1]||{}))};J.8m=1D.1y(J.2d,{1G:t(c){q.E=$(c);C(!q.E)2S(J.4l);D d=N.11({O:{}},12[1]||{});C(!N.3p(d.O))q.O=$H(d.O);13{C(d.O.4w(\':\'))q.O=d.O.aT();13{q.E.2B(d.O);q.O=$H(q.E.5z());q.E.3v(d.O);D e=q.E.5z();q.O=q.O.4s(t(a){G a.1a==e[a.4x]});d.1q=t(b){b.E.2B(b.u.O);b.6G.1d(t(a){b.E.O[a.O]=\'\'})}}}q.1u(d)},4t:t(){t 3k(a){C(!a||[\'fr(0, 0, 0, 0)\',\'aU\'].4w(a))a=\'#8f\';a=a.3k();G $R(0,2).1I(t(i){G 28(a.3J(i*2+1,i*2+3),16)})}q.6G=q.O.1I(t(a){D b=a[0],1a=a[1],2C=17;C(1a.3k(\'#aV\')!=\'#aV\'){1a=1a.3k();2C=\'34\'}13 C(b==\'1S\'){1a=32(1a);C(1n.2i.4m&&(!q.E.8a.aC))q.E.1j({80:1})}13 C(V.aW.5r(1a)){D c=1a.2F(/^([\\+\\-]?[0-9\\.]+)(.*)$/);1a=32(c[1]);2C=(c.14==3)?c[2]:17}D d=q.E.1o(b);G{O:b.aX(),2D:2C==\'34\'?3k(d):32(d||0),3U:2C==\'34\'?3k(1a):1a,2C:2C}}.1g(q)).4s(t(a){G((a.2D==a.3U)||(a.2C!=\'34\'&&(aY(a.2D)||aY(a.3U))))})},1e:t(a){D b={},1P,i=q.6G.14;4k(i--)b[(1P=q.6G[i]).O]=1P.2C==\'34\'?\'#\'+(1B.23(1P.2D[0]+(1P.3U[0]-1P.2D[0])*a)).5c()+(1B.23(1P.2D[1]+(1P.3U[1]-1P.2D[1])*a)).5c()+(1B.23(1P.2D[2]+(1P.3U[2]-1P.2D[2])*a)).5c():(1P.2D+(1P.3U-1P.2D)*a).fs(3)+(1P.2C===17?\'\':1P.2C);q.E.1j(b,Y)}});J.ft=1D.1y({1G:t(a){q.2E=[];q.u=12[1]||{};q.aZ(a)},aZ:t(c){c.1d(t(a){a=$H(a);D b=a.1J().b0();q.2E.1x($H({b1:a.fu().b0(),5e:J.8m,u:{O:b}}))}.1g(q));G q},8n:t(){G X J.4u(q.2E.1I(t(a){D b=a.2k(\'b1\'),5e=a.2k(\'5e\'),u=a.2k(\'u\');D c=[$(b)||$$(b)].2v();G c.1I(t(e){G X 5e(e,N.11({24:Y},u))})}).2v(),q.u)}});V.6H=$w(\'4v fv fw fx \'+\'fy fz fA fB \'+\'fC fD fE fF \'+\'fG fH fI 2A fJ 34 \'+\'3K fK 1f 1h fL fM \'+\'fN fO fP fQ fR fS \'+\'fT fU fV 1S fW fX \'+\'fY fZ g0 g1 g2 \'+\'5y g3 1c 1k g4 5A\');V.aW=/^(([\\+\\-]?[0-9\\.]+)(em|ex|1v|3I|cm|g5|aI|g6|\\%))|0$/;4i.8o=18.21(\'4e\');4i.4j.aT=t(){D b,6I=$H();C(1n.2i.5d)b=X V(\'4e\',{O:q}).O;13{4i.8o.2W=\'<4e O="\'+q+\'"></4e>\';b=4i.8o.2Y[0].O}V.6H.1d(t(a){C(b[a])6I.6p(a,b[a])});C(1n.2i.4m&&q.4w(\'1S\'))6I.6p(\'1S\',q.2F(/1S:\\s*((?:0|1)?(?:\\.\\d*)?)/)[1]);G 6I};C(18.8p&&18.8p.b2){V.5z=t(c){D d=18.8p.b2($(c),17);G V.6H.8h({},t(a,b){a[b]=d[b];G a})}}13{V.5z=t(c){c=$(c);D d=c.8a,5B;5B=V.6H.8h({},t(a,b){a[b]=d[b];G a});C(!5B.1S)5B.1S=c.5m();G 5B}}J.57={g7:t(a,b){a=$(a);X J.8m(a,N.11({O:b},12[2]||{}));G a},g8:t(a,b,c){a=$(a);D s=b.g9().aX(),b3=s.6g(0).2V()+s.8q(1);X J[b3](a,c);G a},ga:t(a,b){a=$(a);X J.6u(a,b);G a}};$w(\'gb 82 gc gd ge gf gg gh gi \'+\'gj gk gl gm gn go\').1d(t(c){J.57[c]=t(a,b){a=$(a);J[c.6g(0).2V()+c.8q(1)](a,b);G a}});$w(\'2Z 7Z a7 6h 6i 5z\').1d(t(f){J.57[f]=V[f]});V.gp(J.57);C(N.8r(J))2S("gq.4c 7L b4 4b.7J.7K\' 1m.4c b5");D 2f={4y:[],3o:t(a){q.4y=q.4y.4s(t(d){G d.E==$(a)})},4p:t(a){a=$(a);D b=N.11({gr:Y,2M:17,27:M},12[1]||{});C(b.3V){b.5C=[];D d=b.3V;C(N.6J(d)){d.1d(t(c){b.5C.1x($(c))})}13{b.5C.1x($(d))}}C(b.5D)b.5D=[b.5D].2v();V.2m(a);b.E=a;q.4y.1x(b)},b6:t(a){6K=a[0];1U(i=1;i<a.14;++i)C(V.5E(a[i].E,6K.E))6K=a[i];G 6K},b7:t(a,b){D d;C(b.27){d=a.8s}13{d=a.1z}G b.5C.6L(t(c){G d==c})},8t:t(a,b,c){G((c.E!=b)&&((!c.5C)||q.b7(b,c))&&((!c.5D)||(V.b8(b).6L(t(v){G c.5D.4w(v)})))&&1p.b9(c.E,a[0],a[1]))},5F:t(a){C(a.2M)V.3v(a.E,a.2M);q.2g=17},3w:t(a){C(a.2M)V.2B(a.E,a.2M);q.2g=a},1O:t(b,c){C(!q.4y.14)G;D d,6M=[];q.4y.1d(t(a){C(2f.8t(b,c,a))6M.1x(a)});C(6M.14>0)d=2f.b6(6M);C(q.2g&&q.2g!=d)q.5F(q.2g);C(d){1p.b9(d.E,b[0],b[1]);C(d.3x)d.3x(c,d.E,1p.2p(d.2p,d.E));C(d!=q.2g)2f.3w(d)}},ba:t(a,b){C(!q.2g)G;1p.6N();C(q.8t([Z.4z(a),Z.4A(a)],b,q.2g))C(q.2g.bb){q.2g.bb(b,q.2g.E,a);G Y}},bc:t(){C(q.2g)q.5F(q.2g)}};D 1l={4B:[],4C:[],bd:t(a){C(q.4B.14==0){q.4D=q.4E.2q(q);q.4F=q.6O.2q(q);q.8u=q.6P.2q(q);Z.1W(18,"6Q",q.4D);Z.1W(18,"6R",q.4F);Z.1W(18,"be",q.8u)}q.4B.1x(a)},bf:t(a){q.4B=q.4B.4s(t(d){G d==a});C(q.4B.14==0){Z.2N(18,"6Q",q.4D);Z.2N(18,"6R",q.4F);Z.2N(18,"be",q.8u)}},3w:t(a){C(a.u.2a){q.5G=4G(t(){1l.5G=17;1M.5H();1l.2O=a}.1g(q),a.u.2a)}13{1M.5H();q.2O=a}},5F:t(){q.2O=17},6O:t(a){C(!q.2O)G;D b=[Z.4z(a),Z.4A(a)];C(q.4H&&(q.4H.5l()==b.5l()))G;q.4H=b;q.2O.6O(a,b)},4E:t(a){C(q.5G){8v(q.5G);q.5G=17}C(!q.2O)G;q.4H=17;q.2O.4E(a);q.2O=17},6P:t(a){C(q.2O)q.2O.6P(a)},bg:t(a){q.4C.1x(a);q.8w()},bh:t(a){q.4C=q.4C.4s(t(o){G o.E==a});q.8w()},5I:t(a,b,c){C(q[a+\'bi\']>0)q.4C.1d(t(o){C(o[a])o[a](a,b,c)});C(b.u[a])b.u[a](b,c)},8w:t(){[\'8x\',\'8y\',\'8z\'].1d(t(a){1l[a+\'bi\']=1l.4C.2U(t(o){G o[a]}).14})}};D 3W=1D.1y({1G:t(e){D f={1K:M,3X:t(a,b,c){D d=1B.gs(1B.6S(b^2)+1B.6S(c^2))*0.gt;X J.2e(a,{x:-c,y:-b,1t:d,2b:{5f:\'bj\',1C:\'2x\'}})},3Y:t(a){D b=N.gu(a.6T)?a.6T:1.0;X J.2I(a,{1t:0.2,25:0.7,1V:b,2b:{5f:\'bj\',1C:\'2x\'},88:t(){3W.5J[a]=M}})},3Z:2u,8A:M,4I:M,1i:M,2r:20,1X:15,38:M,2a:0};C(!12[1]||N.8r(12[1].3Y))N.11(f,{4J:t(a){a.6T=V.5m(a);3W.5J[a]=Y;X J.2I(a,{1t:0.2,25:a.6T,1V:0.7})}});D g=N.11(f,12[1]||{});q.E=$(e);C(g.1K&&N.3p(g.1K))q.1K=q.E.22(\'.\'+g.1K,0);C(!q.1K)q.1K=$(g.1K);C(!q.1K)q.1K=q.E;C(g.1i&&!g.1i.8k&&!g.1i.gv){g.1i=$(g.1i);q.8B=V.gw(q.E,g.1i)}V.2m(q.E);q.u=g;q.2s=M;q.3y=q.bk.2q(q);Z.1W(q.1K,"4K",q.3y);1l.bd(q)},4L:t(){Z.2N(q.1K,"4K",q.3y);1l.bf(q)},6U:t(){G([28(V.1o(q.E,\'1h\')||\'0\'),28(V.1o(q.E,\'1c\')||\'0\')])},bk:t(a){C(!N.8r(3W.5J[q.E])&&3W.5J[q.E])G;C(Z.bl(a)){D b=Z.E(a);C((4M=b.2X.2V())&&(4M==\'a4\'||4M==\'a5\'||4M==\'7M\'||4M==\'a2\'||4M==\'a6\'))G;D c=[Z.4z(a),Z.4A(a)];D d=1p.3u(q.E);q.5v=[0,1].1I(t(i){G(c[i]-d[i])});1l.3w(q);Z.1Y(a)}},6V:t(a){q.2s=Y;C(!q.5K)q.5K=q.6U();C(q.u.3Z){q.bm=28(V.1o(q.E,\'z-1T\')||0);q.E.O.5A=q.u.3Z}C(q.u.3z){q.6W=q.E.gx(Y);q.6X=(q.E.1o(\'1C\')==\'3s\');C(!q.6X)1p.aQ(q.E);q.E.1z.4n(q.6W,q.E)}C(q.u.1i){C(q.u.1i==1M){D b=q.6Y(q.u.1i);q.8C=b.1h;q.8D=b.1c}13{q.8C=q.u.1i.4N;q.8D=q.u.1i.41}}1l.5I(\'8x\',q,a);C(q.u.4J)q.u.4J(q.E)},6O:t(a,b){C(!q.2s)q.6V(a);C(!q.u.4I){1p.6N();2f.1O(b,q.E)}1l.5I(\'8z\',q,a);q.5L(b);C(q.u.6Z)q.u.6Z(q);C(q.u.1i){q.8E();D p;C(q.u.1i==1M){5i(q.6Y(q.u.1i)){p=[1h,1c,1h+1k,1c+1f]}}13{p=1p.gy(q.u.1i);p[0]+=q.u.1i.4N+1p.bn;p[1]+=q.u.1i.41+1p.bo;p.1x(p[0]+q.u.1i.3R);p.1x(p[1]+q.u.1i.3t)}D c=[0,0];C(b[0]<(p[0]+q.u.2r))c[0]=b[0]-(p[0]+q.u.2r);C(b[1]<(p[1]+q.u.2r))c[1]=b[1]-(p[1]+q.u.2r);C(b[0]>(p[2]-q.u.2r))c[0]=b[0]-(p[2]-q.u.2r);C(b[1]>(p[3]-q.u.2r))c[1]=b[1]-(p[3]-q.u.2r);q.bp(c)}C(1n.2i.5d)1M.7Y(0,0);Z.1Y(a)},5M:t(a,b){q.2s=M;C(q.u.4I){1p.6N();D c=[Z.4z(a),Z.4A(a)];2f.1O(c,q.E)}C(q.u.3z){C(!q.6X)1p.gz(q.E);8F q.6X;V.3o(q.6W);q.6W=17}D e=M;C(b){e=2f.ba(a,q.E);C(!e)e=M}C(e&&q.u.bq)q.u.bq(q.E);1l.5I(\'8y\',q,a);D f=q.u.8A;C(f&&N.4o(f))f=f(q.E);D d=q.6U();C(f&&q.u.3X){C(e==0||f!=\'gA\')q.u.3X(q.E,d[1]-q.5K[1],d[0]-q.5K[0])}13{q.5K=d}C(q.u.3Z)q.E.O.5A=q.bm;C(q.u.3Y)q.u.3Y(q.E);1l.5F(q);2f.bc()},6P:t(a){C(a.42!=Z.8G)G;q.5M(a,M);Z.1Y(a)},4E:t(a){C(!q.2s)G;q.8E();q.5M(a,Y);Z.1Y(a)},5L:t(a){D b=1p.3u(q.E);C(q.u.3z){D r=1p.gB(q.E);b[0]+=r[0]-1p.bn;b[1]+=r[1]-1p.bo}D d=q.6U();b[0]-=d[0];b[1]-=d[1];C(q.u.1i&&(q.u.1i!=1M&&q.8B)){b[0]-=q.u.1i.4N-q.8C;b[1]-=q.u.1i.41-q.8D}D p=[0,1].1I(t(i){G(a[i]-b[i]-q.5v[i])}.1g(q));C(q.u.38){C(N.4o(q.u.38)){p=q.u.38(p[0],p[1],q)}13{C(N.6J(q.u.38)){p=p.1I(t(v,i){G(v/q.u.38[i]).23()*q.u.38[i]}.1g(q))}13{p=p.1I(t(v){G(v/q.u.38).23()*q.u.38}.1g(q))}}}D c=q.E.O;C((!q.u.43)||(q.u.43==\'8H\'))c.1h=p[0]+"1v";C((!q.u.43)||(q.u.43==\'5N\'))c.1c=p[1]+"1v";C(c.70=="71")c.70=""},8E:t(){C(q.72){as(q.72);q.72=17;1l.2P=17}},bp:t(a){C(!(a[0]||a[1]))G;q.1X=[a[0]*q.u.1X,a[1]*q.u.1X];q.8I=X 6m();q.72=ar(q.1i.1g(q),10)},1i:t(){D a=X 6m();D b=a-q.8I;q.8I=a;C(q.u.1i==1M){5i(q.6Y(q.u.1i)){C(q.1X[0]||q.1X[1]){D d=b/2u;q.u.1i.8k(1h+d*q.1X[0],1c+d*q.1X[1])}}}13{q.u.1i.4N+=q.1X[0]*b/2u;q.u.1i.41+=q.1X[1]*b/2u}1p.6N();2f.1O(1l.4H,q.E);1l.5I(\'8z\',q);C(q.8B){1l.2P=1l.2P||$A(1l.4H);1l.2P[0]+=q.1X[0]*b/2u;1l.2P[1]+=q.1X[1]*b/2u;C(1l.2P[0]<0)1l.2P[0]=0;C(1l.2P[1]<0)1l.2P[1]=0;q.5L(1l.2P)}C(q.u.6Z)q.u.6Z(q)},6Y:t(w){D T,L,W,H;5i(w.18){C(w.18.3A&&3A.41){T=3A.41;L=3A.4N}13 C(w.18.44){T=44.41;L=44.4N}C(w.bs){W=w.bs;H=w.gC}13 C(w.18.3A&&3A.8J){W=3A.8J;H=3A.6A}13{W=44.3R;H=44.3t}}G{1c:T,1h:L,1k:W,1f:H}}});3W.5J={};D bt=1D.1y({1G:t(a,b){q.E=$(a);q.4O=b;q.4P=1b.5O(q.E)},8x:t(){q.4P=1b.5O(q.E)},8y:t(){1b.bu();C(q.4P!=1b.5O(q.E))q.4O(q.E)}});D 1b={bv:/^[^3j\\-](?:[A-gD-9H-9\\-\\3j]*)[3j](.*)$/,5P:{},bw:t(a){4k(a.2X.2V()!="a1"){C(a.19&&1b.5P[a.19])G a;a=a.1z}},u:t(a){a=1b.bw($(a));C(!a)G;G 1b.5P[a.19]},4L:t(a){D s=1b.u(a);C(s){1l.bh(s.E);s.5Q.1d(t(d){2f.3o(d)});s.8K.aA(\'4L\');8F 1b.5P[s.E.19]}},1y:t(b){b=$(b);D c=N.11({E:b,4Q:\'5R\',bx:M,27:M,5S:\'8L\',2p:\'5N\',43:\'5N\',3V:b,1K:M,45:M,2a:0,2M:17,3z:M,4I:M,1i:M,2r:20,1X:15,3B:q.bv,by:M,1w:M,39:1n.3P,bz:1n.3P},12[1]||{});q.4L(b);D d={8A:Y,4I:c.4I,1i:c.1i,1X:c.1X,2r:c.2r,2a:c.2a,3z:c.3z,43:c.43,1K:c.1K};C(c.4J)d.4J=c.4J;C(c.3X)d.3X=c.3X;13 C(c.3z)d.3X=t(a){a.O.1c=0;a.O.1h=0};C(c.3Y)d.3Y=c.3Y;C(c.3Z)d.3Z=c.3Z;D f={2p:c.2p,3V:c.3V,27:c.27,2M:c.2M,3x:1b.3x};D g={3x:1b.bA,2p:c.2p,3V:c.3V,2M:c.2M};V.5x(b);c.8K=[];c.5Q=[];C(c.bx||c.27){2f.4p(b,g);c.5Q.1x(b)}(c.by||q.4R(b,c)||[]).1d(t(e,i){D a=c.1w?$(c.1w[i]):(c.1K?$(e).2U(\'.\'+c.1K)[0]:e);c.8K.1x(X 3W(e,N.11(d,{1K:a})));2f.4p(e,f);C(c.27)e.8s=b;c.5Q.1x(e)});C(c.27){(1b.bB(b,c)||[]).1d(t(e){2f.4p(e,g);e.8s=b;c.5Q.1x(e)})}q.5P[b.19]=c;1l.bg(X bt(b,c.bz))},4R:t(a,b){G V.73(a,b.45,b.27?Y:M,b.4Q)},bB:t(a,b){G V.73(a,b.45,b.27?Y:M,b.5S)},3x:t(a,b,c){C(V.5E(b,a))G;C(c>.33&&c<.66&&1b.u(b).27){G}13 C(c>0.5){1b.8M(b,\'gE\');C(b.gF!=a){D d=a.1z;a.O.70="71";b.1z.4n(a,b);C(b.1z!=d)1b.u(d).39(a);1b.u(b.1z).39(a)}}13{1b.8M(b,\'bC\');D e=b.gG||17;C(e!=a){D d=a.1z;a.O.70="71";b.1z.4n(a,e);C(b.1z!=d)1b.u(d).39(a);1b.u(b.1z).39(a)}}},bA:t(a,b,c){D d=a.1z;D e=1b.u(b);C(!V.5E(b,a)){D f;D g=1b.4R(b,{4Q:e.4Q,45:e.45});D h=17;C(g){D i=V.5T(b,e.2p)*(1.0-c);1U(f=0;f<g.14;f+=1){C(i-V.5T(g[f],e.2p)>=0){i-=V.5T(g[f],e.2p)}13 C(i-(V.5T(g[f],e.2p)/2)>=0){h=f+1<g.14?g[f+1]:17;1N}13{h=g[f];1N}}}b.4n(a,h);1b.u(d).39(a);e.39(a)}},bu:t(){C(1b.3a)1b.3a.1r()},8M:t(a,b){D c=1b.u(a.1z);C(c&&!c.3z)G;C(!1b.3a){1b.3a=($(\'bD\')||V.11(18.21(\'a3\'))).1r().2B(\'bD\').1j({1C:\'3s\'});18.6d("44").gH(0).1L(1b.3a)}D d=1p.3u(a);1b.3a.1j({1h:d[0]+\'1v\',1c:d[1]+\'1v\'});C(b==\'bC\')C(c.2p==\'8H\')1b.3a.1j({1h:(d[0]+a.8J)+\'1v\'});13 1b.3a.1j({1c:(d[1]+a.6A)+\'1v\'});1b.3a.1O()},8N:t(a,b,c){D d=1b.4R(a,b)||[];1U(D i=0;i<d.14;++i){D e=d[i].19.2F(b.3B);C(!e)gI;D f={19:3b(e?e[1]:17),E:a,8O:c,4S:[],1C:c.4S.14,74:$(d[i]).22(b.5S)};C(f.74)q.8N(f.74,b,f);c.4S.1x(f)}G c},27:t(a){a=$(a);D b=q.u(a);D c=N.11({4Q:b.4Q,5S:b.5S,45:b.45,3m:a.19,3B:b.3B},12[1]||{});D d={19:17,8O:17,4S:[],74:a,1C:0};G 1b.8N(a,c,d)},bE:t(a){D b=\'\';do{C(a.19)b=\'[\'+a.1C+\']\'+b}4k((a=a.8O)!=17);G b},bF:t(b){b=$(b);D c=N.11(q.u(b),12[1]||{});G $(q.4R(b,c)||[]).1I(t(a){G a.19.2F(c.3B)?a.19.2F(c.3B)[1]:\'\'})},gJ:t(b,c){b=$(b);D d=N.11(q.u(b),12[2]||{});D e={};q.4R(b,d).1d(t(n){C(n.19.2F(d.3B))e[n.19.2F(d.3B)[1]]=[n,n.1z];n.1z.a8(n)});c.1d(t(a){D n=e[a];C(n){n[1].1L(n[0]);8F e[a]}})},5O:t(b){b=$(b);D c=N.11(1b.u(b),12[1]||{});D d=3b((12[1]&&12[1].3m)?12[1].3m:b.19);C(c.27){G 1b.27(b,12[1]).4S.1I(t(a){G[d+1b.bE(a)+"[19]="+3b(a.19)].7T(a.4S.1I(12.8P))}).2v().4h(\'&\')}13{G 1b.bF(b,12[1]).1I(t(a){G d+"[]="+3b(a)}).4h(\'&\')}}};V.5E=t(a,b){C(!a.1z||a==b)G M;C(a.1z==b)G Y;G V.5E(a.1z,b)};V.73=t(b,c,d,f){C(!b.7X())G 17;f=f.2V();C(c)c=[c].2v();D g=[];$A(b.2Y).1d(t(e){C(e.2X&&e.2X.2V()==f&&(!c||(V.b8(e).6L(t(v){G c.4w(v)}))))g.1x(e);C(d){D a=V.73(e,c,d,f);C(a)g.1x(a)}});G(g.14>0?g.2v():[])};V.5T=t(a,b){G a[\'5v\'+((b==\'5N\'||b==\'1f\')?\'gK\':\'gL\')]};C(29 J==\'3F\')2S("gM.4c 7L b4 4b.7J.7K\' 1m.4c b5");D 46={};46.2d=1D.1y({8Q:t(c,d,e){c=$(c);q.E=c;q.1e=$(d);q.4T=M;q.5U=M;q.1Z=M;q.1T=0;q.3c=0;q.5V=q.E.1a;C(q.8R)q.8R(e);13 q.u=e||{};q.u.4U=q.u.4U||q.E.3m;q.u.2Q=q.u.2Q||[];q.u.8S=q.u.8S||0.4;q.u.8T=q.u.8T||1;q.u.8U=q.u.8U||t(a,b){C(!b.O.1C||b.O.1C==\'3s\'){b.O.1C=\'3s\';1p.8V(a,b,{gN:M,aH:a.3t})}J.6l(b,{1t:0.15})};q.u.8W=q.u.8W||t(a,b){X J.83(b,{1t:0.15})};C(29(q.u.2Q)==\'a0\')q.u.2Q=X 9X(q.u.2Q);C(!q.u.2Q.4w(\'\\n\'))q.u.2Q.1x(\'\\n\');q.4O=17;q.E.gO(\'gP\',\'gQ\');V.1r(q.1e);Z.1W(q.E,\'gR\',q.bG.2q(q));Z.1W(q.E,\'bH\',q.bI.2q(q))},1O:t(){C(V.1o(q.1e,\'5u\')==\'3n\')q.u.8U(q.E,q.1e);C(!q.3C&&(1n.2i.4m)&&(V.1o(q.1e,\'1C\')==\'3s\')){X gS.bJ(q.1e,\'<bK 19="\'+q.1e.19+\'bL" \'+\'O="5u:3n;1C:3s;gT:gU:gV.gW.gX(1S=0);" \'+\'3i="9F:M;" gY="0" gZ="h0"></bK>\');q.3C=$(q.1e.19+\'bL\')}C(q.3C)4G(q.bM.1g(q),50)},bM:t(){1p.8V(q.1e,q.3C,{h1:(!q.1e.O.1f)});q.3C.O.5A=1;q.1e.O.5A=2;V.1O(q.3C)},1r:t(){q.8X();C(V.1o(q.1e,\'5u\')!=\'3n\')q.u.8W(q.E,q.1e);C(q.3C)V.1r(q.3C)},bN:t(){C(q.u.76)V.1O(q.u.76)},8X:t(){C(q.u.76)V.1r(q.u.76)},bI:t(a){C(q.1Z)6n(a.42){1E Z.bO:1E Z.8Y:q.77();Z.1Y(a);1E Z.8G:q.1r();q.1Z=M;Z.1Y(a);G;1E Z.h2:1E Z.h3:G;1E Z.h4:q.bP();q.2G();Z.1Y(a);G;1E Z.h5:q.bQ();q.2G();Z.1Y(a);G}13 C(a.42==Z.bO||a.42==Z.8Y||(1n.2i.5d>0&&a.42==0))G;q.5U=Y;q.4T=Y;C(q.4O)8v(q.4O);q.4O=4G(q.bR.1g(q),q.u.8S*2u)},3w:t(){q.5U=M;q.4T=Y;q.78()},3x:t(a){D b=Z.bS(a,\'7S\');C(q.1T!=b.79){q.1T=b.79;q.2G()}Z.1Y(a)},bT:t(a){D b=Z.bS(a,\'7S\');q.1T=b.79;q.77();q.1r()},bG:t(a){4G(q.1r.1g(q),h6);q.4T=M;q.1Z=M},2G:t(){C(q.3c>0){1U(D i=0;i<q.3c;i++)q.1T==i?V.2B(q.47(i),"4V"):V.3v(q.47(i),"4V");C(q.4T){q.1O();q.1Z=Y}}13{q.1Z=M;q.1r()}},bP:t(){C(q.1T>0)q.1T--;13 q.1T=q.3c-1;q.47(q.1T).bU(Y)},bQ:t(){C(q.1T<q.3c-1)q.1T++;13 q.1T=0;q.47(q.1T).bU(M)},47:t(a){G q.1e.58.2Y[a]},bV:t(){G q.47(q.1T)},77:t(){q.1Z=M;q.7a(q.bV())},7a:t(a){C(q.u.7a){q.u.7a(a);G}D b=\'\';C(q.u.2U){D c=$(a).2U(\'.\'+q.u.2U)||[];C(c.14>0)b=V.6h(c[0],q.u.2U)}13 b=V.6i(a,\'h7\');D d=q.7b();C(d[0]!=-1){D e=q.E.1a.3d(0,d[0]);D f=q.E.1a.3d(d[0]).2F(/^\\s+/);C(f)e+=f[0];q.E.1a=e+b+q.E.1a.3d(d[1])}13{q.E.1a=b}q.5V=q.E.1a;q.E.5H();C(q.u.bW)q.u.bW(q.E,a)},8Z:t(a){C(!q.5U&&q.4T){q.1e.2W=a;V.5x(q.1e);V.5x(q.1e.22());C(q.1e.58&&q.1e.22().2Y){q.3c=q.1e.22().2Y.14;1U(D i=0;i<q.3c;i++){D b=q.47(i);b.79=i;q.bX(b)}}13{q.3c=0}q.8X();q.1T=0;C(q.3c==1&&q.u.h8){q.77();q.1r()}13{q.2G()}}},bX:t(a){Z.1W(a,"bY",q.3x.2q(q));Z.1W(a,"bZ",q.bT.2q(q))},bR:t(){q.5U=M;q.7c=17;C(q.7d().14>=q.u.8T){q.78()}13{q.1Z=M;q.1r()}q.5V=q.E.1a},7d:t(){D a=q.7b();G q.E.1a.8q(a[0],a[1]).5b()},7b:t(){C(17!=q.7c)G q.7c;D a=q.E.1a;C(a.5b().h9())G[-1,0];D b=12.8P.c0(a,q.5V);D c=(b==q.5V.14?1:0);D d=-1,7e=a.14;D e;1U(D f=0,l=q.u.2Q.14;f<l;++f){e=a.ha(q.u.2Q[f],b+c-1);C(e>d)d=e;e=a.2y(q.u.2Q[f],b+c);C(-1!=e&&e<7e)7e=e}G(q.7c=[d+1,7e])}});46.2d.4j.7b.c0=t(a,b){D c=1B.5W(a.14,b.14);1U(D d=0;d<c;++d)C(a[d]!=b[d])G d;G c};1H.46=1D.1y(46.2d,{1G:t(a,b,c,d){q.8Q(a,b,d);q.u.hb=Y;q.u.2R=q.2R.1g(q);q.u.90=q.u.3D||17;q.3e=c},78:t(){q.bN();D a=3b(q.u.4U)+\'=\'+3b(q.7d());q.u.3D=q.u.4W?q.u.4W(q.E,a):a;C(q.u.90)q.u.3D+=\'&\'+q.u.90;X 1H.5X(q.3e,q.u)},2R:t(a){q.8Z(a.5Y)}});46.hc=1D.1y(46.2d,{1G:t(a,b,c,d){q.8Q(a,b,d);q.u.91=c},78:t(){q.8Z(q.u.c1(q))},8R:t(h){q.u=N.11({92:10,c2:Y,c3:2,93:Y,c4:M,c1:t(a){D b=[];D c=[];D d=a.7d();D e=0;1U(D i=0;i<a.u.91.14&&b.14<a.u.92;i++){D f=a.u.91[i];D g=a.u.93?f.3l().2y(d.3l()):f.2y(d);4k(g!=-1){C(g==0&&f.14!=d.14){b.1x("<5R><7f>"+f.3d(0,d.14)+"</7f>"+f.3d(d.14)+"</5R>");1N}13 C(d.14>=a.u.c3&&a.u.c2&&g!=-1){C(a.u.c4||/\\s/.5r(f.3d(g-1,1))){c.1x("<5R>"+f.3d(0,g)+"<7f>"+f.3d(g,d.14)+"</7f>"+f.3d(g+d.14)+"</5R>");1N}}g=a.u.93?f.3l().2y(d.3l(),g+1):f.2y(d,g+1)}}C(c.14)b=b.7T(c.3J(0,a.u.92-b.14));G"<8L>"+b.4h(\'\')+"</8L>"}},h||{})}});94.c5=t(a){4G(t(){94.3w(a)},1)};1H.3f=1D.1y({1G:t(a,b,c){q.3e=b;q.E=a=$(a);q.c6();q.1A={};12.8P.c7(c);N.11(q.u,c||{});C(!q.u.4X&&q.E.19){q.u.4X=q.E.19+\'-7g\';C($(q.u.4X))q.u.4X=\'\'}C(q.u.2h)q.u.2h=$(q.u.2h);C(!q.u.2h)q.u.7h=M;q.7i=q.E.1o(\'6w-34\')||\'aU\';q.E.hd=q.u.c8;q.7j=q.95.1g(q);q.c9=(q.u.2R||1n.3P).1g(q);q.7k=q.ca.1g(q);q.5Z=q.96.1g(q);q.97=q.98.1g(q);q.cb()},cc:t(e){C(!q.7l||e.he||e.hf||e.hg)G;C(Z.8G==e.42)q.95(e);13 C(Z.8Y==e.42)q.96(e)},99:t(a,b,c){D d=q.u[a+\'7m\'];D e=q.u[a+\'hh\'];C(\'7n\'==d){D f=18.21(\'cd\');f.6b=\'hi\';f.1a=e;f.4f=\'ce\'+a+\'hj\';C(\'31\'==a)f.cf=q.7j;q.1F.1L(f);q.1A[a]=f}13 C(\'7o\'==d){D g=18.21(\'a\');g.hk=\'#\';g.1L(18.59(e));g.cf=\'31\'==a?q.7j:q.5Z;g.4f=\'ce\'+a+\'hl\';C(c)g.4f+=\' \'+c;q.1F.1L(g);q.1A[a]=g}},9a:t(){D a=(q.u.4Y?q.u.9b:q.7p());D b;C(1>=q.u.60&&!/\\r|\\n/.5r(q.7p())){b=18.21(\'cd\');b.6b=\'7F\';D c=q.u.5q||q.u.9c||0;C(0<c)b.5q=c}13{b=18.21(\'cg\');b.60=(1>=q.u.60?q.u.ch:q.u.60);b.9c=q.u.9c||40}b.3m=q.u.4U;b.1a=a;b.4f=\'hm\';C(q.u.ci)b.hn=q.5Z;q.1A.1Q=b;C(q.u.4Y)q.7q();q.1F.1L(q.1A.1Q)},cj:t(){D d=q;t 7r(a,b){D c=d.u[\'7F\'+a+\'ho\'];C(!c||b===M)G;d.1F.1L(18.59(c))};q.1F=$(18.21(\'ck\'));q.1F.19=q.u.4X;q.1F.2B(q.u.cl);q.1F.hp=q.5Z;q.9a();C(\'cg\'==q.1A.1Q.2X.3l())q.1F.1L(18.21(\'br\'));C(q.u.9d)q.u.9d(q,q.1F);7r(\'hq\',q.u.61||q.u.62);q.99(\'cn\',q.5Z);7r(\'hr\',q.u.61&&q.u.62);q.99(\'31\',q.7j,\'hs\');7r(\'bJ\',q.u.61||q.u.62)},4L:t(){C(q.48)q.E.2W=q.48;q.9e();q.co()},cp:t(e){C(q.63||q.7l)G;q.7l=Y;q.4Z(\'cq\');C(q.u.2h)q.u.2h.1r();q.E.1r();q.cj();q.E.1z.4n(q.1F,q.E);C(!q.u.4Y)q.9f();C(e)Z.1Y(e)},cr:t(e){C(q.u.64)q.E.2B(q.u.64);C(q.63)G;q.4Z(\'cs\')},7p:t(){G q.E.2W},ca:t(a){q.4Z(\'3g\',a);C(q.48){q.E.2W=q.48;q.48=17}},95:t(e){q.98();C(e)Z.1Y(e)},96:t(e){D a=q.1F;D b=$F(q.1A.1Q);q.ct();D c=q.u.4W(a,b)||\'\';C(N.3p(c))c=c.ht();c.7s=q.E.19;C(q.u.cu){D d=N.11({hu:Y},q.u.51);N.11(d,{3D:c,2R:q.97,3g:q.7k});X 1H.hv({hw:q.E},q.3e,d)}13{D d=N.11({2l:\'2k\'},q.u.51);N.11(d,{3D:c,2R:q.97,3g:q.7k});X 1H.5X(q.3e,d)}C(e)Z.1Y(e)},9e:t(){q.E.3v(q.u.9g);q.9h();q.7t();q.E.O.4v=q.7i;q.E.1O();C(q.u.2h)q.u.2h.1O();q.63=M;q.7l=M;q.48=17;q.4Z(\'cv\')},7t:t(e){C(q.u.64)q.E.3v(q.u.64);C(q.63)G;q.4Z(\'cw\')},7q:t(){q.1F.2B(q.u.65);q.1A.1Q.3h=Y;D c=N.11({2l:\'2k\'},q.u.51);N.11(c,{3D:\'7s=\'+3b(q.E.19),2R:1n.3P,9i:t(a){q.1F.3v(q.u.65);D b=a.5Y;C(q.u.cx)b=b.9j();q.1A.1Q.1a=b;q.1A.1Q.3h=M;q.9f()}.1g(q),3g:q.7k});X 1H.5X(q.u.4Y,c)},9f:t(){D a=q.u.cy;C(a)$(q.1A.1Q)[\'5H\'==a?\'5H\':\'3w\']()},c6:t(){q.u=N.8V(1H.3f.3M);N.11(q.u,1H.3f.cz);[q.cA].2v().hx().1d(t(a){N.11(q.u,a)}.1g(q))},ct:t(){q.63=Y;q.9h();q.7t();q.cB()},cb:t(){q.9k={};D b;$H(1H.3f.cC).1d(t(a){b=q[a.1a].1g(q);q.9k[a.4x]=b;C(!q.u.7h)q.E.1W(a.4x,b);C(q.u.2h)q.u.2h.1W(a.4x,b)}.1g(q))},9h:t(){C(!q.1F)G;q.1F.3o();q.1F=17;q.1A={}},cB:t(){q.48=q.E.2W;q.E.2W=q.u.cD;q.E.2B(q.u.9g);q.E.O.4v=q.7i;q.E.1O()},4Z:t(a,b){C(\'t\'==29 q.u[a]){q.u[a](q,b)}},co:t(){$H(q.9k).1d(t(a){C(!q.u.7h)q.E.2N(a.4x,a.1a);C(q.u.2h)q.u.2h.2N(a.4x,a.1a)}.1g(q))},98:t(a){q.9e();q.c9(a,q.E)}});N.11(1H.3f.4j,{cE:1H.3f.4j.4L});1H.9l=1D.1y(1H.3f,{1G:t($cF,b,c,d){q.cA=1H.9l.3M;$cF(b,c,d)},9a:t(){D a=18.21(\'2U\');a.3m=q.u.4U;a.5q=1;q.1A.1Q=a;q.52=q.u.cG||[];C(q.u.cH)q.cI();13 q.9m();q.1F.1L(q.1A.1Q)},cI:t(){q.1F.2B(q.u.65);q.9n(q.u.cJ);D c=N.11({2l:\'2k\'},q.u.51);N.11(c,{3D:\'7s=\'+3b(q.E.19),2R:1n.3P,9i:t(a){D b=a.5Y.5b();C(!/^\\[.*\\]$/.5r(b))2S(\'hy hz an hA cG hB.\');q.52=ax(b);q.9m()}.1g(q),3g:q.3g});X 1H.5X(q.u.cH,c)},9n:t(a){q.1A.1Q.3h=Y;D b=q.1A.1Q.58;C(!b){b=18.21(\'cK\');b.1a=\'\';q.1A.1Q.1L(b);b.4V=Y}b.1e((a||\'\').hC().9j())},9m:t(){q.4g=q.7p();C(q.u.4Y)q.7q();13 q.9o()},7q:t(){q.9n(q.u.9b);D b=N.11({2l:\'2k\'},q.u.51);N.11(b,{3D:\'7s=\'+3b(q.E.19),2R:1n.3P,9i:t(a){q.4g=a.5Y.5b();q.9o()}.1g(q),3g:q.3g});X 1H.5X(q.u.4Y,b)},9o:t(){q.1F.3v(q.u.65);q.52=q.52.1I(t(a){G 2===a.14?a:[a,a].2v()});D c=(\'1a\'3I q.u)?q.u.1a:q.4g;D d=q.52.hD(t(a){G a[0]==c}.1g(q));q.1A.1Q.1e(\'\');D e;q.52.1d(t(a,b){e=18.21(\'cK\');e.1a=a[0];e.4V=d?a[0]==c:0==b;e.1L(18.59(a[1]));q.1A.1Q.1L(e)}.1g(q));q.1A.1Q.3h=M;94.c5(q.1A.1Q)}});1H.3f.4j.1G.c7=t(c){C(!c)G;t 67(a,b){C(a 3I c||b===3F)G;c[a]=b};67(\'62\',(c.cL?\'7o\':(c.cM?\'7n\':c.cL==c.cM==M?M:3F)));67(\'61\',(c.cN?\'7o\':(c.cO?\'7n\':c.cN==c.cO==M?M:3F)));67(\'68\',c.hE);67(\'9p\',c.hF)};N.11(1H.3f,{3M:{51:{},ch:3,62:\'7o\',hG:\'31\',c8:\'hH 1V hI\',2h:17,7h:M,cy:\'3w\',cl:\'7g-ck\',4X:17,68:\'#aM\',9p:\'#8f\',64:\'\',cu:Y,65:\'7g-hJ\',9b:\'cP...\',61:\'7n\',hK:\'cn\',4U:\'1a\',60:1,9g:\'7g-hL\',cD:\'hM...\',5q:0,cx:M,ci:M,hN:\'\',hO:\'\',hP:\'\'},cz:{4W:t(a){G cQ.5O(a)},2R:t(a,b){X J.6u(b,{6v:q.u.68,8e:Y})},cq:17,cs:t(a){a.E.O.4v=a.u.68;C(a.9q)a.9q.31()},3g:t(a,b){hQ(\'hR hS 5i 9G hT: \'+a.5Y.9j())},9d:17,cv:17,cw:t(a){a.9q=X J.6u(a.E,{6v:a.u.68,6x:a.u.9p,6y:a.7i,8e:Y})}},cC:{bZ:\'cp\',bH:\'cc\',bY:\'cr\',hU:\'7t\'}});1H.9l.3M={cJ:\'cP u...\'};cQ.V.hV=1D.1y({1G:t(a,b,c){q.2a=b||0.5;q.E=$(a);q.4W=c;q.69=17;q.4P=$F(q.E);Z.1W(q.E,\'hW\',q.cR.2q(q))},cR:t(a){C(q.4P==$F(q.E))G;C(q.69)8v(q.69);q.69=4G(q.cS.1g(q),q.2a*2u);q.4P=$F(q.E)},cS:t(){q.69=17;q.4W(q.E,$F(q.E))}});C(!7m)D 7m={};7m.hX=1D.1y({1G:t(a,b,c){D d=q;C(N.6J(a)){q.1w=a.7U(t(e){G $(e)})}13{q.1w=[$(a)]}q.1s=$(b);q.u=c||{};q.9r=q.u.9r||\'8H\';q.cT=q.u.cT||1;q.cU=28(q.u.cU||\'1\');q.1R=q.u.1R||$R(0,1);q.1a=0;q.1J=q.1w.1I(t(){G 0});q.49=q.u.49?q.u.49.1I(t(s){G $(s)}):M;q.u.7u=$(q.u.7u||17);q.u.7v=$(q.u.7v||17);q.9s=q.u.9s||M;q.7w=q.u.7w||q.1R.2x;q.9t=q.u.9t||q.1R.1u;q.7x=28(q.u.7x||\'0\');q.7y=28(q.u.7y||\'0\');q.9u=q.cV()-q.cW();q.7z=q.3E()?(q.1w[0].3t!=0?q.1w[0].3t:q.1w[0].O.1f.3G(/1v$/,"")):(q.1w[0].3R!=0?q.1w[0].3R:q.1w[0].O.1k.3G(/1v$/,""));q.1Z=M;q.2s=M;q.3h=M;C(q.u.3h)q.cX();q.2t=q.u.1J?q.u.1J.cY(1n.K):M;C(q.2t){q.9t=q.2t.5W();q.7w=q.2t.30()}q.3y=q.6V.2q(q);q.4D=q.4E.2q(q);q.4F=q.1e.2q(q);q.1w.1d(t(h,i){i=d.1w.14-1-i;d.6a(32((N.6J(d.u.9v)?d.u.9v[i]:d.u.9v)||d.1R.1u),i);h.2m().1W("4K",d.3y)});q.1s.1W("4K",q.3y);18.1W("6Q",q.4D);18.1W("6R",q.4F);q.7A=Y},cE:t(){D a=q;Z.2N(q.1s,"4K",q.3y);Z.2N(18,"6Q",q.4D);Z.2N(18,"6R",q.4F);q.1w.1d(t(h){Z.2N(h,"4K",a.3y)})},cX:t(){q.3h=Y},hY:t(){q.3h=M},cZ:t(b){C(q.2t){C(b>=q.2t.30())G(q.2t.30());C(b<=q.2t.5W())G(q.2t.5W());D c=1B.6S(q.2t[0]-b);D d=q.2t[0];q.2t.1d(t(v){D a=1B.6S(v-b);C(a<=c){d=v;c=a}});G d}C(b>q.1R.2x)G q.1R.2x;C(b<q.1R.1u)G q.1R.1u;G b},6a:t(a,b){C(!q.1Z){q.53=b||0;q.54=q.1w[q.53];q.9w()}b=b||q.53||0;C(q.7A&&q.9s){C((b>0)&&(a<q.1J[b-1]))a=q.1J[b-1];C((b<(q.1w.14-1))&&(a>q.1J[b+1]))a=q.1J[b+1]}a=q.cZ(a);q.1J[b]=a;q.1a=q.1J[0];q.1w[b].O[q.3E()?\'1c\':\'1h\']=q.55(a);q.d0();C(!q.2s||!q.2H)q.9x()},hZ:t(a,b){q.6a(q.1J[b||q.53||0]+a,b||q.53||0)},55:t(a){G 1B.23(((q.9u-q.7z)/(q.1R.2x-q.1R.1u))*(a-q.1R.1u))+"1v"},9y:t(a){G((a/(q.9u-q.7z)*(q.1R.2x-q.1R.1u))+q.1R.1u)},7B:t(a){D v=q.1J.cY(1n.K);a=a||0;G $R(v[a],v[a+1])},cW:t(){G(q.3E()?q.7y:q.7x)},cV:t(){G(q.3E()?(q.1s.3t!=0?q.1s.3t:q.1s.O.1f.3G(/1v$/,""))-q.7y:(q.1s.3R!=0?q.1s.3R:q.1s.O.1k.3G(/1v$/,""))-q.7x)},3E:t(){G(q.9r==\'5N\')},d0:t(){D a=q;C(q.49)$R(0,q.49.14-1).1d(t(r){a.7C(a.49[r],a.7B(r))});C(q.u.7u)q.7C(q.u.7u,$R(0,q.1J.14>1?q.7B(0).5W():q.1a));C(q.u.7v)q.7C(q.u.7v,$R(q.1J.14>1?q.7B(q.49.14-1).30():q.1a,q.7w))},7C:t(a,b){C(q.3E()){a.O.1c=q.55(b.1u);a.O.1f=q.55(b.2x-b.1u+q.1R.1u)}13{a.O.1h=q.55(b.1u);a.O.1k=q.55(b.2x-b.1u+q.1R.1u)}},9w:t(){q.1w.1d(t(h){V.3v(h,\'4V\')});V.2B(q.54,\'4V\')},6V:t(a){C(Z.bl(a)){C(!q.3h){q.1Z=Y;D b=Z.E(a);D c=[Z.4z(a),Z.4A(a)];D d=b;C(d==q.1s){D e=1p.3u(q.1s);q.2H=a;q.6a(q.9y((q.3E()?c[1]-e[1]:c[0]-e[0])-(q.7z/2)));D e=1p.3u(q.54);q.9z=(c[0]-e[0]);q.9A=(c[1]-e[1])}13{4k((q.1w.2y(b)==-1)&&b.1z)b=b.1z;C(q.1w.2y(b)!=-1){q.54=b;q.53=q.1w.2y(q.54);q.9w();D e=1p.3u(q.54);q.9z=(c[0]-e[0]);q.9A=(c[1]-e[1])}}}Z.1Y(a)}},1e:t(a){C(q.1Z){C(!q.2s)q.2s=Y;q.5L(a);C(1n.2i.5d)1M.7Y(0,0);Z.1Y(a)}},5L:t(a){D b=[Z.4z(a),Z.4A(a)];D c=1p.3u(q.1s);b[0]-=q.9z+c[0];b[1]-=q.9A+c[1];q.2H=a;q.6a(q.9y(q.3E()?b[1]:b[0]));C(q.7A&&q.u.d1)q.u.d1(q.1J.14>1?q.1J:q.1a,q)},4E:t(a){C(q.1Z&&q.2s){q.5M(a,Y);Z.1Y(a)}q.1Z=M;q.2s=M},5M:t(a,b){q.1Z=M;q.2s=M;q.9x()},9x:t(){C(q.7A&&q.u.39)q.u.39(q.1J.14>1?q.1J:q.1a,q);q.2H=17}});4a={2E:{},7D:Y,9B:X d2(\'<i0 O="1f:0" 19="7E#{1s}3j#{19}" 3i="#{3e}" 4r="M" d3="Y" 71="Y"/>\'),i1:t(){4a.7D=Y},i2:t(){4a.7D=M},8n:t(c){C(!4a.7D)G;D d=N.11({1s:\'5g\',3e:c,3G:M},12[1]||{});C(d.3G&&q.2E[d.1s]){$R(0,q.2E[d.1s].19).1d(t(a){D b=$(\'7E\'+d.1s+\'3j\'+a);b.d4&&b.d4();b.3o()});q.2E[d.1s]=17}C(!q.2E[d.1s])q.2E[d.1s]={19:0};13 q.2E[d.1s].19++;d.19=q.2E[d.1s].19;$$(\'44\')[0].i3(1n.2i.4m?X V(\'i4\',{19:\'7E\'+d.1s+\'3j\'+d.19,3i:d.3e,4r:1,d3:Y}):4a.9B.i5(d))}};C(1n.2i.i6&&9C.i7.2y("i8")>0){C(9C.d5&&$A(9C.d5).6L(t(p){G p.3m.2y(\'i9\')!=-1}))4a.9B=X d2(\'<4d 19="7E#{1s}3j#{19}" 1k="0" 1f="0" 6b="ia/ib" ic="#{3e}"/>\');13 4a.8n=t(){}}56.7H();',62,1129,'||||||||||||||||||||||||||this|||function|options||||||||if|var|element||return|||Effect|||false|Object|style|||||||Element||new|true|Event||extend|arguments|else|length|||null|document|id|value|Sortable|top|each|update|height|bind|left|scroll|setStyle|width|Draggables|effects|Prototype|getStyle|Position|afterFinishInternal|hide|track|duration|start|px|handles|push|create|parentNode|_controls|Math|position|Class|case|_form|initialize|Ajax|map|values|handle|appendChild|window|break|show|transform|editor|range|opacity|index|for|to|observe|scrollSpeed|stop|active||createElement|down|round|sync|from|moveY|tree|parseInt|typeof|delay|queue|transition|Base|Move|Droppables|last_active|externalControl|Browser|Transitions|get|method|makePositioned|Scale|restoreAfterFinish|overlap|bindAsEventListener|scrollSensitivity|dragging|allowedValues|1000|flatten|100|end|indexOf|dims|bottom|addClassName|unit|originalValue|tracks|match|render|event|Opacity|scaleX|scaleContent|scaleMode|hoverclass|stopObserving|activeDraggable|_lastScrollPointer|tokens|onComplete|throw|table|select|toUpperCase|innerHTML|tagName|childNodes|getInlineOpacity|max|cancel|parseFloat||color|makeClipping|undoClipping|undoPositioned|snap|onChange|_marker|encodeURIComponent|entryCount|substr|url|InPlaceEditor|onFailure|disabled|src|_|parseColor|toLowerCase|name|none|remove|isString|startOn|finishOn|absolute|offsetHeight|cumulativeOffset|removeClassName|activate|onHover|eventMouseDown|ghosting|documentElement|format|iefix|parameters|isVertical|undefined|replace|Builder|in|slice|fontSize|sinoidal|DefaultOptions|beforeSetup|finish|emptyFunction|scaleFrom|offsetWidth|opera|initialMoveY|targetValue|containment|Draggable|reverteffect|endeffect|zindex||scrollTop|keyCode|constraint|body|only|Autocompleter|getEntry|_oldInnerHTML|spans|Sound|script|js|object|div|className|_text|join|String|prototype|while|_elementDoesNotExistError|IE|insertBefore|isFunction|add|state|loop|reject|setup|Parallel|backgroundColor|include|key|drops|pointerX|pointerY|drags|observers|eventMouseUp|endDrag|eventMouseMove|setTimeout|_lastPointer|quiet|starteffect|mousedown|destroy|tag_name|scrollLeft|observer|lastValue|tag|findElements|children|hasFocus|paramName|selected|callback|formId|loadTextURL|triggerCallback||ajaxOptions|_collection|activeHandleIdx|activeHandle|translateToPx|Scriptaculous|Methods|firstChild|createTextNode|attribute|strip|toColorPart|WebKit|effect|scope|global|interval|with|codeForEvent|pos|inspect|getOpacity|originalLeft|originalTop|scaleY|size|test|originalHeight|originalWidth|display|offset|getDimensions|cleanWhitespace|right|getStyles|zIndex|styles|_containers|accept|isParent|deactivate|_timeout|focus|notify|_dragging|delta|draw|finishDrag|vertical|serialize|sortables|droppables|li|treeTag|offsetSize|changed|oldElementValue|min|Request|responseText|_boundSubmitHandler|rows|okControl|cancelControl|_saving|hoverClassName|loadingClassName||fallback|highlightColor|timer|setValue|type|split|getElementsByTagName|_isStringOrNumber|attr|charAt|collectTextNodes|collectTextNodesIgnoreClass|cos|PI|Appear|Date|switch|Queues|set|Internal|afterSetup|property|scaleFromCenter|Highlight|startcolor|background|endcolor|restorecolor|elementOffsets|clientHeight|direction|center|moveTransition|scaleTransition|opacityTransition|transforms|CSS_PROPERTIES|styleRules|isArray|deepest|detect|affected|prepare|updateDrag|keyPress|mouseup|mousemove|abs|_opacity|currentDelta|startDrag|_clone|_originallyAbsolute|_getWindowScroll|change|visibility|hidden|scrollInterval|findChildren|container||indicator|selectEntry|getUpdatedChoices|autocompleteIndex|updateElement|getTokenBounds|tokenBounds|getToken|nextTokenPos|strong|inplaceeditor|externalControlOnly|_originalBackground|_boundCancelHandler|_boundFailureHandler|_editing|Control|button|link|getText|loadExternalText|addText|editorId|leaveHover|startSpan|endSpan|maximum|alignX|alignY|handleLength|initialized|getRange|setSpan|_enabled|sound_|text|REQUIRED_PROTOTYPE|load|convertVersionString|aculo|us|requires|OPTION|node|try|catch|_children|ATTR_MAP|LI|concat|collect|nodeType|nodeValue|hasChildNodes|scrollBy|forceRerendering|zoom|PAIRS|appear|Fade|limit|idle|instances|currentFrame|afterFinish|frame|currentStyle|box|originalStyle|oldStyle|keepBackgroundImage|ffffff|_base|inject|scrollOffsets|viewport|scrollTo|0px|Morph|play|__parseStyleElement|defaultView|substring|isUndefined|treeNode|isAffected|eventKeypress|clearTimeout|_cacheObserverCallbacks|onStart|onEnd|onDrag|revert|_isScrollChild|originalScrollLeft|originalScrollTop|stopScrolling|delete|KEY_ESC|horizontal|lastScrolled|clientWidth|draggables|ul|mark|_tree|parent|callee|baseInitialize|setOptions|frequency|minChars|onShow|clone|onHide|stopIndicator|KEY_RETURN|updateChoices|defaultParams|array|choices|ignoreCase|Field|handleFormCancellation|handleFormSubmission|_boundWrapperHandler|wrapUp|createControl|createEditField|loadingText|cols|onFormCustomization|leaveEditMode|postProcessEditField|savingClassName|removeForm|onSuccess|stripTags|_listeners|InPlaceCollectionEditor|checkForExternalText|showLoadingText|buildOptionList|highlightEndColor|_effect|axis|restricted|minimum|trackLength|sliderValue|updateStyles|updateFinished|translateToValue|offsetX|offsetY|template|navigator|Version|require|javascript|the|z0|findAll|NODEMAP|AREA|CAPTION|COL|COLGROUP|LEGEND|OPTGROUP|PARAM|TBODY|TD|TFOOT|TH|THEAD|TR|Array|_attributes|class|string|BODY|BUTTON|DIV|INPUT|SELECT|TEXTAREA|setContentZoom|removeChild|linear|flicker|pulse|floor|full|fps|relative|speed|SlideDown|SlideUp|BlindDown|BlindUp|ScopedQueue|_each||getTime|last|pluck|setInterval|clearInterval|len|fromToDelta|totalTime|totalFrames|eval|running|beforeFinish|invoke|Tween|hasLayout|setOpacity|mode|scaleTo|elementPositioning|offsetTop|pt|fontSizeType|factor|setDimensions|ffff99|backgroundImage|_delta|getScrollOffsets|absolutize|distance|afterUpdateInternal|parseStyle|transparent|zzzzzz|CSS_LENGTH|camelize|isNaN|addTracks|first|ids|getComputedStyle|klass|including|library|findDeepestChild|isContained|classNames|within|fire|onDrop|reset|register|keypress|unregister|addObserver|removeObserver|Count|_draggable|initDrag|isLeftClick|originalZ|deltaX|deltaY|startScrolling|onDropped||innerWidth|SortableObserver|unmark|SERIALIZE_RULE|_findRootElement|dropOnEmpty|elements|onUpdate|onEmptyHover|findTreeElements|after|dropmarker|_constructIndex|sequence|onBlur|keydown|onKeyPress|After|iframe|_iefix|fixIEOverlapping|startIndicator|KEY_TAB|markPrevious|markNext|onObserverEvent|findElement|onClick|scrollIntoView|getCurrentEntry|afterUpdateElement|addObservers|mouseover|click|getFirstDifferencePos|selector|partialSearch|partialChars|fullSearch|scrollFreeActivate|prepareOptions|dealWithDeprecatedOptions|clickToEditText|_boundComplete|handleAJAXFailure|registerListeners|checkForEscapeOrReturn|input|editor_|onclick|textarea|autoRows|submitOnBlur|createForm|form|formClassName||ok|unregisterListeners|enterEditMode|onEnterEditMode|enterHover|onEnterHover|prepareSubmission|htmlResponse|onLeaveEditMode|onLeaveHover|stripLoadedTextTags|fieldPostCreation|DefaultCallbacks|_extraDefaultOptions|showSaving|Listeners|savingText|dispose|super|collection|loadCollectionURL|loadCollection|loadingCollectionText|option|cancelLink|cancelButton|okLink|okButton|Loading|Form|delayedListener|onTimerEvent|increment|step|maximumOffset|minimumOffset|setDisabled|sortBy|getNearestValue|drawSpans|onSlide|Template|autostart|Stop|plugins|write|100000|JavaScript|framework|proto|scripta|culous|without|fieldset|instanceof|htmlFor|toString|escapeHTML|gsub|quot|number|build|dump||ABBR|ACRONYM|ADDRESS|APPLET|BASE|BASEFONT|BDO|BIG|BLOCKQUOTE|BR|CENTER|CITE|CODE|DD|DEL|DFN|DIR|DL|DT|EM|FIELDSET|FONT|FORM|FRAME|FRAMESET|H1|H2|H3|H4|H5|H6|HEAD|HR|HTML|IFRAME|IMG|INS|ISINDEX|KBD|LABEL|LINK|MAP|MENU|META|NOFRAMES|NOSCRIPT|OBJECT|OL|PRE|SAMP|SCRIPT|SMALL|SPAN|STRIKE|STRONG|STYLE|SUB|SUP|TABLE||TITLE|TT|UL|VAR|apply|rgb|hasClassName|ElementDoesNotExistError|message|The||specified|DOM|does|not|exist|but|is|required|operate|reverse|random|wobble|spring|exp|parallel|tagifyText|toArray|span|fromCharCode|160|multiple|slide|blind|toggle|visible|Enumerable|front|Queue|beforeUpdate|afterUpdate|beforeStart|finished|MoveBy|offsetLeft|font|content|scrollHeight|scrollWidth|image|ScrollTo|getHeight|Puff|200|beforeSetupInternal|SwitchOff|DropOut|Shake|Squish|Grow|01|Shrink|beforeStartInternal|Pulsate|pulses|Fold|rgba|toFixed|Transform|keys|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|mm|pc|morph|visualEffect|dasherize|highlight|fade|grow|shrink|fold|blindUp|blindDown|slideUp|slideDown|pulsate|shake|puff|squish|switchOff|dropOut|addMethods|dragdrop|greedy|sqrt|02|isNumber|outerHTML|childOf|cloneNode|page|relativize|failure|realOffset|innerHeight|Za|before|previousSibling|nextSibling|item|continue|setSequence|Height|Width|controls|setHeight|setAttribute|autocomplete|off|blur|Insertion|filter|progid|DXImageTransform|Microsoft|Alpha|frameborder|scrolling|no|setTop|KEY_LEFT|KEY_RIGHT|KEY_UP|KEY_DOWN|250|informal|autoSelect|empty|lastIndexOf|asynchronous|Local|title|ctrlKey|altKey|shiftKey|Text|submit|_button|href|_link|editor_field|onblur|Controls|onsubmit|Before|Between|editor_cancel|toQueryParams|evalScripts|Updater|success|compact|Server|returned|invalid|representation|stripScripts|any|highlightcolor|highlightendcolor|cancelText|Click|edit|loading|okText|saving|Saving|textAfterControls|textBeforeControls|textBetweenControls|alert|Error|communication|server|mouseout|DelayedObserver|keyup|Slider|setEnabled|setValueBy|embed|enable|disable|insert|bgsound|evaluate|Gecko|userAgent|Win|QuickTime|audio|mpeg|data'.split('|'),0,{}))

// this function is needed to work around 
  // a bug in IE related to element attributes
  function hasClass(obj) {
     var result = false;
     if (obj.getAttributeNode("class") != null) {
         result = obj.getAttributeNode("class").value;
     }
     return result;
  }   

 function stripe(id) {

    // the flag we'll use to keep track of 
    // whether the current row is odd or even
    var even = false;
  
    // if arguments are provided to specify the colours
    // of the even & odd rows, then use the them;
    // otherwise use the following defaults:
    var evenColor = arguments[1] ? arguments[1] : "#fff";
    var oddColor = arguments[2] ? arguments[2] : "#eee";
  
    // obtain a reference to the desired table
    // if no such table exists, abort
    var table = document.getElementById(id);
    if (! table) { return; }
    
    // by definition, tables can have more than one tbody
    // element, so we'll have to get the list of child
    // &lt;tbody&gt;s 
    var tbodies = table.getElementsByTagName("tbody");

    // and iterate through them...
    for (var h = 0; h < tbodies.length; h++) {
    
     // find all the &lt;tr&gt; elements... 
      var trs = tbodies[h].getElementsByTagName("tr");
      
      // ... and iterate through them
      for (var i = 0; i < trs.length; i++) {

        // avoid rows that have a class attribute
        // or backgroundColor style
        if (! hasClass(trs[i]) &&
            ! trs[i].style.backgroundColor) {
 		  
          // get all the cells in this row...
          var tds = trs[i].getElementsByTagName("td");
        
          // and iterate through them...
          for (var j = 0; j < tds.length; j++) {
        
            var mytd = tds[j];

            // avoid cells that have a class attribute
            // or backgroundColor style
            if (! hasClass(mytd) &&
                ! mytd.style.backgroundColor) {
        
              mytd.style.backgroundColor = even ? evenColor : oddColor;
            
            }
          }
        }
        // flip from odd to even, or vice-versa
        even =  ! even;
      }
    }
  }
  
  
function tableruler() {
	if (document.getElementById && document.createTextNode) {
		var tables=document.getElementsByTagName ('table');
		for (var i=0;i<tables.length;i++) {
			var clasesTable = tables[i].className.split(" ");
			if(clasesTable[0]=='ruler') {
				var trs=tables[i].getElementsByTagName('tr');
				for(var j=0;j<trs.length;j++) {
					if(trs[j].parentNode.nodeName=='TBODY' && trs[j].parentNode.nodeName!='TFOOT') {
						trs[j].onmouseover=function(){Element.addClassName(this,'ruled');return false}
						trs[j].onmouseout=function(){Element.removeClassName(this,'ruled');return false}
					}
				}
			}
		}
	}
}

// Copyright (c) 2006 SÃƒÂ©bastien Gruhier (http://xilinus.com, http://itseb.com)
// 
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
// 
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// VERSION 1.0

Position.windowInfo = function() {
  var windowWidth, windowHeight;
  var pageWidth, pageHeight;
  
  if (window.innerHeight && window.scrollMaxY) {  
    pageWidth = document.body.scrollWidth;
    pageHeight = window.innerHeight + window.scrollMaxY;
  } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
    pageWidth = document.body.scrollWidth;
    pageHeight = document.body.scrollHeight;
  } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
    pageWidth = document.body.offsetWidth;
    pageHeight = document.body.offsetHeight;
  }
  
  if (self.innerHeight) { // all except Explorer
    windowWidth = self.innerWidth;
    windowHeight = self.innerHeight;
  } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
    windowWidth = document.documentElement.clientWidth;
    windowHeight = document.documentElement.clientHeight;
  } else if (document.body) { // other Explorers
    windowWidth = document.body.clientWidth;
    windowHeight = document.body.clientHeight;
  } 
  var xScroll = document.documentElement.scrollLeft || document.body.scrollLeft;
  var yScroll = document.documentElement.scrollTop || document.body.scrollTop;

  // for small pages with total height less then height of the viewport
  pageHeight = Math.max(windowHeight, pageHeight);

  // for small pages with total width less then width of the viewport
  pageWidth = Math.max(windowWidth, pageWidth);
  return { width: windowWidth, height: windowHeight, pageWidth: pageWidth, pageHeight: pageHeight, xScroll: xScroll, yScroll: yScroll};
}

var TransparentMenu = Class.create();

TransparentMenu.DefaultOptions = {
  top: null,
  left: null,
  showEffect: Effect.Appear,
  showEffectOptions: {duration: 0.2}, 
  hideEffect: Effect.Fade,
  hideEffectOptions: {duration: 0.2},
  showMode: "onload",
  hideMode: "timeout",
  hideDelay: 2,
  insideElement: {id: null, width: "auto", height: "auto"},
  afterElement: null,
  fullscreen: false
}
TransparentMenu.instances = $H();

TransparentMenu.hide = function(id) {
  if (TransparentMenu.instances[id])
    TransparentMenu.instances[id].hide();
}

TransparentMenu.show = function(id) {
  if (TransparentMenu.instances[id]) 
    TransparentMenu.instances[id].show();
  else 
    new TransparentMenu(id,  arguments[1]);
}

TransparentMenu.prototype = {
	initialize: function(id) {
	  this.options  = Object.extend(Object.extend({},TransparentMenu.DefaultOptions), arguments[1] || {});   
	  this.options.insideElement =  Object.extend(Object.extend({},TransparentMenu.DefaultOptions.insideElement), this.options.insideElement || {});   
		this.id = id;

		if (this.options.displayMode == "onload")
	    Event.observe(window, "load", this._init.bindAsEventListener(this));
	  else
	    this._init(null);
	  TransparentMenu.instances[id] = this;
  },
  
  show: function() {
    new this.options.showEffect(this.element, this.options.showEffectOptions);

    // Safari bug fix
    if (navigator.appVersion.match(/Konqueror|Safari|KHTML/))
      setTimeout(this._setPostion.bindAsEventListener(this), 10)

	
    if (this.options.hideMode == "timeout") {
      setTimeout(this.hide.bindAsEventListener(this), this.options.hideDelay*1000);
    }else if (this.options.hideMode == "click" || this.options.hideMode == "mousemove") {
      this.bindEvent = this._startHideEvent.bindAsEventListener(this);
      Event.observe(this.element, this.options.hideMode, this.bindEvent);      
    }    
  },
    
  hide: function() { 
    new this.options.hideEffect(this.element, this.options.hideEffectOptions);
  },
    
  _init: function(event) {
    this.element = $(this.id);
    this._setPostion();
    
    // Get opacity from css if not specify for Fade effect
    if (Element.getOpacity(this.element) && this.options.showEffect == Effect.Appear && ! this.options.showEffectOptions.to)
      this.options.showEffectOptions.to = Element.getOpacity(this.element);
     
    this.show(); 
  },
  
  _setPostion: function() {
    var windowInfo = Position.windowInfo();
    var dim = this.element.getDimensions();

    // Inside an element
    if (this.options.insideElement.id != null) {    
      var relativeElement = $(this.options.insideElement.id);
      var position = Position.cumulativeOffset(relativeElement);
      var dimension = relativeElement.getDimensions();
      this.element.style.left = position[0] + "px";
      this.element.style.top = position[1] + "px";

      if (this.options.insideElement.width == 'auto') {
        this.element.style.width =  dimension.width + "px";
      }
      if (this.options.insideElement.height == 'auto')
        this.element.style.height = dimension.height + "px";
    }
    // Else full screen message
    else if (this.options.fullscreen) { 
      this.element.style.left = "0px";
      this.element.style.top = "0px";
      this.element.style.width = windowInfo.pageWidth + "px";
      this.element.style.height = windowInfo.pageHeight + "px";
    }
    // Relative to body or element
    else {
      var dy = 0;  		
      // Relative to an element
      if (this.options.afterElement != null) {
        var position = Position.cumulativeOffset($(this.options.afterElement));
        dy =  position[1];
      }
      // Else to body, add yScroll to have it visible from anywhere
      else
        dy = windowInfo.yScroll;
        
      // Compute left position using user options
      if (this.options.left != null)
        this.element.style.left = windowInfo.xScroll + this.options.left + "px";
      else
        this.element.style.left = windowInfo.xScroll + ((windowInfo.width - dim.width) / 2 ) + "px";
      
      // Compute top position useing user options
      if (this.options.top != null)
        this.element.style.top = dy + this.options.top + "px";
      else
        this.element.style.top = dy + ((windowInfo.height - dim.height) / 2 ) + "px";
    }
  },
  
  _startHideEvent: function() {
    var dim = this.element.getDimensions();
    Event.stopObserving(window, this.options.hideMode, this.bindEvent);      
    setTimeout(this.hide.bindAsEventListener(this), 0);
  }
}


// Copyright (c) 2006 SÃ©bastien Gruhier (http://xilinus.com, http://itseb.com)
// 
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
// 
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// VERSION 0.96.2

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

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

		this.destroyOnClose = false;

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

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

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

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

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

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

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

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

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

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

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

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

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

  		this.toFront();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  	var windowWidth, windowHeight;

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

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

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

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

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

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

		var pageSize = WindowUtilities.getPageSize();

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

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

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

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

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

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

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




/*
   Behaviour v1.0 by Ben Nolan, June 2005. Based largely on the work
   of Simon Willison (see comments by Simon below).

   Description:
   	
   	Uses css selectors to apply javascript behaviours to enable
   	unobtrusive javascript in html documents.
   	
   Usage:   
   
	var myrules = {
		'b.someclass' : function(element){
			element.onclick = function(){
				alert(this.innerHTML);
			}
		},
		'#someid u' : function(element){
			element.onmouseover = function(){
				this.innerHTML = "BLAH!";
			}
		}
	);
	
	Behaviour.register(myrules);
	
	// Call Behaviour.apply() to re-apply the rules (if you
	// update the dom, etc).

   License:
   
   	My stuff is BSD licensed. Not sure about Simon's.
   	
   More information:
   	
   	http://ripcord.co.nz/behaviour/
   
*/   

var Behaviour = {
	list : new Array,
	
	register : function(sheet){
		Behaviour.list.push(sheet);
	},
	
	start : function(){
		Behaviour.addLoadEvent(function(){
			Behaviour.apply();
		});
	},
	
	apply : function(){
		for (h=0;sheet=Behaviour.list[h];h++){
			for (selector in sheet){
				list = document.getElementsBySelector(selector);
				
				if (!list){
					continue;
				}

				for (i=0;element=list[i];i++){
					sheet[selector](element);
				}
			}
		}
	},
	
	addLoadEvent : function(func){
		var oldonload = window.onload;
		
		if (typeof window.onload != 'function') {
			window.onload = func;
		} else {
			window.onload = function() {
				oldonload();
				func();
			}
		}
	}
}

Behaviour.start();

/*
   The following code is Copyright (C) Simon Willison 2004.

   document.getElementsBySelector(selector)
   - returns an array of element objects from the current document
     matching the CSS selector. Selectors can contain element names, 
     class names and ids and can be nested. For example:
     
       elements = document.getElementsBySelect('div#main p a.external')
     
     Will return an array of all 'a' elements with 'external' in their 
     class attribute that are contained inside 'p' elements that are 
     contained inside the 'div' element which has id="main"

   New in version 0.4: Support for CSS2 and CSS3 attribute selectors:
   See http://www.w3.org/TR/css3-selectors/#attribute-selectors

   Version 0.4 - Simon Willison, March 25th 2003
   -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows
   -- Opera 7 fails 
*/

function getAllChildren(e) {
  // Returns all children of element. Workaround required for IE5/Windows. Ugh.
  return e.all ? e.all : e.getElementsByTagName('*');
}

document.getElementsBySelector = function(selector) {
  // Attempt to fail gracefully in lesser browsers
  if (!document.getElementsByTagName) {
    return new Array();
  }
  // Split selector in to tokens
  var tokens = selector.split(' ');
  var currentContext = new Array(document);
  for (var i = 0; i < tokens.length; i++) {
    token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');;
    if (token.indexOf('#') > -1) {
      // Token is an ID selector
      var bits = token.split('#');
      var tagName = bits[0];
      var id = bits[1];
      
      var element = document.getElementById(id);
      if (tagName && element.nodeName.toLowerCase() != tagName) {
        // tag with that ID not found, return false
        return new Array();
      }
      // Set currentContext to contain just this element
      currentContext = new Array(element);
      continue; // Skip to next token
    }
    if (token.indexOf('.') > -1) {
      // Token contains a class selector
      var bits = token.split('.');
      var tagName = bits[0];
      var className = bits[1];
      if (!tagName) {
        tagName = '*';
      }
      // Get elements matching tag, filter them for class selector
      var found = new Array;
      var foundCount = 0;
      for (var h = 0; h < currentContext.length; h++) {
        var elements;
        if (tagName == '*') {
            elements = getAllChildren(currentContext[h]);
        } else {
            elements = currentContext[h].getElementsByTagName(tagName);
        }
        for (var j = 0; j < elements.length; j++) {
          found[foundCount++] = elements[j];
        }
      }
      currentContext = new Array;
      var currentContextIndex = 0;
      for (var k = 0; k < found.length; k++) {
        if (found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b'))) {
          currentContext[currentContextIndex++] = found[k];
        }
      }
      continue; // Skip to next token
    }
    // Code to deal with attribute selectors
    if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {
      var tagName = RegExp.$1;
      var attrName = RegExp.$2;
      var attrOperator = RegExp.$3;
      var attrValue = RegExp.$4;
      if (!tagName) {
        tagName = '*';
      }
      // Grab all of the tagName elements within current context
      var found = new Array;
      var foundCount = 0;
      for (var h = 0; h < currentContext.length; h++) {
        var elements;
        if (tagName == '*') {
            elements = getAllChildren(currentContext[h]);
        } else {
            elements = currentContext[h].getElementsByTagName(tagName);
        }
        for (var j = 0; j < elements.length; j++) {
          found[foundCount++] = elements[j];
        }
      }
      currentContext = new Array;
      var currentContextIndex = 0;
      var checkFunction; // This function will be used to filter the elements
      switch (attrOperator) {
        case '=': // Equality
          checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
          break;
        case '~': // Match one of space seperated words 
          checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };
          break;
        case '|': // Match start with value followed by optional hyphen
          checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
          break;
        case '^': // Match starts with value
          checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
          break;
        case '$': // Match ends with value - fails with "Warning" in Opera 7
          checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
          break;
        case '*': // Match ends with value
          checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };
          break;
        default :
          // Just test for existence of attribute
          checkFunction = function(e) { return e.getAttribute(attrName); };
      }
      currentContext = new Array;
      var currentContextIndex = 0;
      for (var k = 0; k < found.length; k++) {
        if (checkFunction(found[k])) {
          currentContext[currentContextIndex++] = found[k];
        }
      }
      // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);
      continue; // Skip to next token
    }
    
    if (!currentContext[0]){
    	return;
    }
    
    // If we get here, token is JUST an element (not a class or ID selector)
    tagName = token;
    var found = new Array;
    var foundCount = 0;
    for (var h = 0; h < currentContext.length; h++) {
      var elements = currentContext[h].getElementsByTagName(tagName);
      for (var j = 0; j < elements.length; j++) {
        found[foundCount++] = elements[j];
      }
    }
    currentContext = found;
  }
  return currentContext;
}

/* That revolting regular expression explained 
/^(\w+)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/
  \---/  \---/\-------------/    \-------/
    |      |         |               |
    |      |         |           The value
    |      |    ~,|,^,$,* or =
    |   Attribute 
   Tag
*/


/*
Copyright (c) 2005 JSON.org

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The Software shall be used for Good, not Evil.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

/*
    The global object JSON contains two methods.

    JSON.stringify(value) takes a JavaScript value and produces a JSON text.
    The value must not be cyclical.

    JSON.parse(text) takes a JSON text and produces a JavaScript value. It will
    return false if there is an error.
*/
var JSON = function () {
    var m = {
            '\b': '\\b',
            '\t': '\\t',
            '\n': '\\n',
            '\f': '\\f',
            '\r': '\\r',
            '"' : '\\"',
            '\\': '\\\\'
        },
        s = {
            'boolean': function (x) {
                return String(x);
            },
            number: function (x) {
                return isFinite(x) ? String(x) : 'null';
            },
            string: function (x) {
                if (/["\\\x00-\x1f]/.test(x)) {
                    x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) {
                        var c = m[b];
                        if (c) {
                            return c;
                        }
                        c = b.charCodeAt();
                        return '\\u00' +
                            Math.floor(c / 16).toString(16) +
                            (c % 16).toString(16);
                    });
                }
                return '"' + x + '"';
            },
            object: function (x) {
                if (x) {
                    var a = [], b, f, i, l, v;
                    if (x instanceof Array) {
                        a[0] = '[';
                        l = x.length;
                        for (i = 0; i < l; i += 1) {
                            v = x[i];
                            f = s[typeof v];
                            if (f) {
                                v = f(v);
                                if (typeof v == 'string') {
                                    if (b) {
                                        a[a.length] = ',';
                                    }
                                    a[a.length] = v;
                                    b = true;
                                }
                            }
                        }
                        a[a.length] = ']';
                    } else if (x instanceof Object) {
                        a[0] = '{';
                        for (i in x) {
                            v = x[i];
                            f = s[typeof v];
                            if (f) {
                                v = f(v);
                                if (typeof v == 'string') {
                                    if (b) {
                                        a[a.length] = ',';
                                    }
                                    a.push(s.string(i), ':', v);
                                    b = true;
                                }
                            }
                        }
                        a[a.length] = '}';
                    } else {
                        return;
                    }
                    return a.join('');
                }
                return 'null';
            }
        };
    return {
        copyright: '(c)2005 JSON.org',
        license: 'http://www.JSON.org/license.html',
/*
    Stringify a JavaScript value, producing a JSON text.
*/
        stringify: function (v) {
            var f = s[typeof v];
            if (f) {
                v = f(v);
                if (typeof v == 'string') {
                    return v;
                }
            }
            return null;
        },
/*
    Parse a JSON text, producing a JavaScript value.
    It returns false if there is a syntax error.
*/
        parse: function (text) {
            try {
                return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
                        text.replace(/"(\\.|[^"\\])*"/g, ''))) &&
                    eval('(' + text + ')');
            } catch (e) {
                return false;
            }
        }
    };
}();

// Copyright (c) 2006 SÃ©bastien Gruhier (http://xilinus.com, http://itseb.com)
// 
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
// 
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// VERSION 0.25

var Carousel = Class.create();
Carousel.prototype = {
  // Constructor
  initialize: function(carouselElemID) {
    this.carouselElemID = carouselElemID;
    
    this.options = Object.extend({
      numVisible:           4,
      scrollInc:            3,
      animParameters:      {},
      buttonStateHandler:  null,
      animHandler:         null,
      ajaxHandler:         null,
      initDoneHandler:     null,
      queue:               "carousel",
      size:                0,
      prevElementID:       "prev-arrow",
      nextElementID:       "next-arrow",
      ajaxParameters:      null,
      url:                 null
		}, arguments[1] || {});

		this.initDone = false;
		this.animRunning = "none";
    this.requestIsRunning = false;
    
		// add afterFinish options to animParameters (store old function)
		this.animAfterFinish = this.options.animParameters.afterFinish;
		Object.extend(this.options.animParameters, {afterFinish:  this._animDone.bind(this), queue: { position:'end', scope: this.options.queue }});
	  
		// Event bindings
		this.prevScroll = this._prevScroll.bindAsEventListener(this);
		this.nextScroll = this._nextScroll.bindAsEventListener(this);
		this.onComplete = this._onComplete.bindAsEventListener(this);
		this.onFailure  = this._onFailure.bindAsEventListener(this);

		Event.observe(this.options.prevElementID, "click", this.prevScroll);
		Event.observe(this.options.nextElementID, "click", this.nextScroll);
		
		// Get DOM UL element
		var carouselListClass = "carousel-list";
		this.carouselList = document.getElementsByClassName(carouselListClass, $(carouselElemID))[0]
		
		// Init data
		this._init();
  },
  
  // Destructor
 	destroy: function() {
  	Event.stopObserving(this.options.prevElementID, "click", this.prevScroll);
  	Event.stopObserving(this.options.nextElementID, "click", this.nextScroll);
	},
	
	scrollTo: function(newStart) {
		var old_inc = this.options.scrollInc;
		this.ignoreNoMoreImages = true;
		if(newStart > this.currentIndex) {
			this.options.scrollInc = newStart - this.currentIndex;
			this._nextScroll(this);
		} else {
			this.options.scrollInc = this.currentIndex - newStart;
			this._prevScroll(this);
		}
    this.options.scrollInc = old_inc;
	},
	
  /* "Private" functions */
  _init: function() {
    this.currentIndex = 0;
    
      
    // Ajax content
    if (this.options.url)
  	  this._request(this.currentIndex, this.options.numVisible);
	  // Static content
  	else {
  	  this._getLiElementSize();
  		this._updateButtonStateHandler(this.options.prevElementID, false);
  		this._updateButtonStateHandler(this.options.nextElementID, this.options.size > this.options.numVisible);
  	}
  },
  
  _prevScroll: function(event) {
    if (this.animRunning != "none" || this.currentIndex == 0)
      return;

    var inc = this.options.scrollInc;

    if (this.currentIndex - inc < 0)
      inc = this.currentIndex;

    this._scroll(inc)		  
	  return false;
  },
  
  _nextScroll: function(event) {    
    if (this.animRunning != "none")
      return false;
            
    // Check if there are enough elements in cache
    if (this.currentIndex + this.options.numVisible + this.options.scrollInc <= this.options.size) 
      this._scroll(-this.options.scrollInc);
    else {
      // Compute how many are in the cache
      this.nbInCache = this.options.size - (this.currentIndex + this.options.numVisible);
      if (this.options.url && this.noMoreImages == false) 
		    this._request(this.currentIndex + this.options.numVisible + this.nbInCache, this.options.scrollInc - this.nbInCache);
	    else  {
	      if (this.nbInCache > 0)
          this._scroll(-this.nbInCache);
        }
	  }
	  return false;
  },
  
  _request: function(start, nb) {
    if (this.options.url && ! this.requestIsRunning) {
      this.requestIsRunning = true;
      
      if (this.options.ajaxHandler)
        this.options.ajaxHandler(this, "before");
      
      var params = "start=" + start + "&nb=" + nb;
      if (this.options.ajaxParameters != null)
        params += "&" + this.options.ajaxParameters
      
  		new Ajax.Request(this.options.url, {parameters: params, onComplete: this.onComplete, onFailure: this.onFailure});
		}
  },
  
  _onComplete: function(originalRequest){
    this.requestIsRunning = false;
    this.carouselList.innerHTML += originalRequest.responseText;
    // Compute how many new elements we have
    var size = this.options.size;
    this.options.size = this.carouselList.getElementsByTagName("li").length;
    var inc = this.options.size - size;
    
		// First run, compute li size
		if (this.initDone == false) {
  		this._getLiElementSize()
  		this.currentIndex = 0;
  		this.initDone = true;
      if (this.options.initDoneHandler) 
        this.options.initDoneHandler(this);
         
  		// Update button states
		  this._updateButtonStateHandler(this.options.prevElementID, false);
		  this._updateButtonStateHandler(this.options.nextElementID, this.options.size == this.options.numVisible);
		  this.noMoreImages = this.options.size < this.options.numVisible
		}
		// Add images
		else {
		  if (!this.ignoreNoMoreImages)
		    this.noMoreImages = inc != this.options.scrollInc;
		  else
		    this.ignoreNoMoreImages = false;
		  // Add images
		  if (inc > 0) {
        this._scroll(-inc, this.noMoreImages)
      }
      // No more images, disable next button
		  else {
		    if (this.nbInCache >0)
          this._scroll(-this.nbInCache, true);
		    
		    this._updateButtonStateHandler(this.options.nextElementID, false);
	    }
		}
		if (this.options.ajaxHandler)
      this.options.ajaxHandler(this, "after");
  },
  
  _onFailure: function(originalRequest){    
    this.requestIsRunning = false;
  },

  _animDone: function(event){   
    if (this.options.animHandler)
      this.options.animHandler(this.carouselElemID, "after", this.animRunning);
     
    this.animRunning = "none";
    // Call animAfterFinish if exists
    if (this.animAfterFinish)
      this.animAfterFinish(event);
  },
  
  _updateButtonStateHandler: function(button, state) {
		if (this.options.buttonStateHandler) 
		    this.options.buttonStateHandler(button, state)
   },
  
  _scroll: function(delta, forceDisableNext) {      
    this.animRunning = delta > 0 ? "prev" : "next";
    
    if (this.options.animHandler)
      this.options.animHandler(this.carouselElemID, "before", this.animRunning);

    new Effect.MoveBy(this.carouselList, 0, delta * this.elementSize, this.options.animParameters);
    this.currentIndex -= delta;
    this._updateButtonStateHandler(this.options.prevElementID, this.currentIndex != 0);
    
    if (this.options.url && this.noMoreImages == false)
      enable = true;
    else
      enable = (this.currentIndex + this.options.numVisible < this.options.size);
    this._updateButtonStateHandler(this.options.nextElementID, (forceDisableNext ? false : enable));
  },
  
  _getLiElementSize: function() {
    var li = $(this.carouselList.getElementsByTagName("li")[0]);
		this.elementSize = li.getDimensions().width + parseFloat(li.getStyle("margin-left")) + + parseFloat(li.getStyle("margin-right"));
  }
}
	





/****************************************************
 * Funciones de submit
 ****************************************************/

function FormSubmitter(formName, formCbs)
{
	this.formName = formName;
	this.form = document[formName];
	this.formCbs = formCbs;
}

function bloqueaWindow(){
	Dialog.info(MENSAJES['enviando_datos'],
               {windowParameters: {className:"alphacube",width:250, height:100},showEffectOptions:{duration:0.2}, showProgress: true});
}
/**
 * Comproba los datos antes de ejecutar la acción.
 * Se suele utilizar para modificar un registro desde la ficha.
 */
FormSubmitter.prototype.valida_busca = function(accion)
{
	
	this.form.accion.value = accion;
	this.form.issearch.value = 1;
	oFormCallbacks.validateInServerForm();
	return false;
	
	if (this.formCbs.isValidAlert() && this.formCbs.isCompleteAlert()) {
		this.form.accion.value = accion;
		this.form.issearch.value = 1;
		this.formCbs.submit();
		this.form.submit();
		//return true;
	}
	return false;
}

/**
 * Comproba los datos antes de ejecutar la acción.
 * Se suele utilizar para modificar un registro desde la ficha.
 */
FormSubmitter.prototype.valida_ejecuta = function(accion)
{
	bloqueaWindow();
	this.form.accion.value = accion;
	oFormCallbacks.validateInServerForm();
	return false;
}

/**
 * Comproba los datos antes de ejecutar la acción.
 * Se suele utilizar para modificar un registro desde la ficha.
 */
FormSubmitter.prototype.valida_ejecuta_tab = function(accion,regMatch)
{
	this.form.accion.value = accion;
	oFormCallbacks.validateInServerForm(regMatch);
	return false;
}


/**
 * Ejecuta la acción sin confirmación ni comprobación.
 * Sin pasar el id: se suele utilizar para volver al listado.
 * Pasando el id: Se suele utilizar para ir del listado a una ficha.
 */
FormSubmitter.prototype.ejecuta = function(accion, id)
{
	this.form.accion.value = accion;
	this.form.id.value = id;
	this.form.submit();
	return false;
}

FormSubmitter.prototype.ejecutaInNewWindow = function(accion, id)
{
	var odlAccion = this.form.accion.value;
	var oldId = this.form.id.value;

	this.form.target = "_blank";
	this.form.accion.value = accion;
	this.form.id.value = id;
	this.form.submit();
	this.form.target = "_self";

	this.form.accion.value = odlAccion;
	this.form.id.value = oldId;
	return false;
}


FormSubmitter.prototype.ejecutaInNewWindowNewDest = function(accionNew, id, newUrl)
{
	var odlAccion = this.form.accion.value;
	var oldId = this.form.id.value;
	
	this.form.action = newUrl;
	this.form.target = "_blank";
	this.form.accion.value = accionNew;
	this.form.id.value = id;
	this.form.submit();
	this.form.target = "_self";
	this.form.action = '';
	
	this.form.accion.value = odlAccion;
	this.form.id.value = oldId;
	return false;
}

/**
 * Cambia el target del form.
 */
FormSubmitter.prototype.setTarget = function(dest)
{
	this.form.action = dest;
	
}

/**
 * Pide una confirmación antes de ejecutar la acción.
 * Sin pasar id: Se suele utilizar para eliminar un registro desde la ficha.
 * Pasando un id: Se suele utilizar para eliminar un registro desde el listado.
 */
FormSubmitter.prototype.confirma = function(accion, id)
{
	var accionTest = accion;
	if (accion.indexOf('.') > 0) {
		accionTest = accion.split('.');
		accionTest = accionTest[1];
	}
	
	if (accionTest.substr(0,3) == "del") {
		//"Confirme que desea eliminar el registro.";
		msg = MENSAJES['confirmDel'];
	}
	
	if (accionTest.substr(0,4) == "send") {
		//"Confirme que desea enviar el registro";
		msg = MENSAJES['confirmSend'];
	}
	
	Dialog.confirm(msg, 
		{windowParameters: {className:"alphacube",width:300}, okLabel: "OK", 
		buttonClass: "myButtonClass",
		id: "msgAlert",
		showEffectOptions:{duration:0.2},
		cancel:function(win) {return false;},
		ok:function(win) {s.ejecuta(accion, id); return true;}
		});
	return false;
}


FormSubmitter.prototype.autoSave = function(accion, id)
{

	msg = MENSAJES['confirmAutoSave'];
	
	Dialog.confirm(msg, 
		{windowParameters: {className:"alphacube",width:300}, okLabel: "OK", 
		buttonClass: "myButtonClass",
		id: "msgAlert",
		showEffectOptions:{duration:0.2},
		cancel:function(win) {return false;},
		ok:function(win) {s.valida_ejecuta(accion, id); return true;}
		});
	return false;
}


/**
 * Pide una confirmación antes de eliminar una foto.
 */
FormSubmitter.prototype.eliminar_foto = function(memname)
{
	if ( confirm(MENSAJES['confirmDelFile']) ) {
		this.form.accion.value = "delfoto:" + memname;
		this.form.submit();
	}
}

FormSubmitter.prototype.eliminar_fotoAjax = function(memname)
{
	var msg = MENSAJES['confirmDelFile'];
	var formu = this.form;
	Dialog.confirm(msg, 
		{windowParameters: {className:"alphacube",width:300}, okLabel: "OK", 
		buttonClass: "myButtonClass",
		id: "msgAlert",
		showEffectOptions:{duration:0.2},
		cancel:function(win) {return false;},
		ok:function(win) {
				formu.accion.value = "ajaxDelfoto:" + memname;
				var valsForm = ''; //Form.serialize(document.f);
				valsForm = 'accion=' + "ajaxDelfoto:" + memname;
				valsForm += '&id=' + formu.id.value;
				valsForm += '&' + memname + '=' + formu.elements[memname].value;
				
				var opt = {
						// Use POST
						method: 'post',
						asynchronous:true,
						// Send this lovely data
						postBody: valsForm,
						// Handle successful response
						onSuccess: function(t) {
							document.f.elements[memname].value = 0;
							new Effect.BlindUp('contenedor_' + memname, {duration:0.3});
							new Insertion.Bottom(document.body,t.responseText);
							}
					};
				new Ajax.Request(formu.action, opt);
				return true;
			}
		});
	return false;
}

/**
 * Pide una confirmación antes de eliminar una foto.
 */
FormSubmitter.prototype.eliminar_file = function(memname)
{
	if ( confirm(MENSAJES['confirmDelFile']) ) {
		this.form.accion.value = "delfile:" + memname;
		this.form.submit();
	}
}

FormSubmitter.prototype.eliminar_fileAjax = function(memname)
{
	var msg = MENSAJES['confirmDelFile'];
	var formu = this.form;
	Dialog.confirm(msg, 
		{windowParameters: {className:"alphacube",width:300}, okLabel: "OK", 
		buttonClass: "myButtonClass",
		id: "msgAlert",
		showEffectOptions:{duration:0.2},
		cancel:function(win) {return false;},
		ok:function(win) {
				var oldAccion = formu.accion.value;
				formu.accion.value = "ajaxDelfile:" + memname;
				var valsForm = Form.serialize(document.f);
				valsForm = valsForm.split('accion_').join('boton_');
				formu.accion.value = oldAccion;
				//alert(valsForm);
				var opt = {
						// Use POST
						method: 'post',
						asynchronous:true,
						// Send this lovely data
						postBody: valsForm,
						// Handle successful response
						onSuccess: function(t) {
							//alert(t.responseText);
							document.f.elements['F_' + memname].value = '';
							new Effect.BlindUp('contenedor_' + memname);
							// $('contenedor_' + memname).style.display = 'none';
							
						}
					};
				new Ajax.Request(formu.action, opt);
				return true;
			}
		});
	return false;
}

/**
 * Recarga la página ajustando el orden de la columna 'by'.
 */
FormSubmitter.prototype.paginate = function(by)
{
	var currBy = this.form.orderBy.value;
	if (currBy == by) {
		this.form.orderDir.value =
			(this.form.orderDir.value == 'DESC') ? 'ASC' : 'DESC';
	} else {
		this.form.orderDir.value = 'ASC';
	}
	this.form.orderBy.value = by;
	
	this.form.submit();
}

// pone a 0 el formulario dejando los hidden sin resetear
function resetForm(objForm)
{
	for(var i = 0;i < objForm.elements.length;i ++){
		var obj = objForm.elements[i];
		switch(obj.type){
			case "select-one":
				if(obj.name != 'regsPerPage'){
					obj.selectedIndex = 0;
				}
				break;
			case "select-multiple":
				obj.selectedIndex = -1;
				break;
			case "checkbox":
				obj.checked = false;
				break;
			case "text":
				var hiddenId = obj.id.substr(5,100);
				if($(hiddenId)){
					$(hiddenId).value = '';
				}
				obj.value = "";
				break;
			case "file":
			case "textarea":
				obj.value = "";
				break;
		}
		
	}
	//return true;
}

/****************************************************
 * ChangeCallbacks
 ****************************************************/

/**
 * Colección de callback de cambios en la página
 */
function ChangeCallbacks()
{
	this.cbChange = new Array();
}

/**
 * Adición de un callback de cambio
 *
 * El callback se añade a la colección. Se llamará cada vez
 * que cambia un elemento, aunque no tenga nada que ver con
 * este callback. El callback es el encargado de hacer la
 * diferencia.
 *
 * @param Function un callback definido en la página
 * @param HtmlFormElement 
 */
ChangeCallbacks.prototype.addChangeCallback = function(callback)
{
	var pos = this.cbChange.length;
	this.cbChange[pos] = callback;
}
// Crea un objeto global
var oChangeCallbacks = new ChangeCallbacks();

/**
 * Callback de cambio general
 *
 * Esta función se registra para ser llamada cada vez 
 * que se cambia un elemento del formulario.
 */
function __formHasChanged(el) 
{ 
	if(document.f && document.f.is_modified) { 
		document.f.is_modified.value = 'cambiado'; 
	} 
}
// Registra el callback
oChangeCallbacks.addChangeCallback(__formHasChanged);

/*
function __autoCheck(el)
{
	oFormCallbacks.autoCheck(el.name);
}
oChangeCallbacks.addChangeCallback(__autoCheck);
*/

/**
 * Event Handler para los cambios
 *
 * Se añade a cada elemento del formulario con el código:
 * <input ... onchanged='changed(this)' />
 */
function changed(el)
{
	el = $(el);
	
	var arr = el.name.split("[");
	var	formElementName = arr[0];
	formElementName = formElementName.replace('Out','In');
	if(oFormCallbacks.configMembers[formElementName]){
		oFormCallbacks.configMembers[formElementName].validateInServer();
	}
}

function multiselSelect(elName,onOff)
{
	if(onOff !== false) onOff = true;
	var selFrom = document.f[elName + "[]"];
	var optFrom = selFrom.options;
	for(var f=0; f<optFrom.length; f++) {
		optFrom[f].selected = onOff;
	}
}


// Associated functions

/**
 * Change checkbox state when clicking on its label
 *
 * @param string name of the checkbox
 * @todo add the function in the 'onclick' of the label of the corresponding checkbox
 */
function toggleCheckboxOld(elName) {
	thisCheckbox = document.f[elName];
	thisCheckbox.checked = !(thisCheckbox.checked);
	changed(thisCheckbox);
}

function toggleCheckbox(elName,idDl) {
	if(idDl){
		var thisCheckbox = document.f[elName +'['+idDl+']'];
	}else{
		var thisCheckbox = document.f[elName];
	}
	if(checkItDedolib('applewebkit')){
		thisCheckbox.checked = !(thisCheckbox.checked);
	}
	changed(thisCheckbox);
}
/**
 * Change radio button state when clicking on its label
 *
 * @param string name of the radio button group
 * @param string value of this particular radio button
 */
function setSelectedRadioButton(elName, radioValue) {
	radioArray = document.f[elName];
	if(!radioArray.length) {
		radioArray.checked = true;
		changed(radioArray);
		return;	
	}
	for (i = 0; i < radioArray.length; i++) {
		if (radioArray[i].value == radioValue) {
			radioArray[i].checked = true;
			break;
		}
	}
	changed(radioArray[i]);
}

/**
 * Shows a popup window with a calendar in flash
 *
 * @param string name of the form
 * @param string name of the field to receive the selected date
 */
function showCalendar(form,campo)
{
	var f = (document.forms[form].elements[campo].value);
	fecha = f.split("-");
	d = fecha[0];
	m = fecha[1]-1;
	y = fecha[2];
	win = newWindow('../inc/base/miniCal.php?y='+y+'&m='+m+'&d='+d+'&form='+form+'&campo='+campo,'Calendario',150,150,'');
}

/**
 * Fills the field with a given date
 *
 * @param string name of the form
 * @param string name of the field to receive the date
 * @param mixed date to put into field
 */
function setDate(form,campo,fecha)
{
	elInput = (document.forms[form].elements[campo]);
	
	fecha = fecha.split("-");
	var d = eval(fecha[0]);
	var m = eval(fecha[1]);
	var y = fecha[2];
	if(d<10) d = '0'+d;
	if(m<10) m = '0'+m;
 	elInput.value = d + '-' + m + '-' + y;
	elInput.focus();
	
	if(elInput.onchange){
		elInput.onchange();
	}
}

function getFormValues()
{
	valsForm = {};
	objForm = document.f;
	for(var i = 0;i < objForm.elements.length;i ++){
		var obj = objForm.elements[i];
		switch(obj.type){
			case "select-one":
				val = obj.selectedIndex;
				break;
			case "radio":
				if(obj.checked == true){
					val = obj.value;
				}
				break;
			case "text":
			case "file":
			case "textarea":
				val = obj.value;
				break;
			case "select-multiple":
				numOptions = (obj.options.length);
				valArr = new Array;
				for (z = 0; z < numOptions; z++) {
					valArr[z] = obj.options[z].text;
				}
				val = valArr;
				break;
			default:
				val = null;
				break;
		}
		
		if(val != null){
			valsForm[obj.name] = val;
		}
	}
	return valsForm;
}

function checkFormChanges()
{
	newValuesForm = getFormValues();
	var formChanges = new Array;
	for (var i in oldValuesForm){
		if(oldValuesForm[i] != newValuesForm[i]){
			if(typeof oldValuesForm[i] == 'object'){
				valsOld = new Array;
				valsNew = new Array;
				cambiado = false;
				for (var h in oldValuesForm[i]){
					if(oldValuesForm[i][h] != newValuesForm[i][h]){
						valsOld[valsOld.length] = oldValuesForm[i][h];
						valsNew[valsNew.length] = newValuesForm[i][h];
						cambiado = true;
					}
				}
				if(cambiado ==true){
					formChanges[formChanges.length] = i + '\n  old:'+ valsOld +'\n  new:' + valsNew;
				}
			}else{
				formChanges[formChanges.length] = i + '\n  old:'+oldValuesForm[i] +'\n  new:' + newValuesForm[i];
			}
		}
	}
	//alert(formChanges.join('\n'));
}




var MemberDedoLib = Class.create();
MemberDedoLib.prototype = {
   initialize: function(formElementName, pTipo, pFormat, pRequired, pErrorMsg, pEnabled, pExtraParam) {
		this.a_name = this.getMemberName(formElementName);
		
		this.element = $(this.a_name);
		this.a_tipo = pTipo;
		this.a_format = pFormat;
		this.a_required = pRequired;
		this.a_errorMsg = pErrorMsg;
		this.a_title = pErrorMsg;
		this.a_enabled = false;
		
		this.a_accesibleVal = '';
		if(Element.hasClassName(this.element,'accesibleVal')){
			this.a_accesibleVal = this.element.value;
		}
		if(pEnabled == '1') this.a_enabled = true;
	
		var paramsExtra = '0';
		if(pExtraParam) paramsExtra = pExtraParam;
		this.a_params = paramsExtra;
		
		
		this.hasError = false;
		// extras
		this.setLabel(this.a_name);
		//this.setSpanError(this.a_name);
		this.setElToInsert(this.a_name);
   },
   
   getMemberName: function(formElementName) {
		var arr = formElementName.split("[");
		formElementName = arr[0];
		formElementName = formElementName.replace('Out','In');
		return formElementName;
   },
   
   setLabel: function(nameMember) {
		this.label = $('L__' + nameMember);
   },
   
   setSpanError: function(nameMember) {
		this.spanError = $('err_' + nameMember);
   },
   getSpanError: function(nameMember) {
   		var idSpanError = 'err_' + nameMember;
		if((this.a_tipo == 'password')) idSpanError = 'err_' + this.elToInsert.id;
		
		if(!$(idSpanError)){
			var spanError = '<span id="' + idSpanError + '" class="errorField" style="display:none;"><\/span>';
			
			if(oFormCallbacks.config.errorPosition == 'after'){
				var anchoLabel = 0;
				if(this.label && this.a_tipo != 'foto' && this.a_tipo != 'check'){
					anchoLabel = Element.getDimensions(this.label).width;
				}
				spanError = '<div id="' + idSpanError + '" class="errorField" style="clear:left;display:none;padding-left:'+ anchoLabel + 'px;"><\/div>';
				new Insertion.After(this.elToInsert, spanError);
			}
			
			if(oFormCallbacks.config.errorPosition == 'before'){
				new Insertion.Before(this.elToInsert, spanError);
			}
			if(oFormCallbacks.config.errorPosition == 'top'){
				new Insertion.Top(this.elToInsert, spanError);
			}
			if(oFormCallbacks.config.errorPosition == 'bottom'){
				new Insertion.Bottom(this.label, spanError);
			}
		}
		
		this.spanError = $(idSpanError);
   },
   
   setElToInsert: function(member) {
		this.elToInsert = this.element;
		
		if(this.a_tipo == 'date'){
			this.elToInsert = $('cal_icon_' + member);
		}
		if(this.a_tipo == 'dateLimited'){
			this.elToInsert = $('cal_icon_' + member);
		}
		if(this.a_tipo == 'daterange'){
			this.elToInsert = $('H_' + member + '_1');
		}
		if(this.a_format == 'radio' || this.a_format == 'checks'){
			this.elToInsert = $('ul_' + member);
		}
		if(this.a_format == 'select' && (this.a_tipo == 'multienum' || this.a_tipo == 'multiforkey')){
			this.elToInsert = $('ins_' + member);
			this.setLabel(member.substr(0,member.length-2));
		}
		if(this.a_tipo == 'foto' || this.a_tipo == 'file'){
			this.elToInsert = $('ins_' + member);
		}
		if(this.a_format == 'autocomplete'){
			this.elToInsert = $('auto_' + member);
		}
		if(this.a_tipo == 'check'){
			this.elToInsert = $('L__' + member);
		}
		if(this.a_tipo == 'text' && this.a_format == 'FCK'){
			if($(member + '___Frame')){
				this.elToInsert = $(member + '___Frame');
			}
		}
		
		if((this.a_tipo == 'password')){
		
			var isRepassw = (this.a_name.substr(0,3) == 're_');
			if(isRepassw){
				this.elToInsert = this.element;
				this.label = $('L__' + this.a_name.substr(3,100));
			}else{
				var haveRepassw = $('re_'+this.a_name);
				if(haveRepassw){
					this.elToInsert = $('re_' + this.a_name);
				}else{
					this.elToInsert = this.element;
				}
			}
			// var spanError = $('err_' + elToInsert.id);
		}
   },
   
   onSubmitMember: function() {
		var valSerialize = '';
		var member = this.a_name;
		if(this.a_accesibleVal && $(member).value == this.a_accesibleVal){
			$(member).value = '';
		}
		if((this.a_tipo=='multienum' || this.a_tipo=='multiforkey') && this.a_format == 'select'){
			multiselSelect(member);
		}		
		if((this.a_tipo == 'foto' || this.a_tipo == 'file')){
			valSerialize = '&valSer_' + member + '=' + (this.element.value);
		}
		
		if((this.a_tipo=='text') && this.a_format == 'RTE'){
			// puede que este asi definido pero el navegador no soporte el RTE
			if($('hdn' + member)){
				updateRTE(member);
				var textoRte = $('hdn' + member).value;
				valSerialize += '&valSer_' + member + '=' + (textoRte);
			}
		}
		
		if((this.a_tipo=='text') && this.a_format == 'FCK'){
			// puede que este asi definido pero el navegador no soporte el RTE
			if(!(isSafari)){ 
					if(FCKeditorAPI.GetInstance(member).GetXHTML() != ''){
						this.element.value = 'OK';
						var textoRte = $(member).value;
					}
				}else{
					var textoRte = document.f.elements[member].value;
				}
			
			valSerialize += '&valSer_' + member + '=' + (textoRte);
			
		}
		
		return valSerialize;
   },
   
   validateInServer: function() {
   		if(this.a_enabled == false) return;
   		var member = this.a_name;
		var valSerialize = this.onSubmitMember();
		
		var valsForm = Form.serialize(document.f);
		
		var accesibleVal = '&a_accesibleVal=' + (this.a_accesibleVal);
		
		
		var opt = {
				// Use POST
				method: 'post',
				asynchronous:true,
				// Send this lovely data
				postBody: 'accionJS=validaMember&member='+member+'&a_format='+this.a_format+''+valSerialize+accesibleVal+'&a_tipo='+this.a_tipo+'&a_title='+this.a_title+'&a_required='+this.a_required + '&' + valsForm,
				// Handle successful response
				onSuccess: function(t) {
					//oFormCallbacks.configMembers[member].showResponse(t.responseText);
					this.showResponse(t.responseText);
					
				}.bind(this)
			};
		new Ajax.Request('../utilidades/validator.php', opt);	
   },
   
    showResponse: function(responseText) {
    	
		this.hasError = false;
		if(responseText == 'OKY'){
			if(this.spanError){
				new Effect.BlindUp(this.spanError,
				{ duration: 0.2, afterFinish: function(element){ Element.remove($(this.spanError.id));this.spanError = null;}.bind(this) });
			}
		}else{
			
			this.hasError = true;
			if(oFormCallbacks.config.showErrorsText){
				
				
				if(oFormCallbacks.config.errorPosition == 'alert'){
					alert(responseText.stripTags());
				}else{
					
					this.getSpanError(this.a_name);
					this.spanError.innerHTML = ' ' + responseText;
					
					new Effect.Appear(this.spanError);
				}		
			}
			
		}
		
		// falta asignar el label
		this.assignLabel();
   },
   
   assignLabel: function() {
   		var tipoLabel = (this.hasError == false) ? 'completed' : 'problem';
		Element.removeClassName(this.label,'completed');
		Element.removeClassName(this.label,'problem');
		Element.removeClassName(this.label,'optional');
		Element.addClassName(this.label,tipoLabel);
   }
};

/****************************************************
 * FormCallbacks
 ****************************************************/

/**
 * FormCallbacks
 * 
 * @param string nombre del formulario
 */
var FormCallbacks = Class.create();

// definimos la clase
FormCallbacks.prototype = {

   initialize: function(formName) {
		this.formName = formName;
		this.configMembers = {};
		this.config = {};
   },

   setConfig: function(pShowErrorsText,pErrorPosition) {
		this.config.showErrorsText = false;
		if(pShowErrorsText == '1') this.config.showErrorsText = true;
		this.config.errorPosition = pErrorPosition;
   },
   
   addValidateCallback: function(formElementName, pTipo, pFormat, pRequired, pErrorMsg, pEnabled, pExtraParam) {
		this.configMembers[formElementName] = new MemberDedoLib(formElementName, pTipo, pFormat, pRequired, pErrorMsg, pEnabled, pExtraParam);
   },
   
   enable: function(formElementName) {
		this.configMembers[formElementName].a_enabled = true;
   },
   
   disable: function(formElementName) {
		this.configMembers[formElementName].a_enabled = false;
   },
   
   observeForm: function() {
		var els = Form.getElements(document[this.formName]);
		for(var i = 0; i < els.length; i++)
		{
			
			if(els[i].type == 'hidden') continue;
			
			if(els[i].type == 'radio' || els[i].type == 'checkbox'){
				//Event.observe(els[i], "click", changed, false);
				els[i].onclick = function(){changed(this);};
			}else{
				if(els[i].type == 'select-multiple'){
					// en los multiples el changed se aplicara al mover de uno a otro en el script moveSelectBox.js
					continue;
				}
				if(els[i].id.substr(0, 9) == 'fontsize_'){
					continue;
				}
				//Event.observe(els[i], "change", changed, false);
				
				els[i].onchange = function(){changed(this);};
			}
		}
		
		
   },
   validateInServerForm: function(regMatch) {
		var valSerialize = '';
		var serStr = '';
		var isTab = false;
		if(regMatch){
			var re = new RegExp(regMatch,"gm");
			isTab = true;
		}
		var serStr = '';
		for(var i in this.configMembers){
			if(isTab){
				if (!(i.match(re))) continue;
			}
			
			member = this.configMembers[i];
			if(!member.a_enabled) continue;
			
			valSerialize += member.onSubmitMember();
			serStr += i +'##';
			
    		['a_tipo','a_format','a_required','a_errorMsg','a_accesibleVal'].each( function(k) {
      			serStr += k +'|' + this.configMembers[i][k] + '||';
    		}.bind(this));
			
			serStr += '##';
			
		}
		
		var valsForm = Form.serialize(document.f);
			
		var opt = {
					// Use POST
					method: 'post',
					asynchronous:true,
					// Send this lovely data
					postBody: 'accionJS=validaForm&config='+serStr + valSerialize + '&' + valsForm,
					// Handle successful response
					onSuccess: function(t) {
						this.showResponseForm(t.responseText);
					}.bind(this)
				};
						

		new Ajax.Request('../utilidades/validator.php', opt);	
   },
   
   showResponseForm: function (res){
		var hasError = false;
		var partes = res.split("||");
		var focusFirst = '';
		for(var i = 0; i < partes.length; i++){
			if(partes[i] == '') continue;
			var campoValor = partes[i].split("|");
			
			if(campoValor[0] == '') continue;
			
			if(this.configMembers[campoValor[0]]){
				if(this.configMembers[campoValor[0]].a_format == 'radio'){
					var el = document.f.elements[campoValor[0]][0];
				}else{
					var el = document.f.elements[campoValor[0]];
				}
				
			}else{
				continue;
				alert(campoValor[0] + ' no esta en la config');
			}
			
			this.configMembers[campoValor[0]].showResponse(campoValor[1]);
			
			if(campoValor[1] != 'OKY'){
				if(focusFirst == '') focusFirst = el;
				hasError = true;
			}
		}
		
		if(hasError){
			//Field.focus(focusFirst);
			//Field.select(focusFirst); //focusFirst.focus();
			Dialog.closeInfo();
			var msg = MENSAJES['error_form'];
			Dialog.alert(msg, 
				 {windowParameters: {className:"alphacube",width:300, height:100}, okLabel: "OK", 
				  ok:function(win) { return true;}});
			//alert(MENSAJES['error_form']);
		}else{
			if(typeof(updateRTEs) == 'function') updateRTEs();
			s.form.submit();
		}
	},

   submit: function() {
		var oForm = document[this.formName];
		for(i in this.cbOnSubmit) {
			if (this.enabled[i])
				var msg = this.cbOnSubmit[i](i, oForm);
		}
   }
};	

// creamos el objeto
var oFormCallbacks = new FormCallbacks('f');


var isSafari = (/Konqueror|Safari|KHTML/.test(navigator.userAgent));
/****************************************************
 * MISC
 ****************************************************/

/**
 * Gets the value of the specified parameter in the cookie.
 *
 * @param string name of the desired parameter.
 * @return string value of that parameter or null if cookie does not exist.
 */
function getCookie(name)
{
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1)
    {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    }
    else
    {
        begin += 2;
    }
    var end = document.cookie.indexOf(";", begin);
    if (end == -1)
    {
        end = dc.length;
    }
    return unescape(dc.substring(begin + prefix.length, end));
}


function newWindow(mypage, myname, w, h, scroll) {     var winLeft = (screen.width - w) / 2;     var winTop = (screen.height - h) / 2;     winProps = "height=" + h + ",width=" + w + ",top=" + winTop + ",left=" + winLeft + "," + scroll;     win = window.open(mypage, myname, winProps);     if (parseInt(navigator.appVersion) >= 4) { win.window.focus(); }     return win;}var posicX =0;var posicY =0;Event.observe(document, 'mousemove', get_mouse_xy);function get_mouse_xy(e) {	posicX = Event.pointerX(e) + 10;	posicY = Event.pointerY(e) + 12;	return true;}function showToolTip(text){	idToolTip = "toolTip";	w = Math.min((text.length * 5),250);	//w = 300;	if(!document.getElementById(idToolTip)){		divholder = document.createElement("div");		divholder.id = idToolTip;		divholder.style.display = 'none';		divholder.style.width = w + 'px';		divholder.style.height = "auto";		divholder.style.border = "1px solid #CCCCCC";		divholder.style.backgroundColor = "#FCFCBD";		divholder.style.position = "absolute";		divholder.style.color = "#222222";		divholder.style.padding = "2px";		divholder.style.fontSize = "10px";		divholder.style.zIndex = "200";		document.body.appendChild(divholder);	}else{		divholder = document.getElementById(idToolTip);		divholder.style.width = w + 'px';	}	x = posicX;	y = posicY;	if(document.body.offsetWidth < posicX+w+20){		x = document.body.offsetWidth - (w+20);	}	divholder.style.left = x+"px";	divholder.style.top = y+"px";	document.getElementById(idToolTip).innerHTML = ""+text+"";	document.getElementById(idToolTip).style.visibility = "visible";	document.getElementById(idToolTip).style.display = "";}function hideToolTip(){	document.getElementById("toolTip").style.visibility = "hidden";}function showToolTipNew(text,w){	idToolTip = "toolTipNew";	var w = 250;	//w = 300;	if(!document.getElementById(idToolTip)){		divholder = document.createElement("div");		divholder.id = idToolTip;		divholder.style.display = 'none';		divholder.style.width = w + 'px';		divholder.style.height = "auto";		divholder.style.position = "absolute";		divholder.style.zIndex = "200";		document.body.appendChild(divholder);	}else{		divholder = document.getElementById(idToolTip);		divholder.style.width = w + 'px';	}	x = posicX;	y = posicY;	if(document.body.offsetWidth < posicX+w+20){		x = document.body.offsetWidth - (w+20);	}		divholder.style.left = x+"px";	divholder.style.top = y+"px";	document.getElementById(idToolTip).innerHTML = ""+text+"";	//new Effect.Appear($(idToolTip), {duration:0.3,limit:1});	document.getElementById(idToolTip).style.visibility = "visible";	document.getElementById(idToolTip).style.display = "";}function hideToolTipNew(){	document.getElementById("toolTipNew").style.display = "none";}function showDivDateChoose(form,campo){	idDiv = "DateChoose";	w = 300;	if(!document.getElementById(idDiv)){		divholder = document.createElement("div");		divholder.id = idDiv;		divholder.style.width = "auto";		divholder.style.height = "auto";		divholder.style.position = "absolute";		divholder.style.zIndex = "200";		document.body.appendChild(divholder);	}else{		divholder = document.getElementById(idDiv);	}	arr = Position.cumulativeOffset(document.f.elements[campo]);	x = arr[0] + 110;	y = arr[1] - 40;	divholder.style.left = x+"px";	divholder.style.top = y+"px";	var texts = getTextsDateChooser(); 	content = 	"<div id='dateChooseContent'>"; 	content += 	"<ul>";	content += 	"<li class='sigue hand'><a href='javascript:showCalendar(\""+form+"\",\""+campo+"\");javascript:hideDivDateChoose();'>"+texts[0]+"</a></li>";	content += 	"<li class='sigue hand'><a href='javascript:hideDivDateChoose();'>"+texts[1]+"</a></li>";	content += 	"</ul>";	content += 	"<ul>";	content += 	"<li class='sign'><a href='javascript:addDayToDate(-1,\""+form+"\",\""+campo+"\");'><b>-</b></a></li>";	content += 	"<li><a href='javascript:calculateDate(0,\""+form+"\",\""+campo+"\");javascript:hideDivDateChoose();'>"+texts[2]+"</a></li>";	content += 	"<li class='sign'><a href='javascript:addDayToDate(1,\""+form+"\",\""+campo+"\");'><b>+</b></a></li>";	content += 	"</ul>";	content += 	"<ul>";	content += 	"<li class='sign'><a href='javascript:addDayToDate(-7,\""+form+"\",\""+campo+"\");'><b>-</b></a></li>";	content += 	"<li class='semana'>"+texts[3]+"</li>";	content += 	"<li class='sign'><a href='javascript:addDayToDate(7,\""+form+"\",\""+campo+"\");'><b>+</b></a></li>";	content += 	"</ul>";	content += 	"<div style='clear:both;'></div>";	content += 	"</div>";	content += 	"";	document.getElementById(idDiv).innerHTML = ""+content+"";	if(Effect){		Effect.Appear(idDiv);	}else{		document.getElementById(idDiv).style.visibility = "visible";	}}function getTextsDateChooser(){	var lang = getCookie('lang');	if (lang == '' || lang == undefined){		lang = 'es';	}	if (lang == 'es'){		texts = new Array('Elegir','Cerrar','Hoy','Semana');	}else if (lang == 'eu'){		texts = new Array('Aukeratu','Itxi','Gaur','Astea');	}else if (lang == 'en'){		texts = new Array('Choose','Close','Today','Week');	}else {		texts = new Array('Choose','Close','Today','Week');	}	return texts;}function hideDivDateChoose(){	if(!$('DateChoose')) return;	if(Effect){		Effect.DropOut("DateChoose");	}else{		document.getElementById("DateChoose").style.visibility = "hidden";	}}function calculateDate(dif,form,campo){	MINUTE = 60 * 1000; 	HOUR = MINUTE * 60; 	DAY = HOUR * 24;	today = (new Date()).getTime(); 	newFecha = new Date(today + (DAY * (dif))); 	newFechaFormat = newFecha.getDate() + '-' + (newFecha.getMonth()+1) + '-' + (newFecha.getFullYear());	setDate(form,campo,newFechaFormat);}function addDayToDate(dif,form,campo){	MINUTE = 60 * 1000; 	HOUR = MINUTE * 60; 	DAY = HOUR * 24;	elInputVal = eval("document." + form + "['" + campo + "'].value");	if (elInputVal == ''){		today = (new Date()).getTime();	}else{		fecha = elInputVal.split("-");		d = fecha[0];		m = fecha[1]-1;		y = fecha[2];		today = (new Date(y,m,d)).getTime();	} 	newFecha = new Date(today + (DAY * (dif))); 	newFechaFormat = newFecha.getDate() + '-' + (newFecha.getMonth()+1) + '-' + (newFecha.getFullYear());	setDate(form,campo,newFechaFormat);}function setPointer(theRow, thePointerColor){    if (thePointerColor == '' || typeof(theRow.style) == 'undefined') {        return false;    }	var theCells = null;    if (typeof(document.getElementsByTagName) != 'undefined') {        theCells = theRow.getElementsByTagName('td');    }else if (typeof(theRow.cells) != 'undefined') {        theCells = theRow.cells;    }else {        return false;    }    var rowCellsCnt  = theCells.length;    for (var c = 0; c < rowCellsCnt; c++) {        theCells[c].style.backgroundColor = thePointerColor;    }    return true;} // end of the 'setPointer()' functionfunction changeHeightTextArea(elName,inc){	if(document.getElementById(elName +'___Frame')){		var oEditor = FCKeditorAPI.GetInstance(elName).EditorWindow.parent;				var actualHeight = oEditor.innerHeight;						document.getElementById(elName + '___Frame').style.height = actualHeight + inc +'px';		return;			}else{		var tArea = document.getElementById(elName);		var actualHeight = parseInt(tArea.getHeight());			if(actualHeight <= 60 && inc < 0) return;		if((actualHeight + inc) < 60) inc = 60 - actualHeight;		if(Effect){			// cual es el porcentaje de los pixeles a mover?			var porcentaje = 100 + ((inc * 100) / (Math.max(50,actualHeight)));						var test = new Effect.Scale(tArea, porcentaje, Object.extend({ scaleContent: false, scaleX: false, scaleMode: 'contents'}, {duration:0.2}));		}else{			tArea.style.height = actualHeight + inc +'px';		}	}		}function setActiveStyleSheet(title) {  var i, a, main;  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {      a.disabled = true;      if(a.getAttribute("title") == title) a.disabled = false;    }  }}var detect = navigator.userAgent.toLowerCase();function checkItDedolib(string){	place = detect.indexOf(string) + 1;	return place;}function clickDiaCalMini(idTd){	s.ejecuta('agenda');}function clickDiaCalSearch(idTd){	document.f.fechaCal.value = idTd;	s.ejecuta('buscarPublic');}var idEnRoll = -1;var classEnRoll = '';function rollOverDiaCalMini(idTd){	return;}var isExplorer=checkItDedolib('msie');function validaMouseOut(elem){		if(isExplorer){			if (!e) var e = window.event;			if (e.target) tg = e.target;			else if (e.srcElement) tg = e.srcElement;			var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;			if(!reltg) return false;			while (reltg.className != elem.className && reltg.nodeName != 'BODY'){					if(reltg.parentNode==null) return false;					reltg= reltg.parentNode;			}			if (reltg.className == elem.className) return false;		}		return true;}///////////////////////////////////////////////////////////////////////////// MOVESELECTBOX///////////////////////////////////////////////////////////////////////////function moveFromTo(fbox,tbox){	for(var i=0; i<fbox.options.length; i++) {		if(fbox.options[i].selected && fbox.options[i].value != "") {			var no = new Option();			no.value = fbox.options[i].value;			no.text = fbox.options[i].text;			tbox.options[tbox.options.length] = no;			fbox.options[i] = null;      		i--;   		}	}	SortD(tbox);	if(fbox.name.substr(fbox.name.length-5,100) == 'Out[]'){		changed(tbox);	}else{		changed(fbox);	}}function SortD(box)  {	var temp_opts = new Array();	var temp = new Object();	for(var i=0; i<box.options.length; i++)  {		temp_opts[i] = box.options[i];	}		temp_opts.sort(function (a,b) {				if((a.text.toUpperCase()) < (b.text.toUpperCase())){					return -1;				}				if((a.text.toUpperCase()) > (b.text.toUpperCase())){					return 1;				}				return 0;		});		box.options.length = 0;	for(var i=0; i<temp_opts.length; i++)  {		box.options[i] = temp_opts[i];	}}///////////////////////////////////////////////////////////////////////////// END MOVESELECTBOX///////////////////////////////////////////////////////////////////////////function showDialog(texto){	Dialog.alert(texto,{windowParameters: {className:'alphacube',showEffectOptions:{duration:0.2},width:300, height:100}, okLabel: 'OK',ok:function(win) { return true;}});}/* PROTOTYPE EXTENDS */Object.extend(Ajax.Autocompleter.prototype, {  initialize: function(element, update, url, options) {    this.baseInitialize(element, update, options);    this.options.asynchronous  = true;    this.options.onComplete    = this.onComplete.bind(this);    this.options.defaultParams = this.options.parameters || null;    this.url                   = url;  	this.options.onNoresults = this.options.onNoresults || function(element, update){ return; };  },  onObserverEvent: function() {    this.changed = false;    if(this.getToken().length>=this.options.minChars) {      this.startIndicator();      this.getUpdatedChoices();    } else {      //this.options.onNoResults(this.element,this.update);      this.active = false;      this.hide();    }  },  updateChoices: function(choices) {    if(!choices || choices == '' || choices.indexOf('no_results') != -1) this.options.onNoresults(this.element,this.update);  	if(!this.changed && this.hasFocus) {      this.update.innerHTML = choices;      Element.cleanWhitespace(this.update);      Element.cleanWhitespace(this.update.firstChild);      if(this.update.firstChild && this.update.firstChild.childNodes) {        this.entryCount =          this.update.firstChild.childNodes.length;        for (var i = 0; i < this.entryCount; i++) {          var entry = this.getEntry(i);          entry.autocompleteIndex = i;          this.addObservers(entry);        }      } else {        this.entryCount = 0;      }      this.stopIndicator();      this.index = 0;      this.render();    }  },  onBlur: function(event) {    // needed to make click events working    setTimeout(this.hide.bind(this), 250);    this.hasFocus = false;    this.active = false;    if(this.element.value == ''){    	this.options.onNoresults(this.element,this.update);    }  },  onComplete: function(request) {    //alert(request.responseText);    this.updateChoices(request.responseText);  }});document.getElementsByAttribute = function(attribute, value, tagName, parentElement) {	var children = ($(parentElement) || document.body).getElementsByTagName((tagName || '*'));	return $A(children).inject([], function(elements, child) {		var attributeValue = child.getAttribute(attribute);		if(attributeValue != null) {			if(!value || attributeValue == value) {				elements.push(child);			}		}		return elements;	});}function procesaAccesibleValuesForm(){	var els = $$('.accesibleVal');	els.each(function(value, index) {      var element = els[index];            element.startValue = element.value;      Element.addClassName(element,'accesibleValFocus');		element.onfocus = function(){			if (element.value == element.startValue){				element.value = "";				//element.style.color='#000000';				Element.removeClassName(element,'accesibleValFocus');			}		};		element.onblur = function(){			if (element.value == ''){				element.value = element.startValue;				//element.style.color='#747373';				Element.addClassName(element,'accesibleValFocus');			}		};    });}function initMap(lat, lon, dirOverlay, mapId,showScala,showTipoMapa){	if (GBrowserIsCompatible()) {		var map = new GMap2(document.getElementById(mapId));			map.setCenter(new GLatLng(lat, lon), 14);		if(showScala){			map.addControl(new GLargeMapControl());		}else{			map.addControl(new GSmallMapControl());		}		if(showTipoMapa){			map.addControl(new GMapTypeControl());		}				var point = new GLatLng(lat, lon);			var marker = new GMarker(point);		GEvent.addListener(marker, "click", function() {			marker.openInfoWindowHtml(dirOverlay);		});		map.addOverlay(marker);		marker.openInfoWindowHtml(dirOverlay);	}}var Reflection = {	defaultHeight : 0.5,	defaultOpacity: 0.5,		add: function(image, options) {		Reflection.remove(image);				doptions = { "height" : Reflection.defaultHeight, "opacity" : Reflection.defaultOpacity }		if (options) {			for (var i in doptions) {				if (!options[i]) {					options[i] = doptions[i];				}			}		} else {			options = doptions;		}			try {			var d = document.createElement('div');			var p = image;						var classes = p.className.split(' ');			var newClasses = '';			for (j=0;j<classes.length;j++) {				if (classes[j] != "reflect") {					if (newClasses) {						newClasses += ' '					}										newClasses += classes[j];				}			}			var reflectionHeight = Math.floor(p.height*options['height']);			var divHeight = Math.floor(p.height*(1+options['height']));						var reflectionWidth = p.width;				/* Copy original image's classes & styles to div */			d.className = newClasses;			p.className = 'reflected';						d.style.cssText = p.style.cssText;			p.style.cssText = ' ';						if (document.all && !window.opera) {				var reflection = document.createElement('img');				reflection.src = p.src;				reflection.style.width = reflectionWidth+'px';								reflection.style.marginBottom = "-"+(p.height-reflectionHeight)+'px';				reflection.style.filter = 'flipv progid:DXImageTransform.Microsoft.Alpha(opacity='+(options['opacity']*100)+', style=1, finishOpacity=0, startx=0, starty=0, finishx=0, finishy='+(options['height']*100)+')';								d.style.width = reflectionWidth+'px';				d.style.height = divHeight+'px';				p.parentNode.replaceChild(d, p);								d.appendChild(p);				d.appendChild(reflection);			} else {				var canvas = document.createElement('canvas');				var context = canvas.getContext("2d");							canvas.style.height = reflectionHeight+'px';				canvas.style.width = reflectionWidth+'px';				canvas.height = reflectionHeight;				canvas.width = reflectionWidth;								d.style.width = reflectionWidth+'px';				d.style.height = divHeight+'px';				p.parentNode.replaceChild(d, p);								d.appendChild(p);				d.appendChild(canvas);								context.save();								context.translate(0,image.height-1);				context.scale(1,-1);								context.drawImage(image, 0, 0, reflectionWidth, image.height);				context.restore();								context.globalCompositeOperation = "destination-out";				var gradient = context.createLinearGradient(0, 0, 0, reflectionHeight);								gradient.addColorStop(1, "rgba(255, 255, 255, 1.0)");				gradient.addColorStop(0, "rgba(255, 255, 255, "+(1-options['opacity'])+")");					context.fillStyle = gradient;				if (navigator.appVersion.indexOf('WebKit') != -1) {					context.fill();				} else {					context.fillRect(0, 0, reflectionWidth, reflectionHeight*2);				}			}		} catch (e) {	    }	},		remove : function(image) {		if (image.className == "reflected") {			image.className = image.parentNode.className;			image.parentNode.parentNode.replaceChild(image, image.parentNode);		}	}}function addReflections() {	var rimages = document.getElementsByClassName('reflect');	for (i=0;i<rimages.length;i++) {		var rheight = null;		var ropacity = null;		var classes = rimages[i].className.split(' ');		for (j=0;j<classes.length;j++) {			if (classes[j].indexOf("rheight") == 0) {				var rheight = classes[j].substring(7)/100;			} else if (classes[j].indexOf("ropacity") == 0) {				var ropacity = classes[j].substring(8)/100;			}		}				Reflection.add(rimages[i], { height: rheight, opacity : ropacity});	}}var AutoFilter = Class.create();// definimos la claseAutoFilter.prototype = {   initialize: function(element, options) {		this.element     = $(element);		this.options = options || {};				// this.options.paramName    = this.options.paramName || this.element.name;		//actionGetFilters: 'getFamiliasProductos',		//actionApplyFilter: 'getProductosFamilia',		//fieldToFilter: 'id_producto'		this.pos = Position.cumulativeOffset(this.element);		Event.observe(this.element, "click", this.onClick.bindAsEventListener(this));   },      onClickOpt: function(el) {   		var li = (Event.element(el));		var clases = $w(Element.classNames(li)['toString']());		var id_filtro = clases[1];				var accion 		= 'accion='+this.options.actionApplyFilter;		var valsForm 	= '';		valsForm += '&id_filtro=' + id_filtro;				var opt = {			method: 'post',			asynchronous:true,			postBody: accion + valsForm,			onSuccess: this.sucessClickOpt.bind(this)		};		new Ajax.Request(this.options.urlCtrl, opt);   },   sucessClickOpt: function(t) {		this.fillWithObject(t.responseText,this.options.fieldToFilter);		Windows.close(this.options.idWindow);   },   onClick: function() {		var accion 		= 'accion=' + this.options.actionGetFilters;		var valsForm 	= '';								var opt = {			method: 'post',			asynchronous:true,			postBody: accion + valsForm,			onSuccess: this.objectToUl.bind(this)					};						new Ajax.Request(this.options.urlCtrl, opt);		//return false;   },   fillWithObject: function(txtJson,member) {		$(member).options.length = 1;								txtJson = txtJson.strip();		if(txtJson == '[]') return;		var myObject = JSON.parse(txtJson);											for (var i in myObject) {			var optionName = new Option(myObject[i],i);			$(member).options[$(member).options.length] = optionName;		}		if($(member).options.length == 2){			$(member).options[1].selected = true;			changed($(member));		}   },   objectToUl: function(txtJson) {   		var pos = this.pos;		txtJson = txtJson.responseText.strip();		if(txtJson == '[]') return;		var myObject = JSON.parse(txtJson);						var ul = '<ul class="ulOptions">';		for (var i in myObject) {			var li = '<li class="liOpt '+i+' hand">'+ myObject[i]+ '<\/li>';			ul += li;		}		ul += '<\/ul>';				var optsWin2 = new Window(this.options.idWindow,{className: "alphacube",  top:pos[1],left:pos[0],width:220, height:200,draggable: false,minimizable: false,maximizable: false, resizable: false, hideEffect:Element.hide, showEffect:Element.show, minWidth: 10, destroyOnClose: true});		optsWin2.getContent().innerHTML = ul;		optsWin2.show();					var nodes = document.getElementsByClassName('liOpt', $(this.options.idWindow)) || [];		for(var i = 0; i<nodes.length; i++){			nodes[i].onclick = this.onClickOpt.bind(this);			// Event.observe(nodes[i], "click", this.onClickOpt.bindAsEventListener(this));		}				return true;   }};Behaviour.addLoadEvent(function() { addReflections();procesaAccesibleValuesForm();});var colourArray = [];function initColourArray() {        var colourMap = new Array('00', '33', '66', '99', 'AA', 'CC', 'EE', 'FF');                for(i = 0; i < colourMap.length; i++) {            colourArray.push(colourMap[i] + colourMap[i] + colourMap[i]);        }                // Blue        for(i = 1; i < colourMap.length; i++) {            if(i != 0 && i != 4 && i != 6) {                colourArray.push(colourMap[0] + colourMap[0] + colourMap[i]);            }        }        for(i = 1; i < colourMap.length; i++) {            if(i != 2 && i != 4 && i != 6 && i != 7) {                colourArray.push(colourMap[i] + colourMap[i] + colourMap[7]);            }        }                // Green        for(i = 1; i < colourMap.length; i++) {            if(i != 0 && i != 4 && i != 6) {                colourArray.push(colourMap[0] + colourMap[i] + colourMap[0]);            }        }        for(i = 1; i < colourMap.length; i++) {            if(i != 2 && i != 4 && i != 6 && i != 7) {                colourArray.push(colourMap[i] + colourMap[7] + colourMap[i]);            }        }                // Red        for(i = 1; i < colourMap.length; i++) {            if(i != 0 && i != 4 && i != 6) {                colourArray.push(colourMap[i] + colourMap[0] + colourMap[0]);            }        }        for(i = 1; i < colourMap.length; i++) {            if(i != 2 && i != 4 && i != 6 && i != 7) {                colourArray.push(colourMap[7] + colourMap[i] + colourMap[i]);            }        }                // Yellow        for(i = 1; i < colourMap.length; i++) {            if(i != 0 && i != 4 && i != 6) {                colourArray.push(colourMap[i] + colourMap[i] + colourMap[0]);            }        }        for(i = 1; i < colourMap.length; i++) {            if(i != 2 && i != 4 && i != 6 && i != 7) {                colourArray.push(colourMap[7] + colourMap[7] + colourMap[i]);            }        }                // Cyan        for(i = 1; i < colourMap.length; i++) {            if(i != 0 && i != 4 && i != 6) {                colourArray.push(colourMap[0] + colourMap[i] + colourMap[i]);            }        }        for(i = 1; i < colourMap.length; i++) {            if(i != 2 && i != 4 && i != 6 && i != 7) {                colourArray.push(colourMap[i] + colourMap[7] + colourMap[7]);            }        }                // Magenta        for(i = 1; i < colourMap.length; i++) {            if(i != 0 && i != 4 && i != 6) {                colourArray.push(colourMap[i] + colourMap[0] + colourMap[i]);            }        }        for(i = 1; i < colourMap.length; i++) {            if(i != 2 && i != 4 && i != 6 && i != 7) {                colourArray.push(colourMap[7] + colourMap[i] + colourMap[i]);            }        }    }        var ColourPicker = Class.create();ColourPicker.prototype = {    element: null,    trigger: null,    tableShown: false,        initialize: function(element, trigger) {        this.element = $(element);        this.trigger = $(trigger);                //this.element.onchange = this.changedColor.bindAsEventListener(this);        this.trigger.onclick = this.toggleTable.bindAsEventListener(this);        // Initialise the color array                this.buildTable();        this.toggleTable();    },    buildTable: function() {        if(!this.tableShown) {            html = "<table id=\"" + this.trigger.id + "ColourPicker\" style=\"display: none;\" class=\"colorPicker\">"            for(i = 0; i < colourArray.length; i++) {                if(i % 8 == 0) {                    html += "<tr>";                }                html += "<td style=\"background-color: #" + colourArray[i] + ";\" title=\"#" + colourArray[i] +  "\" onclick=\"$('" + this.element.id + "').value = '#" + colourArray[i] + "';$('" + this.element.id + "').onchange();$('" + this.trigger.id + "ColourPicker').style.display='none';\">";                if(i % 8 == 7) {                    html += "</tr>";                }            }            html += "</table>";            new Insertion.After(this.trigger, html);        }    },    toggleTable: function(sender) {        var obj = $(this.trigger.id + 'ColourPicker');        obj.style.display = (obj.style.display == 'block' ? 'none' : 'block');    },    changedColor: function() {        if($(this.element.id + 'muestra')){        	//element.setStyle({backgroundColor:        	$(this.element.id + 'muestra').style.backgroundColor = this.element.value;        }    }}

/**
 * SWFObject v1.4.2: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
 *
 * SWFObject is (c) 2006 Geoff Stearns and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * **SWFObject is the SWF embed script formerly known as FlashObject. The name was changed for
 *   legal reasons.
 */
if(typeof deconcept=="undefined"){var deconcept=new Object();}
if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}
if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}
deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a,_b){
if(!document.getElementById){return;}
this.DETECT_KEY=_b?_b:"detectflash";
this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);
this.params=new Object();
this.variables=new Object();
this.attributes=new Array();
if(_1){this.setAttribute("swf",_1);}
if(id){this.setAttribute("id",id);}
if(w){this.setAttribute("width",w);}
if(h){this.setAttribute("height",h);}
if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}
this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();
if(c){this.addParam("bgcolor",c);}
var q=_8?_8:"high";
this.addParam("quality",q);
this.setAttribute("useExpressInstall",_7);
this.setAttribute("doExpressInstall",false);
var _d=(_9)?_9:window.location;
this.setAttribute("xiRedirectUrl",_d);
this.setAttribute("redirectUrl","");
if(_a){this.setAttribute("redirectUrl",_a);}};
deconcept.SWFObject.prototype={setAttribute:function(_e,_f){
this.attributes[_e]=_f;
},getAttribute:function(_10){
return this.attributes[_10];
},addParam:function(_11,_12){
this.params[_11]=_12;
},getParams:function(){
return this.params;
},addVariable:function(_13,_14){
this.variables[_13]=_14;
},getVariable:function(_15){
return this.variables[_15];
},getVariables:function(){
return this.variables;
},getVariablePairs:function(){
var _16=new Array();
var key;
var _18=this.getVariables();
for(key in _18){_16.push(key+"="+_18[key]);}
return _16;
},getSWFHTML:function(){
var _19="";
if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){
if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");}
_19="<embed wmode=\"transparent\" type=\"application/x-shockwave-flash\" src=\""+this.getAttribute("swf")+"\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\"";
_19+=" id=\""+this.getAttribute("id")+"\" name=\""+this.getAttribute("id")+"\" ";
var _1a=this.getParams();
for(var key in _1a){_19+=key+"=\""+_1a[key]+"\" ";}
var _1c=this.getVariablePairs().join("&");
if(_1c.length>0){_19+="flashvars=\""+_1c+"\"";}
_19+="/>";
}else{if(this.getAttribute("doExpressInstall")){
this.addVariable("MMplayerType","ActiveX");}
_19="<object id=\""+this.getAttribute("id")+"\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\">";
_19+="<param name=\"movie\" value=\""+this.getAttribute("swf")+"\" />";
var _1d=this.getParams();
for(var key in _1d){_19+="<param name=\""+key+"\" value=\""+_1d[key]+"\" />";}
var _1f=this.getVariablePairs().join("&");
if(_1f.length>0){_19+="<param name=\"flashvars\" value=\""+_1f+"\" />";}
_19+="<param name='wmode' value='transparent'></object>";}
return _19;
},write:function(_20){
if(this.getAttribute("useExpressInstall")){
var _21=new deconcept.PlayerVersion([6,0,65]);
if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){
this.setAttribute("doExpressInstall",true);
this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));
document.title=document.title.slice(0,47)+" - Flash Player Installation";
this.addVariable("MMdoctitle",document.title);}}
if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){
var n=(typeof _20=="string")?document.getElementById(_20):_20;
n.innerHTML=this.getSWFHTML();
return true;
}else{
if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}
return false;}};
deconcept.SWFObjectUtil.getPlayerVersion=function(){
var _23=new deconcept.PlayerVersion([0,0,0]);
if(navigator.plugins&&navigator.mimeTypes.length){
var x=navigator.plugins["Shockwave Flash"];
if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}
}else{
try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}
catch(e){try{
var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
_23=new deconcept.PlayerVersion([6,0,21]);
axo.AllowScriptAccess="always";}
catch(e){
if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}
catch(e){}}
if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}
return _23;};
deconcept.PlayerVersion=function(_27){
this.major=_27[0]!=null?parseInt(_27[0]):0;
this.minor=_27[1]!=null?parseInt(_27[1]):0;
this.rev=_27[2]!=null?parseInt(_27[2]):0;
};
deconcept.PlayerVersion.prototype.versionIsValid=function(fv){
if(this.major<fv.major){return false;}
if(this.major>fv.major){return true;}
if(this.minor<fv.minor){return false;}
if(this.minor>fv.minor){return true;}
if(this.rev<fv.rev){return false;}
return true;
};
deconcept.util={getRequestParameter:function(_29){
var q=document.location.search||document.location.hash;
if(q){
var _2b=q.substring(1).split("&");
for(var i=0;i<_2b.length;i++){
if(_2b[i].substring(0,_2b[i].indexOf("="))==_29){
return _2b[i].substring((_2b[i].indexOf("=")+1));}}}
return "";}};
deconcept.SWFObjectUtil.cleanupSWFs=function(){
var _2d=document.getElementsByTagName("OBJECT");
for(var i=0;i<_2d.length;i++){
_2d[i].style.display="none";
for(var x in _2d[i]){if(typeof _2d[i][x]=="function"){_2d[i][x]=null;}}}};
if(typeof window.onunload=="function"){
var oldunload=window.onunload;
window.onunload=function(){
deconcept.SWFObjectUtil.cleanupSWFs();
oldunload();};
}else{window.onunload=deconcept.SWFObjectUtil.cleanupSWFs;}
if(Array.prototype.push==null){
Array.prototype.push=function(_30){
this[this.length]=_30;
return this.length;};}

var getQueryParamValue=deconcept.util.getRequestParameter;
var FlashObject=deconcept.SWFObject; // for legacy support
var SWFObject=deconcept.SWFObject;



PopupGallery = Class.create();
PopupGallery.prototype = {
	defaultImageWidth: 980,
	previous: null,
	next: null,
	items: [],

 	initialize: function(itemClass) {
		this.items = $$('li.' + itemClass);
		if (this.items.length>0) {
			this.createPopup();
			this.setImageAttributes();
		}

	},

 	createPopup: function() {
		this.closeBtn = Builder.node('a', {href:'#close', 'class':'close'}, 'Close');
		Event.observe(this.closeBtn, 'click', this.close.bindAsEventListener(this), false);

		this.popupimg = Builder.node('img', {'class':'popupimg', border:0});
		this.descriptionPanel = Builder.node('div', {'class':'description'});
		var middle = [this.popupimg, this.descriptionPanel];
		
 		this.popup = Builder.node('div', {id:'popupGal'}, [
 			
	 		Builder.node('div', {'class':'topmiddlecap'}, [this.closeBtn]),
 			Builder.node('div', {'class':'middle'}, middle)
 			
 		]);

 		document.body.appendChild(this.popup, document.body.firstChild);
 	},

 	setImageAttributes: function() {
 		for (var i=0; i<this.items.length; i++) {
 			this.items[i] = $(this.items[i]).down(0);
 			var item = this.items[i]; 

 			
			item.img = new Image();
			item.img.src = item.href;
			item.img.alt = $(item).down(0).alt;
 			this.setEvent(item, i);
 		}
	},

 	setEvent: function(item, i) {
		Event.observe(item, 'click', this.onClick.bindAsEventListener(this, item, i), false);
	},

	windowSize: function() {
		var width = window.innerWidth || (window.document.documentElement.clientWidth || window.document.body.clientWidth);
		var height = window.innerHeight || (window.document.documentElement.clientHeight || window.document.body.clientHeight);
		var x = window.pageXOffset || (window.document.documentElement.scrollLeft || window.document.body.scrollLeft);
		var y = window.pageYOffset || (window.document.documentElement.scrollTop || window.document.body.scrollTop);
		return {'width':width, 'height':height, 'x':x, 'y':y}
	},

 	onClick: function(evt, item, i) {
 		// store the small size and position for later
		this.width = (item.offsetWidth>80) ? 80 : item.offsetWidth;
		this.left = evt.pageX || evt.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
		this.left -= this.width/2;
		this.height = item.offsetHeight;
		this.top = evt.pageY || evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
		this.top -= this.height/2;

		// stop the default event
 		Event.stop(evt);
		
 		this.popImage(evt, item, i);
 	},

 	popImage: function(evt, item, i) {
 		// reset the movie stuff
		this.popup.onclick = this.close.bindAsEventListener(this);

		// set the source for image in the popup
 		this.popupimg.src = item.img.src;
 		this.popupimg.alt = item.img.alt;
		this.descriptionPanel.innerHTML = item.img.alt;
 		// get the ratio of that image
 		var ratio = item.img.width / item.img.height;

		// default size
		var left, top = null;
		var width = this.defaultImageWidth;
		this.padleft = (this.popup.offsetWidth-width);
		var height = Math.round(width/ratio);
		this.padtop = (this.popup.offsetHeight-height);

		// re-size functions
		var smallWidth = function() {
 			//console.log('width is small'); // width is small
	 		width = Math.round(this.windowSize().width*.8);
			height = Math.round(width/ratio);
		}.bind(this)

		var smallHeight = function() {
 			//console.log('height is small'); // height is small
			height = Math.round(this.windowSize().height*.6);
	 		width = Math.round(height*ratio);
		}.bind(this)

		// figure out if we're small or big
	 	if (this.windowSize().width<width+this.padleft && this.windowSize().height<height+this.padtop) {
 			//console.log('both are small'); // both are small
	 		if (this.windowSize().width<this.windowSize().height*ratio) {
	 			smallWidth();
	 		} else {
	 			smallHeight();
	 		}
	 	} else if (this.windowSize().width<width+this.padleft) {
	 		smallWidth();
	 	} else if (this.windowSize().height<height+this.padtop) {
	 		smallHeight();
	 	}

		var after = function() {
			Element.removeClassName(this.popup, 'isanim');
			Element.addClassName(this.popup, 'popped');
		}.bind(this)

		// set the position of the image according to the height/width we just found
		if (!left) left = this.windowSize().x+(this.windowSize().width-width)/2;
		if (!top) top = this.windowSize().y+(this.windowSize().height-height)*.6;
		
		// call the effect
		this.pop(width, top, height, left, after);
	},

 	pop: function(width, top, height, left, after) {
		// prep the popup for the effect
		this.popup.style.width = this.width+'px';
		this.popup.style.height = this.height+'px';
		this.popup.style.left = this.left+'px';
		this.popup.style.top = this.top+'px';

		this.popup.style.zIndex = '999';
 		Element.setOpacity(this.popup, 0);

		// do the craziness
		new Effect.Parallel([
				new Effect.MoveBy(this.popup, top-this.top, left-this.left, { sync:true }), 
				new Effect.Scale(this.popup, (width/this.width)*100, { sync:true, scaleMode:{ originalWidth:this.width, originalHeight:this.height }, scaleY:false, scaleContent:false }),
				new Effect.Scale(this.popup, (height/this.height)*100, { sync:true, scaleMode:{ originalWidth:this.width, originalHeight:this.height }, scaleX:false, scaleContent:false }),
				new Effect.Appear(this.popup, { sync:true })
			],
			{ duration:.2, beforeStart:function() { Element.addClassName(this.popup, 'isanim'); }.bind(this), afterFinish:after }
		);
	},

 	close: function(evt) {
 		if (evt) Event.stop(evt);

		var width = (this.popupimg.offsetWidth) ? this.popupimg.offsetWidth : this.popup.offsetWidth - this.padleft;
		var left = this.popup.offsetLeft + this.padleft/2;
		var height = (this.popupimg.offsetHeight) ? this.popupimg.offsetHeight : this.popup.offsetHeight - this.padtop/2;
		var top = this.popup.offsetTop + this.padtop/2;

		new Effect.Parallel([
				new Effect.MoveBy(this.popup, this.top-top, this.left-left, { sync:true }), 
				new Effect.Scale(this.popup, (this.width/width)*100, { sync:true, scaleMode:{ originalWidth:width, originalHeight:height }, scaleY:false, scaleContent:false }),
				new Effect.Scale(this.popup, (this.height/height)*100, { sync:true, scaleMode:{ originalWidth:width, originalHeight:height }, scaleX:false, scaleContent:false }),
				new Effect.Fade(this.popup, { sync:true })
			],
			{ duration:.3, afterFinish:this.afterClose.bind(this) }
		);
	},

 	afterClose: function(evt) {
		// reset everything
		this.popup.style.width = '';
		this.popup.style.height = '';
		this.popup.style.left = '';
		this.popup.style.top = '';
		this.popup.className = '';

		this.popup.style.zIndex = '-10';
		this.popup.style.display = '';
		this.popup.style.visibility = '';
		Element.setOpacity(this.popup, '');
		
		if (Prototype.Browser.WebKit) {
			if (!this.scrollTo) this.scrollTo = 1;
			window.scroll(this.windowSize().x+this.scrollTo, this.windowSize().y+this.scrollTo);
			this.scrollTo = -this.scrollTo;
			window.scroll(this.windowSize().x+this.scrollTo, this.windowSize().y+this.scrollTo);
			this.scrollTo = -this.scrollTo;
		}
		
		this.resetVar();
 	},

 	resetVar: function(evt) {
		this.width, this.padleft, this.left, this.height, this.padtop, this.top = null;
 	}

}


AlbumGallery = Class.create();
AlbumGallery.prototype = {
 	initialize: function(container, options) {
		this.container = $(container);
		this.options   =  options || {};
		this.options.width = this.options.width || 320;
		this.options.height = this.options.height || 240;
		this.options.changeTime = this.options.changeTime || 5;
		this.options.effects 	= this.options.effects || ['Fade','BlindUp','Shrink','Shrink','Fade','Shrink'];
		
		this.fotos = $$('#'+container + ' img');
		
		this.lienzo = Builder.node('img', {xid:'lienzoGallery',src:this.fotos[0].src,width:this.options.width+'px',height:this.options.height+'px',style:'position:absolute;z-index:900;'});
		
		this.marco = Builder.node('img', {xid:'marcoGallery',src:this.fotos[1].src,width:this.options.width+'px',height:this.options.height+'px',style:'position:absolute;z-index:899;'});
		
		this.clavo = Builder.node('div', {xid:'clavoGallery'}, [
	 		this.lienzo,this.marco
	 		]);
		
		Element.update(this.container,'');  
	    
	    this.currentIndex = 1;
		this.container.appendChild(this.clavo);
		
		this.startup();

	},
	startup: function() { 
		this.exec = new PeriodicalExecuter(this.cycle.bind(this), this.options.changeTime) // change image every 5 seconds 
	},
	changeTimer: function(newtime) { 
		this.exec.stop();
		this.options.changeTime = newtime;
		this.exec = new PeriodicalExecuter(this.cycle.bind(this), this.options.changeTime) // change image every 5 seconds 
	}, 
	cycle: function() {    
    	var actualIndex = this.currentIndex;
    	var nextIndex = (this.fotos.length - 1 == this.currentIndex) ? 0 : this.currentIndex + 1; 
    	this.currentIndex = nextIndex;
    	var fx = this.options.effects;
    	var aleat = Math.round(Math.random() * (fx.length-1)); 
    	
    	var fun = fx[aleat];
    	var dirs = ['top-left','top-right','bottom-left','bottom-right','center'];
    	var aleat = Math.round(Math.random() * (dirs.length-1)); 
    	var dir = dirs[aleat];
    	
		new Effect[fun](this.lienzo, { // the id of the <DIV> containing the photos 
			duration: 1, 
			fps: 50,
			direction: dir,
			afterFinish: function() { 
				// alert(this.fotos[this.currentIndex]);
				this.lienzo.src = this.fotos[actualIndex].src;
				this.lienzo.alt = this.fotos[actualIndex].alt;
				
				this.lienzo.setStyle({display:'block'});
				
				this.marco.src = this.fotos[nextIndex].src;
				new Effect.Appear(this.marco,{duration: 1,fps: 5});
			}.bind(this)
		}) 
	} 
} 

/*
//
// Uso de las funciones de este script
//
//
Behaviour.addLoadEvent( function() {
	new PopupGallery('galleryitem');
	new AlbumGallery('albumFotos',{width:640,height:480,changeTime:3,effects:['Fade']});
});
*/



var MENSAJES = {
			"confirmDel": "Confirme que desea eliminar el registro.",
			"confirmAutoSave": "Confirme que desea guardar el registro.",
			"confirmSend": "Confirme que desea enviar el registro",
			"confirmDelFile": "Confirme que desea eliminar el fichero",
			"revisar": "Por favor revise los siguientes campos",
			"obligatorios": "Los siguientes campos son obligatorios",
			"enviando_datos": "Enviando datos, por favor espere ...",
			"error_form": "Los datos no han sido completados correctamente.\n Por favor revise los datos marcados.",
			"formato_fechas": "El formato de fechas debe ser uno de los siguientes:\n - dd-mm-yyyy\n - ddmmyyyy\n - dd/mm/yyyy"}
