
//
// SOFTWARE NAME: eZ Publish
// COPYRIGHT NOTICE: Copyright (C) 1999-2008 eZ Systems AS
// NOTICE: >
//   modify it under the terms of version 2.0  of the GNU General
//   but WITHOUT ANY WARRANTY; without even the implied warranty of
//   GNU General Public License for more details.
//   Public License along with this program; if not, write to the Free
//   MA 02110-1301, USA.
//
function ezjs_toggleCheckboxes( formname, checkboxname )
{
with( formname )
{
for( var i=0; i<elements.length; i++ )
{
if( elements[i].type == 'checkbox' && elements[i].name == checkboxname && elements[i].disabled == "" )
{
if( elements[i].checked == true )
{
elements[i].checked = false;
}
else
{
elements[i].checked = true;
}
}
}
}
}
eval(function(p,a,c,k,e,d){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--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[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}('A m={11:{9A:\'aG\',bf:\'cT...\',aY:\'84 26 dp\',bG:\'84 26 da 26 du\',9g:\'dK 26 dL I (f)\',ce:\'dO by <i>bU bP</i>\',cd:\'cL 26 d5 bU bP eJ\',82:\'bK\',80:\'ad\',86:\'a9\',8c:\'c2\',87:\'c2 (fo)\',ae:\'ff\',aO:\'br\',b9:\'br 1p (bJ)\',aW:\'bI\',aS:\'bI 1p (bJ)\',83:\'bK (85 W)\',7Z:\'ad (85 3h)\',81:\'a9\',aF:\'1:1\',3E:\'eg %1 dT %2\',9I:\'84 26 28 2I, ed b0 ee 26 3w. ea 85 ft P 1G b0 3a.\'},4Y:\'M/fn/\',9J:\'eR.5e\',66:\'eK.5e\',6u:5I,bT:5I,4V:15,8W:15,62:15,6z:15,4x:d4,be:0.75,98:L,7J:5,3P:2,cI:3,5y:1i,bE:\'4q 3h\',c9:1,bw:L,cf:\'cG://M.cF/\',aP:L,7P:[\'a\',\'5i\'],3n:[],bZ:5I,4f:0,7M:50,7k:1i,8j:L,4g:L,3F:\'5D\',88:L,48:\'1Z\',8e:\'1Z\',aa:G,ac:G,9s:L,4d:aQ,5O:aQ,5s:L,1U:\'cJ-d2\',7h:\'M-R\',9x:{2V:\'<O 1X="M-2V"><5n>\'+\'<1K 1X="M-3a">\'+\'<a 1Y="#" 2h="{m.11.83}">\'+\'<1A>{m.11.82}</1A></a>\'+\'</1K>\'+\'<1K 1X="M-3G">\'+\'<a 1Y="#" 2h="{m.11.b9}">\'+\'<1A>{m.11.aO}</1A></a>\'+\'</1K>\'+\'<1K 1X="M-3j">\'+\'<a 1Y="#" 2h="{m.11.aS}">\'+\'<1A>{m.11.aW}</1A></a>\'+\'</1K>\'+\'<1K 1X="M-1G">\'+\'<a 1Y="#" 2h="{m.11.7Z}">\'+\'<1A>{m.11.80}</1A></a>\'+\'</1K>\'+\'<1K 1X="M-3w">\'+\'<a 1Y="#" 2h="{m.11.81}">\'+\'<1A>{m.11.86}</1A></a>\'+\'</1K>\'+\'<1K 1X="M-1c-2H">\'+\'<a 1Y="#" 2h="{m.11.9g}">\'+\'<1A>{m.11.aF}</1A></a>\'+\'</1K>\'+\'<1K 1X="M-28">\'+\'<a 1Y="#" 2h="{m.11.87}" >\'+\'<1A>{m.11.8c}</1A></a>\'+\'</1K>\'+\'</5n></O>\',aX:\'<O 1X="M-dk"><5n>\'+\'<1K 1X="M-3a">\'+\'<a 1Y="#" 2h="{m.11.83}" 2o="D m.3a(k)">\'+\'<1A>{m.11.82}</1A></a>\'+\'</1K>\'+\'<1K 1X="M-1G">\'+\'<a 1Y="#" 2h="{m.11.7Z}" 2o="D m.1G(k)">\'+\'<1A>{m.11.80}</1A></a>\'+\'</1K>\'+\'<1K 1X="M-3w">\'+\'<a 1Y="#" 2h="{m.11.81}" 2o="D 1i">\'+\'<1A>{m.11.86}</1A></a>\'+\'</1K>\'+\'<1K 1X="M-28">\'+\'<a 1Y="#" 2h="{m.11.87}" 2o="D m.28(k)">\'+\'<1A>{m.11.8c}</1A></a>\'+\'</1K>\'+\'</5n></O>\'+\'<O 1X="M-1f"></O>\'+\'<O 1X="M-dB"><O>\'+\'<1A 1X="M-3C" 2h="{m.11.ae}"><1A></1A></1A>\'+\'</O></O>\'},5F:[],7G:L,18:[],8B:[\'5s\',\'3H\',\'48\',\'8e\',\'aa\',\'ac\',\'1U\',\'3P\',\'cR\',\'cQ\',\'cX\',\'au\',\'d3\',\'cY\',\'cZ\',\'at\',\'9s\',\'45\',\'5Q\',\'3n\',\'4f\',\'K\',\'N\',\'8F\',\'7k\',\'8j\',\'4g\',\'d1\',\'d7\',\'cD\',\'2G\',\'88\',\'3T\',\'56\',\'3F\',\'8w\',\'7h\',\'4d\',\'5O\',\'ab\',\'cK\',\'2P\',\'2L\',\'c4\',\'8t\',\'1m\'],1S:[],8T:0,8H:{x:[\'c0\',\'W\',\'4n\',\'3h\',\'c1\'],y:[\'5m\',\'U\',\'8U\',\'4q\',\'7g\']},6m:{},at:{},au:{},8w:{cl:{},2l:{},cm:{}},42:[],5P:[],4o:{},4B:[],7u:[],5l:[],6H:{},7X:{},4t:8d((5g.6o.5x().2r(/.+(?:aw|cH|cA|1y)[\\/: ]([\\d.]+)/)||[0,\'0\'])[1]),1y:(1d.5w&&!1R.3I),5b:/bS/.1b(5g.6o),5X:/dD.+aw:1\\.[0-8].+d8/.1b(5g.6o),$:C(1D){q(1D)D 1d.9f(1D)},2w:C(2c,3l){2c[2c.Y]=3l},16:C(ao,3U,4c,6a,a2){A el=1d.16(ao);q(3U)m.4a(el,3U);q(a2)m.Q(el,{8l:0,8p:\'1v\',8f:0});q(4c)m.Q(el,4c);q(6a)6a.1W(el);D el},4a:C(el,3U){P(A x 3e 3U)el[x]=3U[x];D el},Q:C(el,4c){P(A x 3e 4c){q(m.1y&&x==\'1q\'){q(4c[x]>0.99)el.E.dM(\'5R\');J el.E.5R=\'9U(1q=\'+(4c[x]*2S)+\')\'}J el.E[x]=4c[x]}},22:C(el,1x,3q){A 4D,3Y,4E;q(1H 3q!=\'7f\'||3q===G){A 36=aE;3q={44:36[2],2L:36[3],7a:36[4]}}q(1H 3q.44!=\'3E\')3q.44=5I;3q.2L=1l[3q.2L]||1l.bc;3q.6S=m.4a({},1x);P(A 31 3e 1x){A e=1I m.fx(el,3q,31);4D=8d(m.9N(el,31))||0;3Y=8d(1x[31]);4E=31!=\'1q\'?\'F\':\'\';e.3s(4D,3Y,4E)}},9N:C(el,1x){q(1d.9M){D 1d.9M.cw(el,G).ci(1x)}J{q(1x==\'1q\')1x=\'5R\';A 3l=el.5G[1x.24(/\\-(\\w)/g,C(a,b){D b.ap()})];q(1x==\'5R\')3l=3l.24(/9U\\(1q=([0-9]+)\\)/,C(a,b){D b/2S});D 3l===\'\'?1:3l}},7l:C(){A d=1d,w=1R,41=d.9p&&d.9p!=\'bt\'?d.5d:d.1f;A b=d.1f;A bk=(w.79&&w.a0)?w.79+w.a0:1l.2R(b.9Y,b.1E),bm=(w.7c&&1R.9V)?w.7c+w.9V:1l.2R(b.b6,b.1N),71=m.1y?41.9Y:(d.5d.8b||51.79),6Z=m.1y?1l.2R(41.b6,41.8a):(d.5d.8a||51.7c);A K=m.1y?41.8b:(d.5d.8b||51.79),N=m.1y?41.8a:51.7c;D{71:1l.2R(71,bk),6Z:1l.2R(6Z,bm),K:K,N:N,6O:m.1y?41.6O:dx,6C:m.1y?41.6C:dm}},6r:C(el){q(/5i/i.1b(el.3L)){A 7y=1d.2B(\'1O\');P(A i=0;i<7y.Y;i++){A u=7y[i].dl;q(u&&u.24(/^.*?#/,\'\')==el.21.31){el=7y[i];4O}}}A p={x:el.4y,y:el.8m};5f(el.bg){el=el.bg;p.x+=el.4y;p.y+=el.8m;q(el!=1d.1f&&el!=1d.5d){p.x-=el.6O;p.y-=el.6C}}D p},2H:C(a,2l,3s,Z){q(!a)a=m.16(\'a\',G,{1o:\'1v\'},m.2a);q(1H a.5S==\'C\')D 2l;q(Z==\'3r\'){P(A i=0;i<m.4B.Y;i++){q(m.4B[i]&&m.4B[i].a==a){m.4B[i].bV();m.4B[i]=G;D 1i}}m.aL=L}1B{1I m.67(a,2l,3s,Z);D 1i}1C(e){D L}},7V:C(a,2l,3s){D m.2H(a,2l,3s,\'3r\')},8K:C(){D m.16(\'O\',{1a:\'M-3r-T\',2e:m.9v(m.9x.aX)})},4G:C(el,3L,1a){A 1k=el.2B(3L);P(A i=0;i<1k.Y;i++){q((1I 4e(1a)).1b(1k[i].1a)){D 1k[i]}}D G},9v:C(s){s=s.24(/\\s/g,\' \');A 2n=/{m\\.11\\.([^}]+)\\}/g,6c=s.2r(2n),11;q(6c)P(A i=0;i<6c.Y;i++){11=6c[i].24(2n,"$1");q(1H m.11[11]!=\'1T\')s=s.24(6c[i],m.11[11])}D s},9E:C(){A 1k=1d.2B(\'a\');P(A i=0;i<1k.Y;i++){A Z=m.aI(1k[i]);q(Z&&!1k[i].aH){(C(){A t=Z;q(m.1z(m,\'dj\',{74:1k[i],Z:t})){1k[i].2o=(Z==\'2I\')?C(){D m.2H(k)}:C(){D m.7V(k,{2G:t})}}})();1k[i].aH=L}}q(!m.aq)3N(m.9E,50);J q(i)m.6F()},aI:C(el){q(el.7x==\'M\')D\'2I\';J q(el.7x==\'M-3d\')D\'3d\';J q(el.7x==\'M-1g\')D\'1g\';J q(el.7x==\'M-3v\')D\'3v\'},8L:C(a){P(A i=0;i<m.5l.Y;i++){q(m.5l[i][0]==a){A c=m.5l[i][1];m.5l[i][1]=c.59(1);D c}}D G},9W:C(e){A 2c=m.6W();P(A i=0;i<2c.55.Y;i++){A a=2c.55[i];q(m.3W(a,\'2G\')==\'3d\'&&m.3W(a,\'88\'))m.2w(m.7u,a)}m.89(0)},89:C(i){q(!m.7u[i])D;A a=m.7u[i];A 5M=m.5L(m.3W(a,\'8F\'));q(!5M)5M=m.8K();A 3d=1I m.7v(a,5M,1);3d.9k=C(){};3d.3t=C(){m.2w(m.5l,[a,5M]);m.89(i+1)};3d.8S()},aV:C(){A 7Y=0,6D=-1,18=m.18,B,1J;P(A i=0;i<18.Y;i++){B=18[i];q(B){1J=B.R.E.1J;q(1J&&1J>7Y){7Y=1J;6D=i}}}q(6D==-1)m.30=-1;J 18[6D].43()},3W:C(a,5T){a.5S=a.2o;A p=a.5S?a.5S():G;a.5S=G;D(p&&1H p[5T]!=\'1T\')?p[5T]:(1H m[5T]!=\'1T\'?m[5T]:G)},7t:C(a){A 1m=m.3W(a,\'1m\');q(1m)D 1m;D a.1Y},5L:C(1D){A 1L=m.$(1D),4H=m.7X[1D],a={};q(!1L&&!4H)D G;q(!4H){4H=1L.59(L);4H.1D=\'\';m.7X[1D]=4H;D 1L}J{D 4H.59(L)}},52:C(d){m.7O.1W(d);m.7O.2e=\'\'},1F:C(B){q(!m.2A){m.2A=m.16(\'O\',{1a:\'M-dH\',5W:\'\',2o:C(){q(m.1z(m,\'dG\'))m.28()}},{1j:\'2m\',1n:\'29\',W:0,1q:0},m.2a,L);m.2z(1R,\'3C\',m.4L)}m.2A.E.1o=\'\';m.4L();m.2A.5W+=\'|\'+B.S;q(m.5X&&m.aN)m.Q(m.2A,{6P:\'7w(\'+m.4Y+\'dJ.a5)\',1q:1});J m.22(m.2A,{1q:B.4f},m.7M)},9l:C(S){q(!m.2A)D;q(1H S!=\'1T\')m.2A.5W=m.2A.5W.24(\'|\'+S,\'\');q((1H S!=\'1T\'&&m.2A.5W!=\'\')||(m.2v&&m.3W(m.2v,\'4f\')))D;q(m.5X&&m.aN)m.Q(m.2A,{6P:\'1v\',K:0,N:0});J m.22(m.2A,{1q:0},m.7M,G,C(){m.Q(m.2A,{1o:\'1v\',K:0,N:0})})},4L:C(B){q(!m.2A)D;A h=(m.1y&&B&&B.R)?2q(B.R.E.U)+2q(B.R.E.N)+(B.19?B.19.1r:0):0;m.Q(m.2A,{K:m.3p.71+\'F\',N:1l.2R(m.3p.6Z,h)+\'F\'})},95:C(4M,B){A 1e=B=B||m.3c();q(m.2v)D 1i;J m.1e=1e;1B{m.2v=4M;4M.2o()}1C(e){m.1e=m.2v=G}1B{q(!4M||B.3n[1]!=\'49\')B.28()}1C(e){}D 1i},73:C(el,2k){A B=m.3c(el);q(B){4M=B.7B(2k);D m.95(4M,B)}J D 1i},3a:C(el){D m.73(el,-1)},1G:C(el){D m.73(el,1)},7b:C(e){q(!e)e=1R.2J;q(!e.2O)e.2O=e.7H;q(1H e.2O.aT!=\'1T\')D L;q(!m.1z(m,\'dA\',e))D L;A B=m.3c();A 2k=G;9P(e.dC){2i 70:q(B)B.6Y();D L;2i 32:2k=2;4O;2i 34:2i 39:2i 40:2k=1;4O;2i 8:2i 33:2i 37:2i 38:2k=-1;4O;2i 27:2i 13:2k=0}q(2k!==G){q(2k!=2)m.4X(1d,1R.3I?\'92\':\'91\',m.7b);q(!m.aP)D L;q(e.5k)e.5k();J e.aK=1i;q(B){q(2k==0){B.28()}J q(2k==2){q(B.1p)B.1p.b7()}J{q(B.1p)B.1p.3j();m.73(B.S,2k)}D 1i}}D L},cz:C(14){m.2w(m.1S,14)},cB:C(1u){A 35=1u.2P;q(1H 35==\'7f\'){P(A i=0;i<35.Y;i++){A o={};P(A x 3e 1u)o[x]=1u[x];o.2P=35[i];m.2w(m.5P,o)}}J{m.2w(m.5P,1u)}},9O:C(74,6X){A el,2n=/^M-R-([0-9]+)$/;el=74;5f(el.21){q(el.6y!==1T)D el.6y;q(el.1D&&2n.1b(el.1D))D el.1D.24(2n,"$1");el=el.21}q(!6X){el=74;5f(el.21){q(el.3L&&m.6v(el)){P(A S=0;S<m.18.Y;S++){A B=m.18[S];q(B&&B.a==el)D S}}el=el.21}}D G},3c:C(el,6X){q(1H el==\'1T\')D m.18[m.30]||G;q(1H el==\'3E\')D m.18[el]||G;q(1H el==\'8Z\')el=m.$(el);D m.18[m.9O(el,6X)]||G},6v:C(a){D(a.2o&&a.2o.bA().24(/\\s/g,\' \').2r(/m.(cM|e)d6/))},ch:C(){P(A i=0;i<m.18.Y;i++)q(m.18[i]&&m.18[i].60)m.aV()},1z:C(64,7N,36){D 64&&64[7N]?(64[7N](64,36)!==1i):L},9C:C(e){q(!e)e=1R.2J;q(e.cW>1)D L;q(!e.2O)e.2O=e.7H;A el=e.2O;5f(el.21&&!(/M-(2I|3w|3r|3C)/.1b(el.1a))){el=el.21}A B=m.3c(el);q(B&&(B.65||!B.60))D L;q(B&&e.Z==\'9L\'){q(e.2O.aT)D L;A 2r=el.1a.2r(/M-(2I|3w|3C)/);q(2r){m.2y={B:B,Z:2r[1],W:B.x.H,K:B.x.I,U:B.y.H,N:B.y.I,aD:e.6j,aC:e.6w};m.2z(1d,\'6g\',m.6k);q(e.5k)e.5k();q(/M-(2I|3r)-9K/.1b(B.T.1a)){B.43();m.7L=L}D 1i}J q(/M-3r/.1b(el.1a)&&m.30!=B.S){B.43();B.5h(\'1s\')}}J q(e.Z==\'9Q\'){m.4X(1d,\'6g\',m.6k);q(m.2y){q(m.4W&&m.2y.Z==\'2I\')m.2y.B.T.E.4h=m.4W;A 3A=m.2y.3A;q(!3A&&!m.7L&&!/(3w|3C)/.1b(m.2y.Z)){q(m.1z(B,\'cP\'))B.28()}J q(3A||(!3A&&m.aL)){m.2y.B.5h(\'1s\')}q(m.2y.B.3M)m.2y.B.3M.E.1o=\'1v\';q(3A)m.1z(m.2y.B,\'cN\',m.2y);q(3A)m.4L(B);m.7L=1i;m.2y=G}J q(/M-2I-9K/.1b(el.1a)){el.E.4h=m.4W}}D 1i},6k:C(e){q(!m.2y)D L;q(!e)e=1R.2J;A a=m.2y,B=a.B;q(B.1g){q(!B.3M)B.3M=m.16(\'O\',G,{1j:\'2m\',K:B.x.I+\'F\',N:B.y.I+\'F\',W:B.x.cb+\'F\',U:B.y.cb+\'F\',1J:4,6P:(m.1y?\'cS\':\'1v\'),1q:.cV},B.R,L);q(B.3M.E.1o==\'1v\')B.3M.E.1o=\'\'}a.dX=e.6j-a.aD;a.dY=e.6w-a.aC;A 7K=1l.d9(1l.aB(a.dX,2)+1l.aB(a.dY,2));q(!a.3A)a.3A=(a.Z!=\'2I\'&&7K>0)||(7K>(m.f0||5));q(a.3A&&e.6j>5&&e.6w>5){q(!m.1z(B,\'eY\',a))D 1i;q(a.Z==\'3C\')B.3C(a);J{B.9h(a.W+a.dX,a.U+a.dY);q(a.Z==\'2I\')B.T.E.4h=\'3w\'}}D 1i},ak:C(e){1B{q(!e)e=1R.2J;A 58=/eW/i.1b(e.Z);q(!e.2O)e.2O=e.7H;q(m.1y)e.7I=58?e.f1:e.f2;A B=m.3c(e.2O);q(!B.60)D;q(!B||!e.7I||m.3c(e.7I,L)==B||m.2y)D;m.1z(B,58?\'f4\':\'f3\',e);P(A i=0;i<B.1S.Y;i++)(C(){A o=m.$(\'2g\'+B.1S[i]);q(o&&o.78){q(58)m.Q(o,{1n:\'29\'});m.22(o,{1q:58?o.1q:0},o.2C,G,58?G:C(){m.Q(o,{1n:\'1s\'})})}})()}1C(e){}},2z:C(el,2J,3V){1B{el.2z(2J,3V,1i)}1C(e){1B{el.aA(\'5p\'+2J,3V);el.eU(\'5p\'+2J,3V)}1C(e){el[\'5p\'+2J]=3V}}},4X:C(el,2J,3V){1B{el.4X(2J,3V,1i)}1C(e){1B{el.aA(\'5p\'+2J,3V)}1C(e){el[\'5p\'+2J]=G}}},6T:C(i){q(m.7G&&m.5F[i]&&m.5F[i]!=\'1T\'){A 1O=1d.16(\'1O\');1O.4m=C(){1O=G;m.6T(i+1)};1O.1m=m.5F[i]}},b1:C(3E){q(3E&&1H 3E!=\'7f\')m.7J=3E;A 2c=m.6W();P(A i=0;i<2c.54.Y&&i<m.7J;i++){m.2w(m.5F,m.7t(2c.54[i]))}q(m.1U)1I m.5N(m.1U,C(){m.6T(0)});J m.6T(0);q(m.66)A 5e=m.16(\'1O\',{1m:m.4Y+m.66})},6L:C(){q(!m.2a){m.3p=m.7l();m.4N=m.1y&&m.4t<7;m.aj=m.4N&&8J.eL==\'dP:\';P(A x 3e m.6A){q(1H m[x]!=\'1T\')m.11[x]=m[x];J q(1H m.11[x]==\'1T\'&&1H m.6A[x]!=\'1T\')m.11[x]=m.6A[x]}m.2a=m.16(\'O\',{1a:\'M-2a\'},{1j:\'2m\',W:0,U:0,K:\'2S%\',1J:m.4x,8O:\'aG\'},1d.1f,L);m.2s=m.16(\'a\',{1a:\'M-2s\',2h:m.11.aY,2e:m.11.bf,1Y:\'bH:;\'},{1j:\'2m\',U:\'-4s\',1q:m.be,1J:1},m.2a);m.7O=m.16(\'O\',G,{1o:\'1v\'},m.2a);m.2Z=m.16(\'O\',{1a:\'M-2Z\'},G,m.2a,1);m.3z=m.16(\'O\',G,{cc:\'cr\',eO:\'eP\'},G,L);1l.eT=C(t,b,c,d){D c*t/d+b};1l.bc=C(t,b,c,d){D c*(t/=d)*t+b};1l.8Y=C(t,b,c,d){D-c*(t/=d)*(t-2)+b};m.c8=m.4N;m.cp=((1R.3I&&m.4t<9)||5g.bD==\'bC\'||(m.1y&&m.4t<5.5));m.1z(k,\'eS\')}},aJ:C(){m.am=L;q(m.8D)m.8D()},6F:C(){A el,1k,5w=[],54=[],55=[],3i={},2n;P(A i=0;i<m.7P.Y;i++){1k=1d.2B(m.7P[i]);P(A j=0;j<1k.Y;j++){el=1k[j];2n=m.6v(el);q(2n){m.2w(5w,el);q(2n[0]==\'m.2H\')m.2w(54,el);J q(2n[0]==\'m.7V\')m.2w(55,el);A g=m.3W(el,\'2P\')||\'1v\';q(!3i[g])3i[g]=[];m.2w(3i[g],el)}}}m.4J={5w:5w,3i:3i,54:54,55:55};D m.4J},6W:C(){D m.4J||m.6F()},28:C(el){A B=m.3c(el);q(B)B.28();D 1i}};m.fx=C(3b,1u,1x){k.1u=1u;k.3b=3b;k.1x=1x;q(!1u.bi)1u.bi={}};m.fx.5c={7Q:C(){(m.fx.3Q[k.1x]||m.fx.3Q.bn)(k);q(k.1u.3Q)k.1u.3Q.b5(k.3b,k.4u,k)},3s:C(bl,26,4E){k.7U=(1I 7q()).7r();k.4D=bl;k.3Y=26;k.4E=4E;k.4u=k.4D;k.H=k.7T=0;A 51=k;C t(6R){D 51.3Q(6R)}t.3b=k.3b;q(t()&&m.42.2w(t)==1){m.ba=fq(C(){A 42=m.42;P(A i=0;i<42.Y;i++)q(!42[i]())42.fp(i--,1);q(!42.Y){fm(m.ba)}},13)}},3Q:C(6R){A t=(1I 7q()).7r();q(6R||t>=k.1u.44+k.7U){k.4u=k.3Y;k.H=k.7T=1;k.7Q();k.1u.6S[k.1x]=L;A 7W=L;P(A i 3e k.1u.6S)q(k.1u.6S[i]!==L)7W=1i;q(7W){q(k.1u.7a)k.1u.7a.b5(k.3b)}D 1i}J{A n=t-k.7U;k.7T=n/k.1u.44;k.H=k.1u.2L(n,0,1,k.1u.44);k.4u=k.4D+((k.3Y-k.4D)*k.H);k.7Q()}D L}};m.4a(m.fx,{3Q:{1q:C(fx){m.Q(fx.3b,{1q:fx.4u})},bn:C(fx){q(fx.3b.E&&fx.3b.E[fx.1x]!=G)fx.3b.E[fx.1x]=fx.4u+fx.4E;J fx.3b[fx.1x]=fx.4u}}});m.5N=C(1U,3t){k.3t=3t;k.1U=1U;A v=m.4t,46;k.7R=m.1y&&v>=5.5&&v<7;q(!1U){q(3t)3t();D}m.6L();k.2f=m.16(\'2f\',{fl:0},{1n:\'1s\',1j:\'2m\',fd:\'fc\',K:0},m.2a,L);A 4v=m.16(\'4v\',G,G,k.2f,1);k.2F=[];P(A i=0;i<=8;i++){q(i%3==0)46=m.16(\'46\',G,{N:\'1Z\'},4v,L);k.2F[i]=m.16(\'2F\',G,G,46,L);A E=i!=4?{fb:0,f9:0}:{1j:\'4l\'};m.Q(k.2F[i],E)}k.2F[4].1a=1U+\' M-19\';k.a1()};m.5N.5c={a1:C(){A 1m=m.4Y+(m.fa||"fe/")+k.1U+".a5";A a4=m.5b?m.2a:G;k.3K=m.16(\'1O\',G,{1j:\'2m\',U:\'-4s\'},a4,L);A 3x=k;k.3K.4m=C(){3x.a3()};k.3K.1m=1m},a3:C(){A o=k.1r=k.3K.K/4,H=[[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]],1F={N:(2*o)+\'F\',K:(2*o)+\'F\'};P(A i=0;i<=8;i++){q(H[i]){q(k.7R){A w=(i==1||i==7)?\'2S%\':k.3K.K+\'F\';A O=m.16(\'O\',G,{K:\'2S%\',N:\'2S%\',1j:\'4l\',2p:\'1s\'},k.2F[i],L);m.16(\'O\',G,{5R:"fg:fk.ag.eI(e9=e8, 1m=\'"+k.3K.1m+"\')",1j:\'2m\',K:w,N:k.3K.N+\'F\',W:(H[i][0]*o)+\'F\',U:(H[i][1]*o)+\'F\'},O,L)}J{m.Q(k.2F[i],{6P:\'7w(\'+k.3K.1m+\') \'+(H[i][0]*o)+\'F \'+(H[i][1]*o)+\'F\'})}q(1R.3I&&(i==3||i==5))m.16(\'O\',G,1F,k.2F[i],L);m.Q(k.2F[i],1F)}}k.3K=G;q(m.4o[k.1U])m.4o[k.1U].6b();m.4o[k.1U]=k;q(k.3t)k.3t()},4p:C(9T,1r,9R,2C,2L){A B=k.B,3D=B.R.E,1r=1r||0,H=9T?{x:2q(3D.W),y:2q(3D.U),w:2q(3D.K),h:2q(3D.N)}:{x:B.x.H+1r,y:B.y.H+1r,w:B.x.V(\'23\')-2*1r,h:B.y.V(\'23\')-2*1r};q(9R)k.2f.E.1n=(H.h>=4*k.1r)?\'29\':\'1s\';m.Q(k.2f,{W:(H.x-k.1r)+\'F\',U:(H.y-k.1r)+\'F\',K:(H.w+2*k.1r)+\'F\'});H.w-=2*k.1r;H.h-=2*k.1r;m.Q(k.2F[4],{K:H.w>=0?H.w+\'F\':0,N:H.h>=0?H.h+\'F\':0});q(k.7R)k.2F[3].E.N=k.2F[5].E.N=k.2F[4].E.N},6b:C(9S){q(9S)k.2f.E.1n=\'1s\';J m.52(k.2f)}};m.6N=C(B,1F){k.B=B;k.1F=1F;k.3m=1F==\'x\'?\'bh\':\'bd\';k.3k=k.3m.5x();k.5V=1F==\'x\'?\'aZ\':\'b2\';k.6B=k.5V.5x();k.7S=1F==\'x\'?\'bb\':\'bj\';k.ax=k.7S.5x();k.1h=k.3u=0};m.6N.5c={V:C(S){9P(S){2i\'8z\':D k.2b+k.3g+(k.t-m.2s[\'1r\'+k.3m])/2;2i\'8E\':D k.H+k.cb+k.1h+(k.I-m.2s[\'1r\'+k.3m])/2;2i\'23\':D k.I+2*k.cb+k.1h+k.3u;2i\'63\':D k.4k-k.3o-k.4j;2i\'5o\':D k.H-(k.B.19?k.B.19.1r:0);2i\'8N\':D k.V(\'23\')+(k.B.19?2*k.B.19.1r:0);2i\'2j\':D k.1V?1l.4P((k.I-k.1V)/2):0}},8I:C(){k.cb=(k.B.T[\'1r\'+k.3m]-k.t)/2;k.4j=m[\'8f\'+k.7S]+2*k.cb},8A:C(){k.t=k.B.el[k.3k]?2q(k.B.el[k.3k]):k.B.el[\'1r\'+k.3m];k.2b=k.B.2b[k.1F];k.3g=(k.B.el[\'1r\'+k.3m]-k.t)/2;q(k.2b==0){k.2b=(m.3p[k.3k]/2)+m.3p[\'2d\'+k.5V]}},8G:C(){A B=k.B;k.2T=\'1Z\';q(B.8e==\'4n\')k.2T=\'4n\';J q(1I 4e(k.6B).1b(B.48))k.2T=G;J q(1I 4e(k.ax).1b(B.48))k.2T=\'2R\';k.H=k.2b-k.cb+k.3g;k.I=1l.3y(k.1c,B[\'2R\'+k.3m]||k.1c);k.2M=B.5s?1l.3y(B[\'3y\'+k.3m],k.1c):k.1c;q(B.2Q&&B.3H){k.I=B[k.3k];k.1V=k.1c}q(k.1F==\'x\'&&m.5y)k.2M=B.4d;k.2O=B[\'2O\'+k.1F.ap()];k.3o=m[\'8f\'+k.5V];k.2d=m.3p[\'2d\'+k.5V];k.4k=m.3p[k.3k]},7m:C(i){A B=k.B;q(B.2Q&&(B.3H||m.5y)){k.1V=i;k.I=1l.2R(k.I,k.1V);B.T.E[k.6B]=k.V(\'2j\')+\'F\'}J k.I=i;B.T.E[k.3k]=i+\'F\';B.R.E[k.3k]=k.V(\'23\')+\'F\';q(B.19)B.19.4p();q(B.3M)B.3M.E[k.3k]=i+\'F\';q(B.2D){A d=B.2x;q(k.8C===1T)k.8C=B.1w[\'1r\'+k.3m]-d[\'1r\'+k.3m];d.E[k.3k]=(k.I-k.8C)+\'F\';q(k.1F==\'x\')B.4b.E.K=\'1Z\';q(B.1f)B.1f.E[k.3k]=\'1Z\'}q(k.1F==\'x\'&&B.1t)B.5a(L);q(k.1F==\'x\'&&B.1p&&B.2Q){q(i==k.1c)B.1p.5j(\'1c-2H\');J B.1p.4A(\'1c-2H\')}},9B:C(i){k.H=i;k.B.R.E[k.6B]=i+\'F\';q(k.B.19)k.B.19.4p()}};m.67=C(a,2l,3s,3f){q(1d.9H&&m.1y&&!m.am){m.8D=C(){1I m.67(a,2l,3s,3f)};D}k.a=a;k.3s=3s;k.3f=3f||\'2I\';k.2D=(3f==\'3r\');k.2Q=!k.2D;m.7G=1i;k.1S=[];k.1e=m.1e;m.1e=G;m.6L();A S=k.S=m.18.Y;P(A i=0;i<m.8B.Y;i++){A 31=m.8B[i];k[31]=2l&&1H 2l[31]!=\'1T\'?2l[31]:m[31]}q(!k.1m)k.1m=a.1Y;A el=(2l&&2l.9r)?m.$(2l.9r):a;el=k.ar=el.2B(\'1O\')[0]||el;k.6h=el.1D||a.1D;q(!m.1z(k,\'dS\'))D L;P(A i=0;i<m.18.Y;i++){q(m.18[i]&&m.18[i].a==a&&!(k.1e&&k.3n[1]==\'49\')){m.18[i].43();D 1i}}P(A i=0;i<m.18.Y;i++){q(m.18[i]&&m.18[i].ar!=el&&!m.18[i].7o){m.18[i].7p()}}m.18[k.S]=k;q(!m.98&&!m.2v){q(m.18[S-1])m.18[S-1].28();q(1H m.30!=\'1T\'&&m.18[m.30])m.18[m.30].28()}k.el=el;k.2b=m.6r(el);m.3p=m.7l();A x=k.x=1I m.6N(k,\'x\');x.8A();A y=k.y=1I m.6N(k,\'y\');y.8A();q(/5i/i.1b(el.3L))k.bB(el);k.R=m.16(\'O\',{1D:\'M-R-\'+k.S,1a:k.7h},{1n:\'1s\',1j:\'2m\',1J:m.4x++},G,L);k.R.dV=k.R.dW=m.ak;q(k.3f==\'2I\'&&k.3P==2)k.3P=0;q(!k.1U||(k.1e&&k.2Q&&k.3n[1]==\'49\')){k[k.3f+\'8x\']()}J q(m.4o[k.1U]){k.8y();k[k.3f+\'8x\']()}J{k.68();A B=k;1I m.5N(k.1U,C(){B.8y();B[B.3f+\'8x\']()})}D L};m.67.5c={9i:C(e){1R.8J.1Y=k.1m},8y:C(){A 19=k.19=m.4o[k.1U];19.B=k;19.2f.E.1J=k.R.E.1J;m.4o[k.1U]=G},68:C(){q(k.7o||k.2s)D;k.2s=m.2s;A B=k;k.2s.2o=C(){B.7p()};q(!m.1z(k,\'e0\'))D;A B=k,l=k.x.V(\'8z\')+\'F\',t=k.y.V(\'8z\')+\'F\';q(!2N&&k.1e&&k.3n[1]==\'49\')A 2N=k.1e;q(2N){l=2N.x.V(\'8E\')+\'F\';t=2N.y.V(\'8E\')+\'F\';k.2s.E.1J=m.4x++}3N(C(){q(B.2s)m.Q(B.2s,{W:l,U:t,1J:m.4x++})},2S)},eh:C(){A B=k;A 1O=1d.16(\'1O\');k.T=1O;1O.4m=C(){q(m.18[B.S])B.69()};q(m.eA)1O.ez=C(){D 1i};1O.1a=\'M-2I\';m.Q(1O,{1n:\'1s\',1o:\'3B\',1j:\'2m\',ab:\'4s\',1J:3});1O.2h=m.11.9I;q(m.5b)m.2a.1W(1O);q(m.1y&&m.ey)1O.1m=G;1O.1m=k.1m;k.68()},ew:C(){q(!m.1z(k,\'ex\'))D;k.T=m.8L(k.a);q(!k.T)k.T=m.5L(k.8F);q(!k.T)k.T=m.8K();k.9b([\'76\']);q(k.76){A 1f=m.4G(k.T,\'O\',\'M-1f\');q(1f)1f.1W(k.76);k.76.E.1o=\'3B\'}m.1z(k,\'eF\');k.1w=k.T;q(/(3v|1g)/.1b(k.2G))k.8k(k.1w);m.2a.1W(k.R);m.Q(k.R,{1j:\'eE\',8l:\'0 \'+m.8W+\'F 0 \'+m.4V+\'F\'});k.T=m.16(\'O\',{1a:\'M-3r\'},{1j:\'4l\',1J:3,2p:\'1s\'},k.R);k.4b=m.16(\'O\',G,G,k.T,1);k.4b.1W(k.1w);m.Q(k.1w,{1j:\'4l\',1o:\'3B\',8O:m.11.9A||\'\'});q(k.K)k.1w.E.K=k.K+\'F\';q(k.N)k.1w.E.N=k.N+\'F\';q(k.1w.1E<k.4d)k.1w.E.K=k.4d+\'F\';q(k.2G==\'3d\'&&!m.8L(k.a)){k.68();A 3d=1I m.7v(k.a,k.1w);A B=k;3d.3t=C(){q(m.18[B.S])B.69()};3d.9k=C(){8J.1Y=B.1m};3d.8S()}J q(k.2G==\'1g\'&&k.3F==\'5D\'){k.77()}J k.69()},69:C(){1B{q(!k.T)D;k.T.4m=G;q(k.7o)D;J k.7o=L;A x=k.x,y=k.y;q(k.2s){m.Q(k.2s,{U:\'-4s\'});k.2s=G;m.1z(k,\'cg\')}q(k.2Q){x.1c=k.T.K;y.1c=k.T.N;m.Q(k.T,{K:x.t+\'F\',N:y.t+\'F\'});k.R.1W(k.T);m.2a.1W(k.R)}J q(k.8v)k.8v();x.8I();y.8I();m.Q(k.R,{W:(x.2b+x.3g-x.cb)+\'F\',U:(y.2b+x.3g-y.cb)+\'F\'});k.97();k.c3();A 2U=x.1c/y.1c;x.8G();k.2T(x);y.8G();k.2T(y);q(k.2D)k.cv();q(k.1t)k.5a(0,1);q(k.5s){q(k.2Q)k.bM(2U);J k.8i();A 1M=k.1p;q(1M&&k.1e&&1M.2V&&1M.ai){A H=1M.cu.1j||\'\',p;P(A 1F 3e m.8H)P(A i=0;i<5;i++){p=k[1F];q(H.2r(m.8H[1F][i])){p.H=k.1e[1F].H+(k.1e[1F].1h-p.1h)+(k.1e[1F].I-p.I)*[0,0,.5,1,1][i];q(1M.ai==\'em\'){q(p.H+p.I+p.1h+p.3u>p.2d+p.4k-p.4j)p.H=p.2d+p.4k-p.I-p.3o-p.4j-p.1h-p.3u;q(p.H<p.2d+p.3o)p.H=p.2d+p.3o}}}}q(k.2Q&&k.x.1c>(k.x.1V||k.x.I)){k.bL();q(k.1S.Y==1)k.5a()}}k.96()}1C(e){k.9i(e)}},8k:C(6a,1Z){A c=m.4G(6a,\'6G\',\'M-1f\');q(/(1g|3v)/.1b(k.2G)){q(k.3T)c.E.K=k.3T+\'F\';q(k.56)c.E.N=k.56+\'F\'}},77:C(){q(k.cs)D;A B=k;k.1f=m.4G(k.1w,\'6G\',\'M-1f\');q(k.2G==\'1g\'){k.68();A 5E=m.3z.59(1);k.1f.1W(5E);k.ej=k.1w.1E;q(!k.3T)k.3T=5E.1E;A 4K=k.1w.1N-k.1f.1N,h=k.56||m.3p.N-4K-m.62-m.6z,4m=k.3F==\'5D\'?\' 4m="q (m.18[\'+k.S+\']) m.18[\'+k.S+\'].69()" \':\'\';k.1f.2e+=\'<1g 31="m\'+(1I 7q()).7r()+\'" et="0" S="\'+k.S+\'" \'+\' es="L" E="K:\'+k.3T+\'F; N:\'+h+\'F" \'+4m+\' 1m="\'+k.1m+\'"></1g>\';k.5E=k.1f.2B(\'O\')[0];k.1g=k.1f.2B(\'1g\')[0];q(k.3F==\'5U\')k.8g()}q(k.2G==\'3v\'){k.1f.1D=k.1f.1D||\'m-eq-1D-\'+k.S;A a=k.8w;q(1H a.2l.bQ==\'1T\')a.2l.bQ=\'er\';q(9a)9a.eo(k.1m,k.1f.1D,k.3T,k.56,a.ei||\'7\',a.ek,a.cl,a.2l,a.cm)}k.cs=L},8v:C(){q(k.1g&&!k.56){k.1g.E.N=k.1f.E.N=k.8n()+\'F\'}k.1w.1W(m.3z);q(!k.x.1c)k.x.1c=k.1w.1E;k.y.1c=k.1w.1N;k.1w.9o(m.3z);q(m.1y&&k.cn>2q(k.1w.5G.N)){k.cn=2q(k.1w.5G.N)}m.Q(k.R,{1j:\'2m\',8l:\'0\'});m.Q(k.T,{K:k.x.t+\'F\',N:k.y.t+\'F\'})},8n:C(){A h;1B{A 2E=k.1g.9e||k.1g.5Y.1d;A 3z=2E.16(\'O\');3z.E.cc=\'cr\';2E.1f.1W(3z);h=3z.8m;q(m.1y)h+=2q(2E.1f.5G.62)+2q(2E.1f.5G.6z)-1}1C(e){h=dR}D h},8g:C(){A 4T=k.1w.1E-k.5E.1E;q(4T<0)4T=0;A 4K=k.1w.1N-k.1g.1N;m.Q(k.1g,{K:(k.x.I-4T)+\'F\',N:(k.y.I-4K)+\'F\'});m.Q(k.1f,{K:k.1g.E.K,N:k.1g.E.N});k.4U=k.1g;k.2x=k.4U},cv:C(){k.8k(k.1w);q(k.2G==\'3v\'&&k.3F==\'5D\')k.77();q(k.x.I<k.x.1c&&!k.7k)k.x.I=k.x.1c;q(k.y.I<k.y.1c&&!k.8j)k.y.I=k.y.1c;k.2x=k.1w;m.Q(k.4b,{1j:\'4l\',K:k.x.I+\'F\'});m.Q(k.1w,{8p:\'1v\',K:\'1Z\',N:\'1Z\'});A 1L=m.4G(k.1w,\'6G\',\'M-1f\');q(1L&&!/(1g|3v)/.1b(k.2G)){A 4S=1L;1L=m.16(4S.e4,G,{2p:\'1s\'},G,L);4S.21.ec(1L,4S);1L.1W(m.3z);1L.1W(4S);A 4T=k.1w.1E-1L.1E;A 4K=k.1w.1N-1L.1N;1L.9o(m.3z);A 7e=m.5b||5g.bD==\'bC\'?1:0;m.Q(1L,{K:(k.x.I-4T-7e)+\'F\',N:(k.y.I-4K)+\'F\',2p:\'1Z\',1j:\'4l\'});q(7e&&4S.1N>1L.1N){1L.E.K=(2q(1L.E.K)+7e)+\'F\'}k.4U=1L;k.2x=k.4U}q(k.1g&&k.3F==\'5D\')k.8g();q(!k.4U&&k.y.I<k.4b.1N)k.2x=k.T;q(k.2x==k.T&&!k.7k&&!/(1g|3v)/.1b(k.2G)){k.x.I+=17}q(k.2x&&k.2x.1N>k.2x.21.1N){3N("1B { m.18["+k.S+"].2x.E.2p = \'1Z\'; } 1C(e) {}",m.6u)}},bB:C(5i){A c=5i.e7.9j(\',\');P(A i=0;i<c.Y;i++)c[i]=2q(c[i]);q(5i.fh.5x()==\'fj\'){k.x.2b+=c[0]-c[2];k.y.2b+=c[1]-c[2];k.x.t=k.y.t=2*c[2]}J{A 5z,5t,5A=5z=c[0],5B=5t=c[1];P(A i=0;i<c.Y;i++){q(i%2==0){5A=1l.3y(5A,c[i]);5z=1l.2R(5z,c[i])}J{5B=1l.3y(5B,c[i]);5t=1l.2R(5t,c[i])}}k.x.2b+=5A;k.x.t=5z-5A;k.y.2b+=5B;k.y.t=5t-5B}},2T:C(p,4Z){A 4i,2N=p.2O,1F=p==k.x?\'x\':\'y\';q(2N&&2N.2r(/ /)){4i=2N.9j(\' \');2N=4i[0]}q(2N&&m.$(2N)){p.H=m.6r(m.$(2N))[1F];q(4i&&4i[1]&&4i[1].2r(/^[-]?[0-9]+F$/))p.H+=2q(4i[1]);q(p.I<p.2M)p.I=p.2M}J q(p.2T==\'1Z\'||p.2T==\'4n\'){A 8h=1i;A 57=p.B.5s;q(p.2T==\'4n\')p.H=1l.4P(p.2d+(p.4k+p.3o-p.4j-p.V(\'23\'))/2);J p.H=1l.4P(p.H-((p.V(\'23\')-p.t)/2));q(p.H<p.2d+p.3o){p.H=p.2d+p.3o;8h=L}q(!4Z&&p.I<p.2M){p.I=p.2M;57=1i}q(p.H+p.V(\'23\')>p.2d+p.4k-p.4j){q(!4Z&&8h&&57){p.I=p.V(\'63\')}J q(p.V(\'23\')<p.V(\'63\')){p.H=p.2d+p.4k-p.4j-p.V(\'23\')}J{p.H=p.2d+p.3o;q(!4Z&&57)p.I=p.V(\'63\')}}q(!4Z&&p.I<p.2M){p.I=p.2M;57=1i}}J q(p.2T==\'2R\'){p.H=1l.fv(p.H-p.I+p.t)}q(p.H<p.3o){A bv=p.H;p.H=p.3o;q(57&&!4Z)p.I=p.I-(p.H-bv)}},bM:C(2U){A x=k.x,y=k.y,6s=1i,2Y=1l.3y(x.1c,x.I),47=1l.3y(y.1c,y.I),3H=(k.3H||m.5y);q(2Y/47>2U){ 2Y=47*2U;q(2Y<x.2M){2Y=x.2M;47=2Y/2U}6s=L}J q(2Y/47<2U){ 47=2Y/2U;6s=L}q(m.5y&&x.1c<x.2M){x.1V=x.1c;y.I=y.1V=y.1c}J q(k.3H){x.1V=2Y;y.1V=47}J{x.I=2Y;y.I=47}k.8i(3H?G:2U);q(3H&&y.I<y.1V){y.1V=y.I;x.1V=y.I*2U}q(6s||3H){x.H=x.2b-x.cb+x.3g;x.2M=x.I;k.2T(x,L);y.H=y.2b-y.cb+y.3g;y.2M=y.I;k.2T(y,L);q(k.1t)k.5a()}},8i:C(2U){A x=k.x,y=k.y;q(k.1t){5f(y.I>k.5O&&x.I>k.4d&&y.V(\'23\')>y.V(\'63\')){y.I-=10;q(2U)x.I=y.I*2U;k.5a(0,1)}}},f8:C(){q(k.2x){A h=/1g/i.1b(k.2x.3L)?k.8n()+1+\'F\':\'1Z\';q(k.1f)k.1f.E.N=h;k.2x.E.N=h;k.y.7m(k.1w.1N);m.4L(k)}},96:C(){A x=k.x,y=k.y;k.5h(\'1s\');m.1z(k,\'f7\');q(k.1p&&k.1p.2W)k.1p.2W.53();k.94(1,{R:{K:x.V(\'23\'),N:y.V(\'23\'),W:x.H,U:y.H},T:{W:x.1h+x.V(\'2j\'),U:y.1h+y.V(\'2j\'),K:x.1V||x.I,N:y.1V||y.I}},m.6u)},94:C(1P,26,2C){A 61=k.3n,8o=1P?(k.1e?k.1e.a:G):m.2v,t=(61[1]&&8o&&m.3W(8o,\'3n\')[1]==61[1])?61[1]:61[0];q(k[t]&&t!=\'2H\'){k[t](1P,26);D}q(k.19&&!k.3P){q(1P)k.19.4p();J k.19.6b((k.2D&&k.4g))}q(!1P)k.9w();A B=k,x=B.x,y=B.y,2L=k.2L;q(!1P)2L=k.c4||2L;A 5U=1P?C(){q(B.19)B.19.2f.E.1n="29";3N(C(){B.6K()},50)}:C(){B.5r()};q(1P)m.Q(k.R,{K:x.t+\'F\',N:y.t+\'F\'});q(1P&&k.2D){m.Q(k.R,{W:(x.2b-x.cb+x.3g)+\'F\',U:(y.2b-y.cb+y.3g)+\'F\'})}q(k.8t){m.Q(k.R,{1q:1P?0:1});m.4a(26.R,{1q:1P})}m.22(k.R,26.R,{44:2C,2L:2L,3Q:B.2D?C(3l,36){q(B.19&&B.3P&&36.1x==(B.8t?\'1q\':\'U\'))B.19.4p(1,0,1);q(36.1x==\'W\')B.4b.E.W=(x.H-3l)+\'F\';q(36.1x==\'U\')B.4b.E.U=(y.H-3l)+\'F\'}:G});m.22(k.T,26.T,2C,2L,5U);q(1P){k.R.E.1n=\'29\';k.T.E.1n=\'29\';q(k.2D)k.1w.E.1n=\'29\';k.a.1a+=\' M-4z-48\'}},6e:C(1P,26){k.3P=1i;A B=k,t=1P?m.6u:0;q(1P){m.22(k.R,26.R,0);m.Q(k.R,{1q:0,1n:\'29\'});m.22(k.T,26.T,0);k.T.E.1n=\'29\';m.22(k.R,{1q:1},t,G,C(){B.6K()})}q(k.19){k.19.2f.E.1J=k.R.E.1J;A 6i=1P||-1,1r=k.19.1r,8s=1P?3:1r,8u=1P?1r:3;P(A i=8s;6i*i<=6i*8u;i+=6i,t+=25){(C(){A o=1P?8u-i:8s-i;3N(C(){B.19.4p(0,o,1)},t)})()}}q(1P){}J{3N(C(){q(B.19)B.19.6b(B.4g);B.9w();m.22(B.R,{1q:0},G,G,C(){B.5r()})},t)}},49:C(1P,26){q(!1P)D;A B=k,2C=m.bZ,1e=B.1e,x=B.x,y=B.y,2t=1e.x,2u=1e.y,1t=B.1t,R=k.R,T=k.T;m.4X(1d,\'6g\',m.6k);k.19=1e.19;q(k.19)k.19.B=B;1e.19=G;1e.R.E.2p=\'1s\';m.Q(R,{W:2t.H+\'F\',U:2u.H+\'F\',K:2t.V(\'23\')+\'F\',N:2u.V(\'23\')+\'F\'});m.Q(T,{1o:\'1v\',K:(x.1V||x.I)+\'F\',N:(y.1V||y.I)+\'F\',W:(x.1h+x.V(\'2j\'))+\'F\',U:(y.1h+y.V(\'2j\'))+\'F\'});A 4r=m.16(\'O\',{1a:\'M-2I\'},{1j:\'2m\',1J:4,2p:\'1s\',1o:\'1v\',W:(2t.1h+2t.V(\'2j\'))+\'F\',U:(2u.1h+2u.V(\'2j\'))+\'F\',K:(2t.1V||2t.I)+\'F\',N:(2u.1V||2u.I)+\'F\'});q(k.2D)m.Q(k.4b,{W:0,U:0});q(1t)m.Q(1t,{2p:\'29\',W:(2t.1h+2t.cb)+\'F\',U:(2u.1h+2u.cb)+\'F\',K:2t.I+\'F\',N:2u.I+\'F\'});A 8r={8q:1e,8M:k};P(A n 3e 8r){k[n]=8r[n].T.59(1);m.Q(k[n],{1j:\'2m\',8p:0,1n:\'29\'});4r.1W(k[n])}m.Q(k.8q,{W:0,U:0});m.Q(k.8M,{1o:\'3B\',1q:0,W:(x.H-2t.H+x.1h-2t.1h+x.V(\'2j\')-2t.V(\'2j\'))+\'F\',U:(y.H-2u.H+y.1h-2u.1h+y.V(\'2j\')-2u.V(\'2j\'))+\'F\'});R.1W(4r);q(1t){1t.1a=\'\';R.1W(1t)}4r.E.1o=\'\';1e.T.E.1o=\'1v\';q(m.5b){A 2r=5g.6o.2r(/bS\\/([0-9]{3})/);q(2r&&2q(2r[1])<f5)R.E.1n=\'29\'}C 3Y(){R.E.1n=T.E.1n=\'29\';T.E.1o=\'3B\';4r.E.1o=\'1v\';B.a.1a+=\' M-4z-48\';B.6K();1e.5r()}m.22(1e.R,{W:x.H,U:y.H,K:x.V(\'23\'),N:y.V(\'23\')},2C);m.22(4r,{K:x.1V||x.I,N:y.1V||y.I,W:x.1h+x.V(\'2j\'),U:y.1h+y.V(\'2j\')},2C);m.22(k.8q,{W:(2t.H-x.H+2t.1h-x.1h+2t.V(\'2j\')-x.V(\'2j\')),U:(2u.H-y.H+2u.1h-y.1h+2u.V(\'2j\')-y.V(\'2j\'))},2C);m.22(k.8M,{1q:1,W:0,U:0},2C);q(1t)m.22(1t,{W:x.1h+x.cb,U:y.1h+y.cb,K:x.I,N:y.I},2C);q(k.19)A bR=C(3l,36){q(36.1x==\'U\')B.19.4p(1)};m.22(R,26.R,{44:2C,7a:3Y,3Q:bR});4r.E.1n=\'29\'},bO:C(o,el){q(!k.1e)D 1i;P(A i=0;i<k.1e.1S.Y;i++){A 7s=m.$(\'2g\'+k.1e.1S[i]);q(7s&&7s.2g==o.2g){k.9q();7s.cE=k.S;m.2w(k.1S,k.1e.1S[i]);D L}}D 1i},6K:C(){k.60=L;k.43();q(k.2D&&k.3F==\'5U\')k.77();q(k.1g){1B{A B=k,2E=k.1g.9e||k.1g.5Y.1d;m.2z(2E,\'9L\',C(){q(m.30!=B.S)B.43()})}1C(e){}q(m.1y&&1H k.65!=\'dE\')k.1g.E.K=(k.3T-1)+\'F\'}q(k.4f)m.1F(k);q(m.2v&&m.2v==k.a)m.2v=G;k.ca();A p=m.3p,7A=m.6m.x+p.6O,7C=m.6m.y+p.6C;k.9y=k.x.H<7A&&7A<k.x.H+k.x.V(\'23\')&&k.y.H<7C&&7C<k.y.H+k.y.V(\'23\');q(k.1t)k.bp();m.1z(k,\'de\')},ca:C(){A S=k.S;A 1U=k.1U;1I m.5N(1U,C(){1B{m.18[S].bs()}1C(e){}})},bs:C(){A 1G=k.7B(1);q(1G&&1G.2o.bA().2r(/m\\.2H/))A 1O=m.16(\'1O\',{1m:m.7t(1G)})},7B:C(2k){A 7F=k.6Q(),as=m.4J.3i[k.2P||\'1v\'];q(!as[7F+2k]&&k.1p&&k.1p.9Z){q(2k==1)D as[0];J q(2k==-1)D as[as.Y-1]}D as[7F+2k]||G},6Q:C(){A 2c=m.6W().3i[k.2P||\'1v\'];q(2c)P(A i=0;i<2c.Y;i++){q(2c[i]==k.a)D i}D G},bN:C(){q(k[k.5Q]){A 2c=m.4J.3i[k.2P||\'1v\'];q(2c){A s=m.11.3E.24(\'%1\',k.6Q()+1).24(\'%2\',2c.Y);k[k.5Q].2e=\'<O 1X="M-3E">\'+s+\'</O>\'+k[k.5Q].2e}}},97:C(){q(!k.1e){P(A i=0;i<m.5P.Y;i++){A 1M=m.5P[i],35=1M.2P;q(1H 35==\'1T\'||35===G||35===k.2P)k.1p=1I m.9n(k,1M)}}J{k.1p=k.1e.1p}A 1M=k.1p;q(!1M)D;A B=1M.B=k;1M.9X();1M.5j(\'1c-2H\');q(1M.2V){A o=1M.cu||{};o.4F=1M.2V;o.2g=\'2V\';k.4I(o)}q(1M.2W)1M.2W.6E(k);q(!k.1e&&k.45)1M.3G(L);q(1M.45){1M.45=3N(C(){m.1G(B.S)},(1M.ds||dr))}},7p:C(){m.18[k.S]=G;q(m.2v==k.a)m.2v=G;m.9l(k.S);q(k.2s)m.2s.E.W=\'-4s\';m.1z(k,\'cg\')},bx:C(){q(k.5v)D;k.5v=m.16(\'a\',{1Y:m.cf,1a:\'M-5v\',2e:m.11.ce,2h:m.11.cd});k.4I({4F:k.5v,1j:\'U W\',2g:\'5v\'})},9b:C(7E,cx){P(A i=0;i<7E.Y;i++){A Z=7E[i],s=G;q(Z==\'9c\'&&!m.1z(k,\'dg\'))D;J q(Z==\'4R\'&&!m.1z(k,\'df\'))D;q(!k[Z+\'6p\']&&k.6h)k[Z+\'6p\']=Z+\'-P-\'+k.6h;q(k[Z+\'6p\'])k[Z]=m.5L(k[Z+\'6p\']);q(!k[Z]&&!k[Z+\'7D\']&&k[Z+\'co\'])1B{s=dN(k[Z+\'co\'])}1C(e){}q(!k[Z]&&k[Z+\'7D\']){s=k[Z+\'7D\']}q(!k[Z]&&!s){A 1G=k.a.cy;5f(1G&&!m.6v(1G)){q((1I 4e(\'M-\'+Z)).1b(1G.1a||G)){k[Z]=1G.59(1);4O}1G=1G.cy}}q(!k[Z]&&!s&&k.5Q==Z)s=\'\\n\';q(!k[Z]&&s)k[Z]=m.16(\'O\',{1a:\'M-\'+Z,2e:s});q(cx&&k[Z]){A o={1j:(Z==\'4R\')?\'5m\':\'7g\'};P(A x 3e k[Z+\'bY\'])o[x]=k[Z+\'bY\'][x];o.4F=k[Z];k.4I(o)}}},5h:C(1n){q(m.c8)k.6t(\'fi\',1n);q(m.cp)k.6t(\'dz\',1n);q(m.5X)k.6t(\'*\',1n)},6t:C(3L,1n){A 1k=1d.2B(3L);A 1x=3L==\'*\'?\'2p\':\'1n\';P(A i=0;i<1k.Y;i++){q(1x==\'1n\'||(1d.9M.cw(1k[i],"").ci(\'2p\')==\'1Z\'||1k[i].ck(\'1s-by\')!=G)){A 2X=1k[i].ck(\'1s-by\');q(1n==\'29\'&&2X){2X=2X.24(\'[\'+k.S+\']\',\'\');1k[i].6d(\'1s-by\',2X);q(!2X)1k[i].E[1x]=1k[i].9D}J q(1n==\'1s\'){A 3R=m.6r(1k[i]);3R.w=1k[i].1E;3R.h=1k[i].1N;q(!k.4f){A cq=(3R.x+3R.w<k.x.V(\'5o\')||3R.x>k.x.V(\'5o\')+k.x.V(\'8N\'));A ct=(3R.y+3R.h<k.y.V(\'5o\')||3R.y>k.y.V(\'5o\')+k.y.V(\'8N\'))}A 6M=m.9O(1k[i]);q(!cq&&!ct&&6M!=k.S){q(!2X){1k[i].6d(\'1s-by\',\'[\'+k.S+\']\');1k[i].9D=1k[i].E[1x];1k[i].E[1x]=\'1s\'}J q(2X.bF(\'[\'+k.S+\']\')==-1){1k[i].6d(\'1s-by\',2X+\'[\'+k.S+\']\')}}J q((2X==\'[\'+k.S+\']\'||m.30==6M)&&6M!=k.S){1k[i].6d(\'1s-by\',\'\');1k[i].E[1x]=1k[i].9D||\'\'}J q(2X&&2X.bF(\'[\'+k.S+\']\')>-1){1k[i].6d(\'1s-by\',2X.24(\'[\'+k.S+\']\',\'\'))}}}}},43:C(){k.R.E.1J=m.4x++;P(A i=0;i<m.18.Y;i++){q(m.18[i]&&i==m.30){A 4C=m.18[i];4C.T.1a+=\' M-\'+4C.3f+\'-9K\';q(4C.2Q){4C.T.E.4h=m.1y?\'bq\':\'7z\';4C.T.2h=m.11.bG}m.1z(4C,\'di\')}}q(k.19)k.19.2f.E.1J=k.R.E.1J;k.T.1a=\'M-\'+k.3f;q(k.2Q){k.T.2h=m.11.9I;q(m.66){m.4W=1R.3I?\'7z\':\'7w(\'+m.4Y+m.66+\'), 7z\';q(m.1y&&m.4t<6)m.4W=\'bq\';k.T.E.4h=m.4W}}m.30=k.S;m.2z(1d,1R.3I?\'92\':\'91\',m.7b);m.1z(k,\'dt\')},9h:C(x,y){k.x.9B(x);k.y.9B(y)},3C:C(e){A w,h,r=e.K/e.N;w=1l.2R(e.K+e.dX,1l.3y(k.4d,k.x.1c));q(k.2Q&&1l.dI(w-k.x.1c)<12)w=k.x.1c;h=k.2D?e.N+e.dY:w/r;q(h<1l.3y(k.5O,k.y.1c)){h=1l.3y(k.5O,k.y.1c);q(k.2Q)w=h*r}k.9d(w,h)},9d:C(w,h){k.y.7m(h);k.x.7m(w)},28:C(){q(k.65||!k.60)D;q(k.3n[1]==\'49\'&&m.2v){m.3c(m.2v).7p();m.2v=G}q(!m.1z(k,\'cC\'))D;k.65=L;q(k.1p&&!m.2v)k.1p.3j();m.4X(1d,1R.3I?\'92\':\'91\',m.7b);1B{q(k.2D)k.bX();k.T.E.4h=\'d0\';k.94(0,{R:{K:k.x.t,N:k.y.t,W:k.x.2b-k.x.cb+k.x.3g,U:k.y.2b-k.y.cb+k.y.3g},T:{W:0,U:0,K:k.x.t,N:k.y.t}},m.bT)}1C(e){k.5r()}},bX:C(){q(m.5X){q(!m.5H)m.5H=m.16(\'O\',G,{1j:\'2m\'},m.2a);m.Q(m.5H,{K:k.x.I+\'F\',N:k.y.I+\'F\',W:k.x.H+\'F\',U:k.y.H+\'F\',1o:\'3B\'})}q(k.2G==\'3v\')1B{m.$(k.1f.1D).cO()}1C(e){}q(k.3F==\'5U\'&&!k.4g)k.bW();q(k.2x&&k.2x!=k.4U)k.2x.E.2p=\'1s\'},bW:C(){q(m.1y&&k.1g)1B{k.1g.5Y.1d.1f.2e=\'\'}1C(e){}q(k.2G==\'3v\')9a.cU(k.1f.1D);k.1f.2e=\'\'},cj:C(){q(k.19)k.19.2f.E.1o=\'1v\';k.3M=G;k.R.E.1o=\'1v\';m.2w(m.4B,k)},bV:C(){1B{m.18[k.S]=k;q(!m.98&&m.30!=k.S){1B{m.18[m.30].28()}1C(e){}}A z=m.4x++,3D={1o:\'\',1J:z};m.Q(k.R,3D);k.65=1i;A o=k.19||0;q(o){q(!k.3P)3D.1n=\'1s\';m.Q(o.2f,3D)}q(k.1p){k.97()}k.96()}1C(e){}},4I:C(o){A el=o.4F,4Q=(o.c6==\'2Z\'&&!/7j$/.1b(o.1j));q(1H el==\'8Z\')el=m.5L(el);q(o.3r)el=m.16(\'O\',{2e:o.3r});q(!el||1H el==\'8Z\')D;q(!m.1z(k,\'eN\',{14:el}))D;el.E.1o=\'3B\';o.2g=o.2g||o.4F;q(k.3n[1]==\'49\'&&k.bO(o,el))D;k.9q();A K=o.K&&/^[0-9]+(F|%)$/.1b(o.K)?o.K:\'1Z\';q(/^(W|3h)7j$/.1b(o.1j)&&!/^[0-9]+F$/.1b(o.K))K=\'eM\';A 14=m.16(\'O\',{1D:\'2g\'+m.8T++,2g:o.2g},{1j:\'2m\',1n:\'1s\',K:K,8O:m.11.9A||\'\',1q:0},4Q?m.2Z:k.1t,L);q(4Q)14.6y=k.S;14.1W(el);m.4a(14,{1q:1,c7:0,c5:0,2C:(o.6e===0||o.6e===1i||(o.6e==2&&m.1y))?0:5I});m.4a(14,o);q(k.bz){k.5K(14);q(!14.78||k.9y)m.22(14,{1q:14.1q},14.2C)}m.2w(k.1S,m.8T-1)},5K:C(14){A p=14.1j||\'8U 4n\',4Q=(14.c6==\'2Z\'),6n=14.c7,6q=14.c5;q(4Q){m.2Z.E.1o=\'3B\';14.6y=k.S;q(14.1E>14.21.1E)14.E.K=\'2S%\'}J q(14.21!=k.1t)k.1t.1W(14);q(/W$/.1b(p))14.E.W=6n+\'F\';q(/4n$/.1b(p))m.Q(14,{W:\'50%\',4V:(6n-1l.4P(14.1E/2))+\'F\'});q(/3h$/.1b(p))14.E.3h=-6n+\'F\';q(/^c0$/.1b(p)){m.Q(14,{3h:\'2S%\',8W:k.x.cb+\'F\',U:-k.y.cb+\'F\',4q:-k.y.cb+\'F\',2p:\'1Z\'});k.x.1h=14.1E}J q(/^c1$/.1b(p)){m.Q(14,{W:\'2S%\',4V:k.x.cb+\'F\',U:-k.y.cb+\'F\',4q:-k.y.cb+\'F\',2p:\'1Z\'});k.x.3u=14.1E}A 8V=14.21.1N;14.E.N=\'1Z\';q(4Q&&14.1N>8V)14.E.N=m.4N?8V+\'F\':\'2S%\';q(/^U/.1b(p))14.E.U=6q+\'F\';q(/^8U/.1b(p))m.Q(14,{U:\'50%\',62:(6q-1l.4P(14.1N/2))+\'F\'});q(/^4q/.1b(p))14.E.4q=-6q+\'F\';q(/^5m$/.1b(p)){m.Q(14,{W:(-k.x.1h-k.x.cb)+\'F\',3h:(-k.x.3u-k.x.cb)+\'F\',4q:\'2S%\',6z:k.y.cb+\'F\',K:\'1Z\'});k.y.1h=14.1N}J q(/^7g$/.1b(p)){m.Q(14,{1j:\'4l\',W:(-k.x.1h-k.x.cb)+\'F\',3h:(-k.x.3u-k.x.cb)+\'F\',U:\'2S%\',62:k.y.cb+\'F\',K:\'1Z\'});k.y.3u=14.1N;14.E.1j=\'2m\'}},c3:C(){k.9b([\'4R\',\'9c\'],L);k.bN();q(k.9c)m.1z(k,\'fr\');q(k.4R)m.1z(k,\'fs\');q(k.4R&&k.9s)k.4R.1a+=\' M-3w\';q(m.bw)k.bx();P(A i=0;i<m.1S.Y;i++){A o=m.1S[i],6l=o.9r,35=o.2P;q((!6l&&!35)||(6l&&6l==k.6h)||(35&&35===k.2P)){q(k.2Q||(k.2D&&o.fu))k.4I(o)}}A 6J=[];P(A i=0;i<k.1S.Y;i++){A o=m.$(\'2g\'+k.1S[i]);q(/7j$/.1b(o.1j))k.5K(o);J m.2w(6J,o)}P(A i=0;i<6J.Y;i++)k.5K(6J[i]);k.bz=L},9q:C(){q(!k.1t)k.1t=m.16(\'O\',{1a:k.7h},{1j:\'2m\',K:(k.x.I||k.x.1c)+\'F\',N:(k.y.I||k.y.1c)+\'F\',1n:\'1s\',2p:\'1s\',1J:m.1y?4:G},m.2a,L)},5a:C(9u,bu){A 1t=k.1t,x=k.x,y=k.y;m.Q(1t,{K:x.I+\'F\',N:y.I+\'F\'});q(9u||bu){P(A i=0;i<k.1S.Y;i++){A o=m.$(\'2g\'+k.1S[i]);A 9t=(m.4N||1d.9p==\'bt\');q(o&&/^(5m|7g)$/.1b(o.1j)){q(9t){o.E.K=(1t.1E+2*x.cb+x.1h+x.3u)+\'F\'}y[o.1j==\'5m\'?\'1h\':\'3u\']=o.1N}q(o&&9t&&/^(W|3h)7j$/.1b(o.1j)){o.E.N=(1t.1N+2*y.cb)+\'F\'}}}q(9u){m.Q(k.T,{U:y.1h+\'F\'});m.Q(1t,{U:(y.1h+y.cb)+\'F\'})}},bp:C(){A b=k.1t;b.1a=\'\';m.Q(b,{U:(k.y.1h+k.y.cb)+\'F\',W:(k.x.1h+k.x.cb)+\'F\',2p:\'29\'});q(m.5b)b.E.1n=\'29\';k.R.1W(b);P(A i=0;i<k.1S.Y;i++){A o=m.$(\'2g\'+k.1S[i]);o.E.1J=o.2g==\'2V\'?5:4;q(!o.78||k.9y){o.E.1n=\'29\';m.22(o,{1q:o.1q},o.2C)}}},9w:C(){q(!k.1S.Y)D;P(A i=0;i<k.1S.Y;i++){A o=m.$(\'2g\'+k.1S[i]);q(o.21==m.2Z)m.52(o)}q(k.1p){A c=k.1p.2V;q(c&&m.3c(c)==k)c.21.9o(c)}q(k.2D&&k.4g){k.1t.E.U=\'-4s\';m.2a.1W(k.1t)}J m.52(k.1t)},bL:C(){q(k.1p&&k.1p.2V){k.1p.4A(\'1c-2H\');D}k.7d=m.16(\'a\',{1Y:\'bH:m.18[\'+k.S+\'].6Y();\',2h:m.11.9g,1a:\'M-1c-2H\'});q(!m.1z(k,\'eb\'))D;k.4I({4F:k.7d,1j:m.bE,78:L,1q:m.c9})},6Y:C(){1B{q(!m.1z(k,\'dU\'))D;q(k.7d)m.52(k.7d);k.43();A 2Y=k.x.I;k.9d(k.x.1c,k.y.1c);A 7n=k.x.H-(k.x.I-2Y)/2;q(7n<m.4V)7n=m.4V;k.9h(7n,k.y.H);k.5h(\'1s\');m.4L(k)}1C(e){k.9i(e)}},5r:C(){k.a.1a=k.a.1a.24(\'M-4z-48\',\'\');k.5h(\'29\');q(k.2D&&k.4g&&k.3n[1]!=\'49\'){k.cj()}J{q(k.19&&k.3P)k.19.6b();m.52(k.R)}q(m.5H)m.5H.E.1o=\'1v\';q(!m.2Z.7i.Y)m.2Z.E.1o=\'1v\';q(k.4f)m.9l(k.S);m.1z(k,\'eB\');m.18[k.S]=G;m.ch()}};m.7v=C(a,T,6I){k.a=a;k.T=T;k.6I=6I};m.7v.5c={8S:C(){q(!k.1m)k.1m=m.7t(k.a);q(k.1m.2r(\'#\')){A 2c=k.1m.9j(\'#\');k.1m=2c[0];k.1D=2c[1]}q(m.6H[k.1m]){k.av=m.6H[k.1m];q(k.1D)k.9m();J k.5Z();D}1B{k.3J=1I a8()}1C(e){1B{k.3J=1I af("ep.ah")}1C(e){1B{k.3J=1I af("ag.ah")}1C(e){k.9k()}}}A 3x=k;k.3J.en=C(){q(3x.3J.9H==4){q(3x.1D)3x.9m();J 3x.5Z()}};k.3J.a7("eu",k.1m+\'?ev=\'+(1I 7q()).7r(),L);k.3J.eD(\'X-eG-eC\',\'a8\');k.3J.dZ(G)},9m:C(){m.6L();A 3U=1R.3I||m.aj?{1m:\'e1:e2\'}:G;k.1g=m.16(\'1g\',3U,{1j:\'2m\',U:\'-4s\'},m.2a);k.5Z()},5Z:C(){A s=k.av||k.3J.dQ;q(k.6I)m.6H[k.1m]=s;q(!m.1y||m.4t>=5.5){s=s.24(/\\s/g,\' \').24(1I 4e(\'<e3[^>]*>\',\'al\'),\'\').24(1I 4e(\'<bo[^>]*>.*?</bo>\',\'al\'),\'\');q(k.1g){A 2E=k.1g.9e;q(!2E&&k.1g.5Y)2E=k.1g.5Y.1d;q(!2E){A 3x=k;3N(C(){3x.5Z()},25);D}2E.a7();2E.ef(s);2E.28();1B{s=2E.9f(k.1D).2e}1C(e){1B{s=k.1g.1d.9f(k.1D).2e}1C(e){}}}J{s=s.24(1I 4e(\'^.*?<1f[^>]*>(.*?)</1f>.*?$\',\'i\'),\'$1\')}}m.4G(k.T,\'6G\',\'M-1f\').2e=s;k.3t();P(A x 3e k)k[x]=G}};m.9n=C(B,1u){q(m.e6!==1i)m.6F();k.B=B;P(A x 3e 1u)k[x]=1u[x];q(k.e5)k.a6();q(k.2W)k.2W=m.ay(k)};m.9n.5c={a6:C(){k.2V=m.16(\'O\',{2e:m.9v(m.9x.2V)},G,m.2a);A 5J=[\'3G\',\'3j\',\'3a\',\'1G\',\'3w\',\'1c-2H\',\'28\'];k.1Q={};A 3x=k;P(A i=0;i<5J.Y;i++){k.1Q[5J[i]]=m.4G(k.2V,\'1K\',\'M-\'+5J[i]);k.4A(5J[i])}k.1Q.3j.E.1o=\'1v\'},9X:C(){q(k.9Z||!k.2V)D;A 5e=k.B.6Q(),2n=/72$/;q(5e==0)k.5j(\'3a\');J q(2n.1b(k.1Q.3a.2B(\'a\')[0].1a))k.4A(\'3a\');q(5e+1==m.4J.3i[k.B.2P||\'1v\'].Y){k.5j(\'1G\');k.5j(\'3G\')}J q(2n.1b(k.1Q.1G.2B(\'a\')[0].1a)){k.4A(\'1G\');k.4A(\'3G\')}},4A:C(1Q){q(!k.1Q)D;A an=k,a=k.1Q[1Q].2B(\'a\')[0],2n=/72$/;a.2o=C(){an[1Q]();D 1i};q(2n.1b(a.1a))a.1a=a.1a.24(2n,\'\')},5j:C(1Q){q(!k.1Q)D;A a=k.1Q[1Q].2B(\'a\')[0];a.2o=C(){D 1i};q(!/72$/.1b(a.1a))a.1a+=\' 72\'},b7:C(){q(k.45)k.3j();J k.3G()},3G:C(b8){q(k.1Q){k.1Q.3G.E.1o=\'1v\';k.1Q.3j.E.1o=\'\'}k.45=L;q(!b8)m.1G(k.B.S)},3j:C(){q(k.1Q){k.1Q.3j.E.1o=\'1v\';k.1Q.3G.E.1o=\'\'}fw(k.45);k.45=G},3a:C(){k.3j();m.3a(k.1Q.3a)},1G:C(){k.3j();m.1G(k.1Q.1G)},3w:C(){},\'1c-2H\':C(){m.3c().6Y()},28:C(){m.28(k.1Q.28)}};m.ay=C(1p){C 6E(B){m.4a(1u||{},{4F:4w,2g:\'2W\'});q(m.4N)1u.6e=0;B.4I(1u);m.Q(4w.21,{2p:\'1s\'})};C 2d(3S){53(1T,1l.4P(3S*4w[3O?\'1E\':\'1N\']*0.7))};C 53(i,8X){q(i===1T)P(A j=0;j<6f.Y;j++){q(6f[j]==1p.B.a){i=j;4O}}A as=4w.2B(\'a\'),4z=as[i],3X=4z.21,W=3O?\'aZ\':\'b2\',3h=3O?\'bb\':\'bj\',K=3O?\'bh\':\'bd\',4y=\'1r\'+W,1E=\'1r\'+K,6V=O.21.21[1E]-2f[1E],5C=2q(2f.E[3O?\'W\':\'U\'])||0,2K=5C,eQ=20;q(8X!==1T){2K=5C-8X;q(2K>0)2K=0;q(2K<6V)2K=6V}J{P(A j=0;j<as.Y;j++)as[j].1a=\'\';4z.1a=\'M-4z-48\';A 8Q=i>0?as[i-1].21[4y]:3X[4y],8P=3X[4y]+3X[1E]+(as[i+1]?as[i+1].21[1E]:0);q(8P>O[1E]-5C)2K=O[1E]-8P;J q(8Q<-5C)2K=-8Q}A 8R=3X[4y]+(3X[1E]-6U[1E])/2+2K;m.22(2f,3O?{W:2K}:{U:2K},G,\'8Y\');m.22(6U,3O?{W:8R}:{U:8R},G,\'8Y\');93.E.1o=2K<0?\'3B\':\'1v\';9z.E.1o=(2K>6V)?\'3B\':\'1v\'};A 6f=m.4J.3i[1p.B.2P||\'1v\'],1u=1p.2W,5q=1u.5q||\'az\',90=(5q==\'eV\'),3Z=90?[\'O\',\'5n\',\'1K\',\'1A\']:[\'2f\',\'4v\',\'46\',\'2F\'],3O=(5q==\'az\'),4w=m.16(\'O\',{1a:\'M-2W M-2W-\'+5q,2e:\'<O 1X="M-2W-f6">\'+\'<\'+3Z[0]+\'><\'+3Z[1]+\'></\'+3Z[1]+\'></\'+3Z[0]+\'></O>\'+\'<O 1X="M-2d-1P"><O></O></O>\'+\'<O 1X="M-2d-eX"><O></O></O>\'+\'<O 1X="M-6U"><O></O></O>\'},{1o:\'1v\'},m.2a),5u=4w.7i,O=5u[0],93=5u[1],9z=5u[2],6U=5u[3],2f=O.eZ,4v=4w.2B(3Z[1])[0],46;P(A i=0;i<6f.Y;i++){q(i==0||!3O)46=m.16(3Z[2],G,G,4v);(C(){A a=6f[i],3X=m.16(3Z[3],G,G,46),eH=i;m.16(\'a\',{1Y:a.1Y,2o:C(){D m.95(a)},2e:m.aU?m.aU(a):a.2e},G,3X)})()}q(!90){93.2o=C(){2d(-1)};9z.2o=C(){2d(1)};m.2z(4v,1d.dv!==1T?\'dw\':\'dy\',C(e){A 3S=0;e=e||1R.2J;q(e.aM){3S=e.aM/dF;q(m.3I)3S=-3S}J q(e.aR){3S=-e.aR/3}q(3S)2d(-3S*0.2);q(e.5k)e.5k();e.aK=1i})}D{6E:6E,53:53}};q(1d.9H&&m.1y){(C(){1B{1d.5d.dh(\'W\')}1C(e){3N(aE.dd,50);D}m.aJ()})()}m.6A=m.11;A db=m.67;m.2z(1R,\'6x\',C(){q(m.9J){A 9F=\'.M 1O\',9G=\'4h: 7w(\'+m.4Y+m.9J+\'), 7z !dc;\';A E=m.16(\'E\',{Z:\'dq/9N\'},G,1d.2B(\'dn\')[0]);q(!m.1y){E.1W(1d.do(9F+" {"+9G+"}"))}J{A 1e=1d.b3[1d.b3.Y-1];q(1H(1e.b4)=="7f")1e.b4(9F,9G)}}});m.2z(1R,\'3C\',C(){m.3p=m.7l();q(m.2Z)P(A i=0;i<m.2Z.7i.Y;i++){A 1L=m.2Z.7i[i],B=m.3c(1L);B.5K(1L);q(1L.2g==\'2W\')B.1p.2W.53()}});m.2z(1d,\'6g\',C(e){m.6m={x:e.6j,y:e.6w}});m.2z(1d,\'9L\',m.9C);m.2z(1d,\'9Q\',m.9C);m.2z(1R,\'6x\',m.b1);m.2z(1R,\'6x\',m.9W);m.2z(1R,\'6x\',C(){m.aq=L});m.9E();',62,964,'||||||||||||||||||||this||hs||||if||||||||||var|exp|function|return|style|px|null|pos|size|else|width|true|highslide|height|div|for|setStyles|wrapper|key|content|top|get|left||length|type||lang|||overlay||createElement||expanders|outline|className|test|full|document|last|body|iframe|p1|false|position|els|Math|src|visibility|display|slideshow|opacity|offset|hidden|overlayBox|options|none|innerContent|prop|ie|fireEvent|span|try|catch|id|offsetWidth|dim|next|typeof|new|zIndex|li|node|ss|offsetHeight|img|up|btn|window|overlays|undefined|outlineType|imgSize|appendChild|class|href|auto||parentNode|animate|wsize|replace||to||close|visible|container|tpos|arr|scroll|innerHTML|table|hsId|title|case|imgPad|op|params|absolute|re|onclick|overflow|parseInt|match|loading|lastX|lastY|upcoming|push|scrollerDiv|dragArgs|addEventListener|dimmer|getElementsByTagName|dur|isHtml|doc|td|objectType|expand|image|event|tblPos|easing|minSize|tgt|target|slideshowGroup|isImage|max|100|justify|ratio|controls|thumbstrip|hiddenBy|xSize|viewport|focusKey|name||||sg|args||||previous|elem|getExpander|ajax|in|contentType|tb|right|groups|pause|wh|val|ucwh|transitions|marginMin|page|opt|html|custom|onLoad|p2|swf|move|pThis|min|clearing|hasDragged|block|resize|stl|number|objectLoadTime|play|useBox|opera|xmlHttp|graphic|tagName|releaseMask|setTimeout|isX|outlineWhileAnimating|step|elPos|delta|objectWidth|attribs|func|getParam|cell|end|tree||iebody|timers|focus|duration|autoplay|tr|ySize|anchor|crossfade|extend|mediumContent|styles|minWidth|RegExp|dimmingOpacity|preserveContent|cursor|tgtArr|marginMax|clientSize|relative|onload|center|pendingOutlines|setPosition|bottom|fadeBox|9999px|uaVersion|now|tbody|dom|zIndexCounter|offsetLeft|active|enable|sleeping|blurExp|start|unit|overlayId|getElementByClass|clone|createOverlay|anchors|hDiff|setDimmerSize|adj|ieLt7|break|round|relToVP|heading|cNode|wDiff|scrollingContent|marginLeft|styleRestoreCursor|removeEventListener|graphicsDir|moveOnly||self|discardElement|selectThumb|images|htmls|objectHeight|allowReduce|over|cloneNode|sizeOverlayBox|safari|prototype|documentElement|cur|while|navigator|doShowHide|area|disable|preventDefault|cacheBindings|above|ul|opos|on|mode|afterClose|allowSizeReduction|maxY|domCh|credits|all|toLowerCase|padToMinWidth|maxX|minX|minY|curTblPos|before|ruler|preloadTheseImages|currentStyle|mask|250|buttons|positionOverlay|getNode|cache|Outline|minHeight|slideshows|numberPosition|filter|getParams|param|after|uclt|owner|geckoMac|contentWindow|loadHTML|isExpanded|trans|marginTop|fitsize|obj|isClosing|restoreCursor|Expander|showLoading|contentLoaded|parent|destroy|matches|setAttribute|fade|group|mousemove|thumbsUserSetId|dir|clientX|dragHandler|tId|mouse|offX|userAgent|Id|offY|getPosition|changed|showHideElements|expandDuration|isHsAnchor|clientY|load|hsKey|marginBottom|langDefaults|lt|scrollTop|topmostKey|add|updateAnchors|DIV|cachedGets|pre|os|afterExpand|init|wrapperKey|Dimension|scrollLeft|background|getAnchorIndex|gotoEnd|curAnim|preloadFullImage|marker|minTblPos|getAnchors|expOnly|doFullExpand|pageHeight||pageWidth|disabled|previousOrNext|element||maincontent|writeExtendedContent|hideOnMouseOut|innerWidth|complete|keyHandler|innerHeight|fullExpandLabel|kdeBugCorr|object|below|wrapperClassName|childNodes|panel|allowWidthReduction|getPageSize|setSize|xpos|onLoadStarted|cancelLoading|Date|getTime|oDiv|getSrc|preloadTheseAjax|Ajax|url|rel|imgs|pointer|mX|getAdjacentAnchor|mY|Text|types|current|continuePreloading|srcElement|relatedTarget|numberOfImagesToPreload|distance|hasFocused|dimmingDuration|evt|garbageBin|openerTagNames|update|hasAlphaImageLoader|ucrb|state|startTime|htmlExpand|done|clones|topZ|nextTitle|nextText|moveTitle|previousText|previousTitle|Click|arrow|moveText|closeTitle|cacheAjax|preloadAjaxElement|clientHeight|clientWidth|closeText|parseFloat|align|margin|correctIframeSize|hasMovedMin|fitOverlayBox|allowHeightReduction|setObjContainerSize|padding|offsetTop|getIframePageHeight|other|border|oldImg|names|startOff|fadeInOut|endOff|htmlGetSize|swfOptions|Create|connectOutline|loadingPos|calcThumb|overrides|sizeDiff|onDomReady|loadingPosXfade|contentId|calcExpanded|oPos|calcBorders|location|getSelfRendered|getCacheBinding|newImg|osize|direction|activeRight|activeLeft|markerPos|run|idCounter|middle|parOff|marginRight|scrollBy|easeOutQuad|string|floatMode|keydown|keypress|scrollUp|changeSize|transit|show|initSlideshow|allowMultipleInstances||swfobject|getInline|caption|resizeTo|contentDocument|getElementById|fullExpandTitle|moveTo|error|split|onError|undim|getElementContent|Slideshow|removeChild|compatMode|genOverlayBox|thumbnailId|dragByHeading|ie6|doWrapper|replaceLang|destroyOverlays|skin|mouseIsOver|scrollDown|cssDirection|setPos|mouseClickHandler|origProp|setClickEvents|sel|dec|readyState|restoreTitle|expandCursor|blur|mousedown|defaultView|css|getWrapperKey|switch|mouseup|vis|hide|parse|alpha|scrollMaxY|preloadAjax|checkFirstAndLast|scrollWidth|repeat|scrollMaxX|preloadGraphic|nopad|onGraphicLoad|appendTo|png|getControls|open|XMLHttpRequest|Move|targetX|maxWidth|targetY|Next|resizeTitle|ActiveXObject|Microsoft|XMLHTTP|fixedControls|ie6SSL|wrapperMouseHandler|gi|isDomReady|sls|tag|toUpperCase|pageLoaded|thumb||headingOverlay|captionOverlay|cachedGet|rv|rb|Thumbstrip|horizontal|detachEvent|pow|clickY|clickX|arguments|fullExpandText|ltr|hsHasSetClick|isUnobtrusiveAnchor|domReady|returnValue|hasHtmlExpanders|wheelDelta|dimmingGeckoFix|playText|enableKeyListener|200|detail|pauseTitle|form|stripItemFormatter|focusTopmost|pauseText|contentWrapper|loadingTitle|Left|and|preloadImages|Top|styleSheets|addRule|call|scrollHeight|hitSpace|wait|playTitle|timerId|Right|easeInQuad|Height|loadingOpacity|loadingText|offsetParent|Width|orig|Bottom|xScroll|from|yScroll|_default|script|showOverlays|hand|Play|preloadNext|BackCompat|doPanels|tmpMin|showCredits|writeCredits||gotOverlays|toString|getImageMapAreaCorrection|KDE|vendor|fullExpandPosition|indexOf|focusTitle|javascript|Pause|spacebar|Previous|createFullExpand|correctRatio|getNumber|reuseOverlay|JS|wmode|wrapStep|Safari|restoreDuration|Highslide|awake|destroyObject|htmlPrepareClose|Overlay|transitionDuration|leftpanel|rightpanel|Close|getOverlays|easingClose|offsetY|relativeTo|offsetX|hideSelects|fullExpandOpacity|prepareNextOutline||clear|creditsTitle|creditsText|creditsHref|onHideLoading|reOrder|getPropertyValue|sleep|getAttribute|flashvars|attributes|newHeight|Eval|hideIframes|clearsX|both|hasExtendedContent|clearsY|overlayOptions|htmlSizeOperations|getComputedStyle|addOverlay|nextSibling|registerOverlay|ra|addSlideshow|onBeforeClose|maincontentEval|reuse|com|http|it|outlineStartOffset|drop|maxHeight|Go|htmlE|onDrop|StopPlay|onImageClick|captionText|captionId|white|Loading|removeSWF|01|button|captionEval|headingText|headingEval|default|maincontentId|shadow|headingId|1001|the|xpand|maincontentText|Gecko|sqrt|bring|HsExpander|important|callee|onAfterExpand|onBeforeGetHeading|onBeforeGetCaption|doScroll|onBlur|onSetClickEvent|header|useMap|pageYOffset|HEAD|createTextNode|cancel|text|500|interval|onFocus|front|onmousewheel|mousewheel|pageXOffset|DOMMouseScroll|IFRAME|onKeyDown|footer|keyCode|Macintosh|boolean|120|onDimmerClick|dimming|abs|geckodimmer|Expand|actual|removeAttribute|eval|Powered|https|responseText|300|onInit|of|onDoFullExpand|onmouseover|onmouseout|||send|onShowLoading|about|blank|link|nodeName|useControls|dynamicallyUpdateAnchors|coords|scale|sizingMethod|Use|onCreateFullExpand|insertBefore|click|drag|write|Image|imageCreate|version|newWidth|expressInstallSwfurl||fit|onreadystatechange|embedSWF|Msxml2|flash|transparent|allowtransparency|frameborder|GET|dummy|htmlCreate|onBeforeGetContent|flushImgSize|oncontextmenu|blockRightClick|onAfterClose|With|setRequestHeader|static|onAfterGetContent|Requested|pI|AlphaImageLoader|homepage|zoomout|protocol|200px|onCreateOverlay|paddingTop|1px|mgnRight|zoomin|onActivate|linearTween|attachEvent|float|mouseover|down|onDrag|firstChild|dragSensitivity|fromElement|toElement|onMouseOut|onMouseOver|525|inner|onBeforeExpand|reflow|fontSize|outlinesDir|lineHeight|collapse|borderCollapse|outlines|Resize|progid|shape|SELECT|circle|DXImageTransform|cellSpacing|clearInterval|graphics|esc|splice|setInterval|onAfterGetCaption|onAfterGetHeading|keys|useOnHtml|floor|clearTimeout|'.split('|'),0,{}))
function eZAddEvent( el, trigger, handler )
{
// Supports w3c, ie and dom0 event handling
trigger = trigger.replace(/^on/i,'');
if ( el.addEventListener ){
el.addEventListener( trigger, handler, false );
}
else if ( el.attachEvent )
{
el.attachEvent( 'on' + trigger, handler );
}else{
var c = el['on' + trigger];
el['on' + trigger] = typeof c !== 'function' ? handler : function(){ handler(); c()};
}
}
﻿// highslide licence key
hs.graphicsDir = "/extension/ezHighslide/design/standard/images/graphics/";
hs.outlineType='sharp-white';
hs.showCredits = false;
hs.dimmingOpacity = 0.8;
hs.restoreTitle = 'Klicken zum Schließen, Maustaste halten und Maus bewegen zum Verschieben.';
hs.align = 'center';
hs.enableKeyListener = true;
hs.transitions = ['expand', 'crossfade'];
hs.transitionDuration = 1000;
hs.fadeInOut = true;
var swfobject=function(){var b="undefined",Q="object",n="Shockwave Flash",p="ShockwaveFlash.ShockwaveFlash",P="application/x-shockwave-flash",m="SWFObjectExprInst",j=window,K=document,T=navigator,o=[],N=[],i=[],d=[],J,Z=null,M=null,l=null,e=false,A=false;var h=function(){var v=typeof K.getElementById!=b&&typeof K.getElementsByTagName!=b&&typeof K.createElement!=b,AC=[0,0,0],x=null;if(typeof T.plugins!=b&&typeof T.plugins[n]==Q){x=T.plugins[n].description;if(x&&!(typeof T.mimeTypes!=b&&T.mimeTypes[P]&&!T.mimeTypes[P].enabledPlugin)){x=x.replace(/^.*\s+(\S+\s+\S+$)/,"$1");AC[0]=parseInt(x.replace(/^(.*)\..*$/,"$1"),10);AC[1]=parseInt(x.replace(/^.*\.(.*)\s.*$/,"$1"),10);AC[2]=/r/.test(x)?parseInt(x.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof j.ActiveXObject!=b){var y=null,AB=false;try{y=new ActiveXObject(p+".7")}catch(t){try{y=new ActiveXObject(p+".6");AC=[6,0,21];y.AllowScriptAccess="always"}catch(t){if(AC[0]==6){AB=true}}if(!AB){try{y=new ActiveXObject(p)}catch(t){}}}if(!AB&&y){try{x=y.GetVariable("$version");if(x){x=x.split(" ")[1].split(",");AC=[parseInt(x[0],10),parseInt(x[1],10),parseInt(x[2],10)]}}catch(t){}}}}var AD=T.userAgent.toLowerCase(),r=T.platform.toLowerCase(),AA=/webkit/.test(AD)?parseFloat(AD.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,q=false,z=r?/win/.test(r):/win/.test(AD),w=r?/mac/.test(r):/mac/.test(AD);/*@cc_on q=true;@if(@_win32)z=true;@elif(@_mac)w=true;@end@*/return{w3cdom:v,pv:AC,webkit:AA,ie:q,win:z,mac:w}}();var L=function(){if(!h.w3cdom){return }f(H);if(h.ie&&h.win){try{K.write("<script id=__ie_ondomload defer=true src=//:><\/script>");J=C("__ie_ondomload");if(J){I(J,"onreadystatechange",S)}}catch(q){}}if(h.webkit&&typeof K.readyState!=b){Z=setInterval(function(){if(/loaded|complete/.test(K.readyState)){E()}},10)}if(typeof K.addEventListener!=b){K.addEventListener("DOMContentLoaded",E,null)}R(E)}();function S(){if(J.readyState=="complete"){J.parentNode.removeChild(J);E()}}function E(){if(e){return }if(h.ie&&h.win){var v=a("span");try{var u=K.getElementsByTagName("body")[0].appendChild(v);u.parentNode.removeChild(u)}catch(w){return }}e=true;if(Z){clearInterval(Z);Z=null}var q=o.length;for(var r=0;r<q;r++){o[r]()}}function f(q){if(e){q()}else{o[o.length]=q}}function R(r){if(typeof j.addEventListener!=b){j.addEventListener("load",r,false)}else{if(typeof K.addEventListener!=b){K.addEventListener("load",r,false)}else{if(typeof j.attachEvent!=b){I(j,"onload",r)}else{if(typeof j.onload=="function"){var q=j.onload;j.onload=function(){q();r()}}else{j.onload=r}}}}}function H(){var t=N.length;for(var q=0;q<t;q++){var u=N[q].id;if(h.pv[0]>0){var r=C(u);if(r){N[q].width=r.getAttribute("width")?r.getAttribute("width"):"0";N[q].height=r.getAttribute("height")?r.getAttribute("height"):"0";if(c(N[q].swfVersion)){if(h.webkit&&h.webkit<312){Y(r)}W(u,true)}else{if(N[q].expressInstall&&!A&&c("6.0.65")&&(h.win||h.mac)){k(N[q])}else{O(r)}}}}else{W(u,true)}}}function Y(t){var q=t.getElementsByTagName(Q)[0];if(q){var w=a("embed"),y=q.attributes;if(y){var v=y.length;for(var u=0;u<v;u++){if(y[u].nodeName=="DATA"){w.setAttribute("src",y[u].nodeValue)}else{w.setAttribute(y[u].nodeName,y[u].nodeValue)}}}var x=q.childNodes;if(x){var z=x.length;for(var r=0;r<z;r++){if(x[r].nodeType==1&&x[r].nodeName=="PARAM"){w.setAttribute(x[r].getAttribute("name"),x[r].getAttribute("value"))}}}t.parentNode.replaceChild(w,t)}}function k(w){A=true;var u=C(w.id);if(u){if(w.altContentId){var y=C(w.altContentId);if(y){M=y;l=w.altContentId}}else{M=G(u)}if(!(/%$/.test(w.width))&&parseInt(w.width,10)<310){w.width="310"}if(!(/%$/.test(w.height))&&parseInt(w.height,10)<137){w.height="137"}K.title=K.title.slice(0,47)+" - Flash Player Installation";var z=h.ie&&h.win?"ActiveX":"PlugIn",q=K.title,r="MMredirectURL="+j.location+"&MMplayerType="+z+"&MMdoctitle="+q,x=w.id;if(h.ie&&h.win&&u.readyState!=4){var t=a("div");x+="SWFObjectNew";t.setAttribute("id",x);u.parentNode.insertBefore(t,u);u.style.display="none";var v=function(){u.parentNode.removeChild(u)};I(j,"onload",v)}U({data:w.expressInstall,id:m,width:w.width,height:w.height},{flashvars:r},x)}}function O(t){if(h.ie&&h.win&&t.readyState!=4){var r=a("div");t.parentNode.insertBefore(r,t);r.parentNode.replaceChild(G(t),r);t.style.display="none";var q=function(){t.parentNode.removeChild(t)};I(j,"onload",q)}else{t.parentNode.replaceChild(G(t),t)}}function G(v){var u=a("div");if(h.win&&h.ie){u.innerHTML=v.innerHTML}else{var r=v.getElementsByTagName(Q)[0];if(r){var w=r.childNodes;if(w){var q=w.length;for(var t=0;t<q;t++){if(!(w[t].nodeType==1&&w[t].nodeName=="PARAM")&&!(w[t].nodeType==8)){u.appendChild(w[t].cloneNode(true))}}}}}return u}function U(AG,AE,t){var q,v=C(t);if(v){if(typeof AG.id==b){AG.id=t}if(h.ie&&h.win){var AF="";for(var AB in AG){if(AG[AB]!=Object.prototype[AB]){if(AB.toLowerCase()=="data"){AE.movie=AG[AB]}else{if(AB.toLowerCase()=="styleclass"){AF+=' class="'+AG[AB]+'"'}else{if(AB.toLowerCase()!="classid"){AF+=" "+AB+'="'+AG[AB]+'"'}}}}}var AD="";for(var AA in AE){if(AE[AA]!=Object.prototype[AA]){AD+='<param name="'+AA+'" value="'+AE[AA]+'" />'}}v.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+AF+">"+AD+"</object>";i[i.length]=AG.id;q=C(AG.id)}else{if(h.webkit&&h.webkit<312){var AC=a("embed");AC.setAttribute("type",P);for(var z in AG){if(AG[z]!=Object.prototype[z]){if(z.toLowerCase()=="data"){AC.setAttribute("src",AG[z])}else{if(z.toLowerCase()=="styleclass"){AC.setAttribute("class",AG[z])}else{if(z.toLowerCase()!="classid"){AC.setAttribute(z,AG[z])}}}}}for(var y in AE){if(AE[y]!=Object.prototype[y]){if(y.toLowerCase()!="movie"){AC.setAttribute(y,AE[y])}}}v.parentNode.replaceChild(AC,v);q=AC}else{var u=a(Q);u.setAttribute("type",P);for(var x in AG){if(AG[x]!=Object.prototype[x]){if(x.toLowerCase()=="styleclass"){u.setAttribute("class",AG[x])}else{if(x.toLowerCase()!="classid"){u.setAttribute(x,AG[x])}}}}for(var w in AE){if(AE[w]!=Object.prototype[w]&&w.toLowerCase()!="movie"){F(u,w,AE[w])}}v.parentNode.replaceChild(u,v);q=u}}}return q}function F(t,q,r){var u=a("param");u.setAttribute("name",q);u.setAttribute("value",r);t.appendChild(u)}function X(r){var q=C(r);if(q&&(q.nodeName=="OBJECT"||q.nodeName=="EMBED")){if(h.ie&&h.win){if(q.readyState==4){B(r)}else{j.attachEvent("onload",function(){B(r)})}}else{q.parentNode.removeChild(q)}}}function B(t){var r=C(t);if(r){for(var q in r){if(typeof r[q]=="function"){r[q]=null}}r.parentNode.removeChild(r)}}function C(t){var q=null;try{q=K.getElementById(t)}catch(r){}return q}function a(q){return K.createElement(q)}function I(t,q,r){t.attachEvent(q,r);d[d.length]=[t,q,r]}function c(t){var r=h.pv,q=t.split(".");q[0]=parseInt(q[0],10);q[1]=parseInt(q[1],10)||0;q[2]=parseInt(q[2],10)||0;return(r[0]>q[0]||(r[0]==q[0]&&r[1]>q[1])||(r[0]==q[0]&&r[1]==q[1]&&r[2]>=q[2]))?true:false}function V(v,r){if(h.ie&&h.mac){return }var u=K.getElementsByTagName("head")[0],t=a("style");t.setAttribute("type","text/css");t.setAttribute("media","screen");if(!(h.ie&&h.win)&&typeof K.createTextNode!=b){t.appendChild(K.createTextNode(v+" {"+r+"}"))}u.appendChild(t);if(h.ie&&h.win&&typeof K.styleSheets!=b&&K.styleSheets.length>0){var q=K.styleSheets[K.styleSheets.length-1];if(typeof q.addRule==Q){q.addRule(v,r)}}}function W(t,q){var r=q?"visible":"hidden";if(e&&C(t)){C(t).style.visibility=r}else{V("#"+t,"visibility:"+r)}}function g(s){var r=/[\\\"<>\.;]/;var q=r.exec(s)!=null;return q?encodeURIComponent(s):s}var D=function(){if(h.ie&&h.win){window.attachEvent("onunload",function(){var w=d.length;for(var v=0;v<w;v++){d[v][0].detachEvent(d[v][1],d[v][2])}var t=i.length;for(var u=0;u<t;u++){X(i[u])}for(var r in h){h[r]=null}h=null;for(var q in swfobject){swfobject[q]=null}swfobject=null})}}();return{registerObject:function(u,q,t){if(!h.w3cdom||!u||!q){return }var r={};r.id=u;r.swfVersion=q;r.expressInstall=t?t:false;N[N.length]=r;W(u,false)},getObjectById:function(v){var q=null;if(h.w3cdom){var t=C(v);if(t){var u=t.getElementsByTagName(Q)[0];if(!u||(u&&typeof t.SetVariable!=b)){q=t}else{if(typeof u.SetVariable!=b){q=u}}}}return q},embedSWF:function(x,AE,AB,AD,q,w,r,z,AC){if(!h.w3cdom||!x||!AE||!AB||!AD||!q){return }AB+="";AD+="";if(c(q)){W(AE,false);var AA={};if(AC&&typeof AC===Q){for(var v in AC){if(AC[v]!=Object.prototype[v]){AA[v]=AC[v]}}}AA.data=x;AA.width=AB;AA.height=AD;var y={};if(z&&typeof z===Q){for(var u in z){if(z[u]!=Object.prototype[u]){y[u]=z[u]}}}if(r&&typeof r===Q){for(var t in r){if(r[t]!=Object.prototype[t]){if(typeof y.flashvars!=b){y.flashvars+="&"+t+"="+r[t]}else{y.flashvars=t+"="+r[t]}}}}f(function(){U(AA,y,AE);if(AA.id==AE){W(AE,true)}})}else{if(w&&!A&&c("6.0.65")&&(h.win||h.mac)){A=true;W(AE,false);f(function(){var AF={};AF.id=AF.altContentId=AE;AF.width=AB;AF.height=AD;AF.expressInstall=w;k(AF)})}}},getFlashPlayerVersion:function(){return{major:h.pv[0],minor:h.pv[1],release:h.pv[2]}},hasFlashPlayerVersion:c,createSWF:function(t,r,q){if(h.w3cdom){return U(t,r,q)}else{return undefined}},removeSWF:function(q){if(h.w3cdom){X(q)}},createCSS:function(r,q){if(h.w3cdom){V(r,q)}},addDomLoadEvent:f,addLoadEvent:R,getQueryParamValue:function(v){var u=K.location.search||K.location.hash;if(v==null){return g(u)}if(u){var t=u.substring(1).split("&");for(var r=0;r<t.length;r++){if(t[r].substring(0,t[r].indexOf("="))==v){return g(t[r].substring((t[r].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(A&&M){var q=C(m);if(q){q.parentNode.replaceChild(M,q);if(l){W(l,true);if(h.ie&&h.win){M.style.display="block"}}M=null;l=null;A=false}}}}}();
var MooTools = {
'version': '1.2.1',
'build': '0d4845aab3d9a4fdee2f0d4a6dd59210e4b697cf'
};
var Native = function(options){
options = options || {};
var name = options.name;
var legacy = options.legacy;
var protect = options.protect;
var methods = options.implement;
var generics = options.generics;
var initialize = options.initialize;
var afterImplement = options.afterImplement || function(){};
var object = initialize || legacy;
generics = generics !== false;
object.constructor = Native;
object.$family = {name: 'native'};
if (legacy && initialize) object.prototype = legacy.prototype;
object.prototype.constructor = object;
if (name){
var family = name.toLowerCase();
object.prototype.$family = {name: family};
Native.typize(object, family);
}
var add = function(obj, name, method, force){
if (!protect || force || !obj.prototype[name]) obj.prototype[name] = method;
if (generics) Native.genericize(obj, name, protect);
afterImplement.call(obj, name, method);
return obj;
};
object.alias = function(a1, a2, a3){
if (typeof a1 == 'string'){
if ((a1 = this.prototype[a1])) return add(this, a2, a1, a3);
}
for (var a in a1) this.alias(a, a1[a], a2);
return this;
};
object.implement = function(a1, a2, a3){
if (typeof a1 == 'string') return add(this, a1, a2, a3);
for (var p in a1) add(this, p, a1[p], a2);
return this;
};
if (methods) object.implement(methods);
return object;
};
Native.genericize = function(object, property, check){
if ((!check || !object[property]) && typeof object.prototype[property] == 'function') object[property] = function(){
var args = Array.prototype.slice.call(arguments);
return object.prototype[property].apply(args.shift(), args);
};
};
Native.implement = function(objects, properties){
for (var i = 0, l = objects.length; i < l; i++) objects[i].implement(properties);
};
Native.typize = function(object, family){
if (!object.type) object.type = function(item){
return ($type(item) === family);
};
};
(function(){
var natives = {'Array': Array, 'Date': Date, 'Function': Function, 'Number': Number, 'RegExp': RegExp, 'String': String};
for (var n in natives) new Native({name: n, initialize: natives[n], protect: true});
var types = {'boolean': Boolean, 'native': Native, 'object': Object};
for (var t in types) Native.typize(types[t], t);
var generics = {
'Array': ["concat", "indexOf", "join", "lastIndexOf", "pop", "push", "reverse", "shift", "slice", "sort", "splice", "toString", "unshift", "valueOf"],
'String': ["charAt", "charCodeAt", "concat", "indexOf", "lastIndexOf", "match", "replace", "search", "slice", "split", "substr", "substring", "toLowerCase", "toUpperCase", "valueOf"]
};
for (var g in generics){
for (var i = generics[g].length; i--;) Native.genericize(window[g], generics[g][i], true);
};
})();
var Hash = new Native({
name: 'Hash',
initialize: function(object){
if ($type(object) == 'hash') object = $unlink(object.getClean());
for (var key in object) this[key] = object[key];
return this;
}
});
Hash.implement({
forEach: function(fn, bind){
for (var key in this){
if (this.hasOwnProperty(key)) fn.call(bind, this[key], key, this);
}
},
getClean: function(){
var clean = {};
for (var key in this){
if (this.hasOwnProperty(key)) clean[key] = this[key];
}
return clean;
},
getLength: function(){
var length = 0;
for (var key in this){
if (this.hasOwnProperty(key)) length++;
}
return length;
}
});
Hash.alias('forEach', 'each');
Array.implement({
forEach: function(fn, bind){
for (var i = 0, l = this.length; i < l; i++) fn.call(bind, this[i], i, this);
}
});
Array.alias('forEach', 'each');
function $A(iterable){
if (iterable.item){
var array = [];
for (var i = 0, l = iterable.length; i < l; i++) array[i] = iterable[i];
return array;
}
return Array.prototype.slice.call(iterable);
};
function $arguments(i){
return function(){
return arguments[i];
};
};
function $chk(obj){
return !!(obj || obj === 0);
};
function $clear(timer){
clearTimeout(timer);
clearInterval(timer);
return null;
};
function $defined(obj){
return (obj != undefined);
};
function $each(iterable, fn, bind){
var type = $type(iterable);
((type == 'arguments' || type == 'collection' || type == 'array') ? Array : Hash).each(iterable, fn, bind);
};
function $empty(){};
function $extend(original, extended){
for (var key in (extended || {})) original[key] = extended[key];
return original;
};
function $H(object){
return new Hash(object);
};
function $lambda(value){
return (typeof value == 'function') ? value : function(){
return value;
};
};
function $merge(){
var mix = {};
for (var i = 0, l = arguments.length; i < l; i++){
var object = arguments[i];
if ($type(object) != 'object') continue;
for (var key in object){
var op = object[key], mp = mix[key];
mix[key] = (mp && $type(op) == 'object' && $type(mp) == 'object') ? $merge(mp, op) : $unlink(op);
}
}
return mix;
};
function $pick(){
for (var i = 0, l = arguments.length; i < l; i++){
if (arguments[i] != undefined) return arguments[i];
}
return null;
};
function $random(min, max){
return Math.floor(Math.random() * (max - min + 1) + min);
};
function $splat(obj){
var type = $type(obj);
return (type) ? ((type != 'array' && type != 'arguments') ? [obj] : obj) : [];
};
var $time = Date.now || function(){
return +new Date;
};
function $try(){
for (var i = 0, l = arguments.length; i < l; i++){
try {
return arguments[i]();
} catch(e){}
}
return null;
};
function $type(obj){
if (obj == undefined) return false;
if (obj.$family) return (obj.$family.name == 'number' && !isFinite(obj)) ? false : obj.$family.name;
if (obj.nodeName){
switch (obj.nodeType){
case 1: return 'element';
case 3: return (/\S/).test(obj.nodeValue) ? 'textnode' : 'whitespace';
}
} else if (typeof obj.length == 'number'){
if (obj.callee) return 'arguments';
else if (obj.item) return 'collection';
}
return typeof obj;
};
function $unlink(object){
var unlinked;
switch ($type(object)){
case 'object':
unlinked = {};
for (var p in object) unlinked[p] = $unlink(object[p]);
break;
case 'hash':
unlinked = new Hash(object);
break;
case 'array':
unlinked = [];
for (var i = 0, l = object.length; i < l; i++) unlinked[i] = $unlink(object[i]);
break;
default: return object;
}
return unlinked;
};
var Browser = $merge({
Engine: {name: 'unknown', version: 0},
Platform: {name: (window.orientation != undefined) ? 'ipod' : (navigator.platform.match(/mac|win|linux/i) || ['other'])[0].toLowerCase()},
Features: {xpath: !!(document.evaluate), air: !!(window.runtime), query: !!(document.querySelector)},
Plugins: {},
Engines: {
presto: function(){
return (!window.opera) ? false : ((arguments.callee.caller) ? 960 : ((document.getElementsByClassName) ? 950 : 925));
},
trident: function(){
return (!window.ActiveXObject) ? false : ((window.XMLHttpRequest) ? 5 : 4);
},
webkit: function(){
return (navigator.taintEnabled) ? false : ((Browser.Features.xpath) ? ((Browser.Features.query) ? 525 : 420) : 419);
},
gecko: function(){
return (document.getBoxObjectFor == undefined) ? false : ((document.getElementsByClassName) ? 19 : 18);
}
}
}, Browser || {});
Browser.Platform[Browser.Platform.name] = true;
Browser.detect = function(){
for (var engine in this.Engines){
var version = this.Engines[engine]();
if (version){
this.Engine = {name: engine, version: version};
this.Engine[engine] = this.Engine[engine + version] = true;
break;
}
}
return {name: engine, version: version};
};
Browser.detect();
Browser.Request = function(){
return $try(function(){
return new XMLHttpRequest();
}, function(){
return new ActiveXObject('MSXML2.XMLHTTP');
});
};
Browser.Features.xhr = !!(Browser.Request());
Browser.Plugins.Flash = (function(){
var version = ($try(function(){
return navigator.plugins['Shockwave Flash'].description;
}, function(){
return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');
}) || '0 r0').match(/\d+/g);
return {version: parseInt(version[0] || 0 + '.' + version[1] || 0), build: parseInt(version[2] || 0)};
})();
function $exec(text){
if (!text) return text;
if (window.execScript){
window.execScript(text);
} else {
var script = document.createElement('script');
script.setAttribute('type', 'text/javascript');
script[(Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerText' : 'text'] = text;
document.head.appendChild(script);
document.head.removeChild(script);
}
return text;
};
Native.UID = 1;
var $uid = (Browser.Engine.trident) ? function(item){
return (item.uid || (item.uid = [Native.UID++]))[0];
} : function(item){
return item.uid || (item.uid = Native.UID++);
};
var Window = new Native({
name: 'Window',
legacy: (Browser.Engine.trident) ? null: window.Window,
initialize: function(win){
$uid(win);
if (!win.Element){
win.Element = $empty;
if (Browser.Engine.webkit) win.document.createElement("iframe"); //fixes safari 2
win.Element.prototype = (Browser.Engine.webkit) ? window["[[DOMElement.prototype]]"] : {};
}
win.document.window = win;
return $extend(win, Window.Prototype);
},
afterImplement: function(property, value){
window[property] = Window.Prototype[property] = value;
}
});
Window.Prototype = {$family: {name: 'window'}};
new Window(window);
var Document = new Native({
name: 'Document',
legacy: (Browser.Engine.trident) ? null: window.Document,
initialize: function(doc){
$uid(doc);
doc.head = doc.getElementsByTagName('head')[0];
doc.html = doc.getElementsByTagName('html')[0];
if (Browser.Engine.trident && Browser.Engine.version <= 4) $try(function(){
doc.execCommand("BackgroundImageCache", false, true);
});
if (Browser.Engine.trident) doc.window.attachEvent('onunload', function() {
doc.window.detachEvent('onunload', arguments.callee);
doc.head = doc.html = doc.window = null;
});
return $extend(doc, Document.Prototype);
},
afterImplement: function(property, value){
document[property] = Document.Prototype[property] = value;
}
});
Document.Prototype = {$family: {name: 'document'}};
new Document(document);
Array.implement({
every: function(fn, bind){
for (var i = 0, l = this.length; i < l; i++){
if (!fn.call(bind, this[i], i, this)) return false;
}
return true;
},
filter: function(fn, bind){
var results = [];
for (var i = 0, l = this.length; i < l; i++){
if (fn.call(bind, this[i], i, this)) results.push(this[i]);
}
return results;
},
clean: function() {
return this.filter($defined);
},
indexOf: function(item, from){
var len = this.length;
for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++){
if (this[i] === item) return i;
}
return -1;
},
map: function(fn, bind){
var results = [];
for (var i = 0, l = this.length; i < l; i++) results[i] = fn.call(bind, this[i], i, this);
return results;
},
some: function(fn, bind){
for (var i = 0, l = this.length; i < l; i++){
if (fn.call(bind, this[i], i, this)) return true;
}
return false;
},
associate: function(keys){
var obj = {}, length = Math.min(this.length, keys.length);
for (var i = 0; i < length; i++) obj[keys[i]] = this[i];
return obj;
},
link: function(object){
var result = {};
for (var i = 0, l = this.length; i < l; i++){
for (var key in object){
if (object[key](this[i])){
result[key] = this[i];
delete object[key];
break;
}
}
}
return result;
},
contains: function(item, from){
return this.indexOf(item, from) != -1;
},
extend: function(array){
for (var i = 0, j = array.length; i < j; i++) this.push(array[i]);
return this;
},
getLast: function(){
return (this.length) ? this[this.length - 1] : null;
},
getRandom: function(){
return (this.length) ? this[$random(0, this.length - 1)] : null;
},
include: function(item){
if (!this.contains(item)) this.push(item);
return this;
},
combine: function(array){
for (var i = 0, l = array.length; i < l; i++) this.include(array[i]);
return this;
},
erase: function(item){
for (var i = this.length; i--; i){
if (this[i] === item) this.splice(i, 1);
}
return this;
},
empty: function(){
this.length = 0;
return this;
},
flatten: function(){
var array = [];
for (var i = 0, l = this.length; i < l; i++){
var type = $type(this[i]);
if (!type) continue;
array = array.concat((type == 'array' || type == 'collection' || type == 'arguments') ? Array.flatten(this[i]) : this[i]);
}
return array;
},
hexToRgb: function(array){
if (this.length != 3) return null;
var rgb = this.map(function(value){
if (value.length == 1) value += value;
return value.toInt(16);
});
return (array) ? rgb : 'rgb(' + rgb + ')';
},
rgbToHex: function(array){
if (this.length < 3) return null;
if (this.length == 4 && this[3] == 0 && !array) return 'transparent';
var hex = [];
for (var i = 0; i < 3; i++){
var bit = (this[i] - 0).toString(16);
hex.push((bit.length == 1) ? '0' + bit : bit);
}
return (array) ? hex : '#' + hex.join('');
}
});
Function.implement({
extend: function(properties){
for (var property in properties) this[property] = properties[property];
return this;
},
create: function(options){
var self = this;
options = options || {};
return function(event){
var args = options.arguments;
args = (args != undefined) ? $splat(args) : Array.slice(arguments, (options.event) ? 1 : 0);
if (options.event) args = [event || window.event].extend(args);
var returns = function(){
return self.apply(options.bind || null, args);
};
if (options.delay) return setTimeout(returns, options.delay);
if (options.periodical) return setInterval(returns, options.periodical);
if (options.attempt) return $try(returns);
return returns();
};
},
run: function(args, bind){
return this.apply(bind, $splat(args));
},
pass: function(args, bind){
return this.create({bind: bind, arguments: args});
},
bind: function(bind, args){
return this.create({bind: bind, arguments: args});
},
bindWithEvent: function(bind, args){
return this.create({bind: bind, arguments: args, event: true});
},
attempt: function(args, bind){
return this.create({bind: bind, arguments: args, attempt: true})();
},
delay: function(delay, bind, args){
return this.create({bind: bind, arguments: args, delay: delay})();
},
periodical: function(periodical, bind, args){
return this.create({bind: bind, arguments: args, periodical: periodical})();
}
});
Number.implement({
limit: function(min, max){
return Math.min(max, Math.max(min, this));
},
round: function(precision){
precision = Math.pow(10, precision || 0);
return Math.round(this * precision) / precision;
},
times: function(fn, bind){
for (var i = 0; i < this; i++) fn.call(bind, i, this);
},
toFloat: function(){
return parseFloat(this);
},
toInt: function(base){
return parseInt(this, base || 10);
}
});
Number.alias('times', 'each');
(function(math){
var methods = {};
math.each(function(name){
if (!Number[name]) methods[name] = function(){
return Math[name].apply(null, [this].concat($A(arguments)));
};
});
Number.implement(methods);
})(['abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor', 'log', 'max', 'min', 'pow', 'sin', 'sqrt', 'tan']);
String.implement({
test: function(regex, params){
return ((typeof regex == 'string') ? new RegExp(regex, params) : regex).test(this);
},
contains: function(string, separator){
return (separator) ? (separator + this + separator).indexOf(separator + string + separator) > -1 : this.indexOf(string) > -1;
},
trim: function(){
return this.replace(/^\s+|\s+$/g, '');
},
clean: function(){
return this.replace(/\s+/g, ' ').trim();
},
camelCase: function(){
return this.replace(/-\D/g, function(match){
return match.charAt(1).toUpperCase();
});
},
hyphenate: function(){
return this.replace(/[A-Z]/g, function(match){
return ('-' + match.charAt(0).toLowerCase());
});
},
capitalize: function(){
return this.replace(/\b[a-z]/g, function(match){
return match.toUpperCase();
});
},
escapeRegExp: function(){
return this.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1');
},
toInt: function(base){
return parseInt(this, base || 10);
},
toFloat: function(){
return parseFloat(this);
},
hexToRgb: function(array){
var hex = this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
return (hex) ? hex.slice(1).hexToRgb(array) : null;
},
rgbToHex: function(array){
var rgb = this.match(/\d{1,3}/g);
return (rgb) ? rgb.rgbToHex(array) : null;
},
stripScripts: function(option){
var scripts = '';
var text = this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function(){
scripts += arguments[1] + '\n';
return '';
});
if (option === true) $exec(scripts);
else if ($type(option) == 'function') option(scripts, text);
return text;
},
substitute: function(object, regexp){
return this.replace(regexp || (/\\?\{([^{}]+)\}/g), function(match, name){
if (match.charAt(0) == '\\') return match.slice(1);
return (object[name] != undefined) ? object[name] : '';
});
}
});
Hash.implement({
has: Object.prototype.hasOwnProperty,
keyOf: function(value){
for (var key in this){
if (this.hasOwnProperty(key) && this[key] === value) return key;
}
return null;
},
hasValue: function(value){
return (Hash.keyOf(this, value) !== null);
},
extend: function(properties){
Hash.each(properties, function(value, key){
Hash.set(this, key, value);
}, this);
return this;
},
combine: function(properties){
Hash.each(properties, function(value, key){
Hash.include(this, key, value);
}, this);
return this;
},
erase: function(key){
if (this.hasOwnProperty(key)) delete this[key];
return this;
},
get: function(key){
return (this.hasOwnProperty(key)) ? this[key] : null;
},
set: function(key, value){
if (!this[key] || this.hasOwnProperty(key)) this[key] = value;
return this;
},
empty: function(){
Hash.each(this, function(value, key){
delete this[key];
}, this);
return this;
},
include: function(key, value){
var k = this[key];
if (k == undefined) this[key] = value;
return this;
},
map: function(fn, bind){
var results = new Hash;
Hash.each(this, function(value, key){
results.set(key, fn.call(bind, value, key, this));
}, this);
return results;
},
filter: function(fn, bind){
var results = new Hash;
Hash.each(this, function(value, key){
if (fn.call(bind, value, key, this)) results.set(key, value);
}, this);
return results;
},
every: function(fn, bind){
for (var key in this){
if (this.hasOwnProperty(key) && !fn.call(bind, this[key], key)) return false;
}
return true;
},
some: function(fn, bind){
for (var key in this){
if (this.hasOwnProperty(key) && fn.call(bind, this[key], key)) return true;
}
return false;
},
getKeys: function(){
var keys = [];
Hash.each(this, function(value, key){
keys.push(key);
});
return keys;
},
getValues: function(){
var values = [];
Hash.each(this, function(value){
values.push(value);
});
return values;
},
toQueryString: function(base){
var queryString = [];
Hash.each(this, function(value, key){
if (base) key = base + '[' + key + ']';
var result;
switch ($type(value)){
case 'object': result = Hash.toQueryString(value, key); break;
case 'array':
var qs = {};
value.each(function(val, i){
qs[i] = val;
});
result = Hash.toQueryString(qs, key);
break;
default: result = key + '=' + encodeURIComponent(value);
}
if (value != undefined) queryString.push(result);
});
return queryString.join('&');
}
});
Hash.alias({keyOf: 'indexOf', hasValue: 'contains'});
var Event = new Native({
name: 'Event',
initialize: function(event, win){
win = win || window;
var doc = win.document;
event = event || win.event;
if (event.$extended) return event;
this.$extended = true;
var type = event.type;
var target = event.target || event.srcElement;
while (target && target.nodeType == 3) target = target.parentNode;
if (type.test(/key/)){
var code = event.which || event.keyCode;
var key = Event.Keys.keyOf(code);
if (type == 'keydown'){
var fKey = code - 111;
if (fKey > 0 && fKey < 13) key = 'f' + fKey;
}
key = key || String.fromCharCode(code).toLowerCase();
} else if (type.match(/(click|mouse|menu)/i)){
doc = (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
var page = {
x: event.pageX || event.clientX + doc.scrollLeft,
y: event.pageY || event.clientY + doc.scrollTop
};
var client = {
x: (event.pageX) ? event.pageX - win.pageXOffset : event.clientX,
y: (event.pageY) ? event.pageY - win.pageYOffset : event.clientY
};
if (type.match(/DOMMouseScroll|mousewheel/)){
var wheel = (event.wheelDelta) ? event.wheelDelta / 120 : -(event.detail || 0) / 3;
}
var rightClick = (event.which == 3) || (event.button == 2);
var related = null;
if (type.match(/over|out/)){
switch (type){
case 'mouseover': related = event.relatedTarget || event.fromElement; break;
case 'mouseout': related = event.relatedTarget || event.toElement;
}
if (!(function(){
while (related && related.nodeType == 3) related = related.parentNode;
return true;
}).create({attempt: Browser.Engine.gecko})()) related = false;
}
}
return $extend(this, {
event: event,
type: type,
page: page,
client: client,
rightClick: rightClick,
wheel: wheel,
relatedTarget: related,
target: target,
code: code,
key: key,
shift: event.shiftKey,
control: event.ctrlKey,
alt: event.altKey,
meta: event.metaKey
});
}
});
Event.Keys = new Hash({
'enter': 13,
'up': 38,
'down': 40,
'left': 37,
'right': 39,
'esc': 27,
'space': 32,
'backspace': 8,
'tab': 9,
'delete': 46
});
Event.implement({
stop: function(){
return this.stopPropagation().preventDefault();
},
stopPropagation: function(){
if (this.event.stopPropagation) this.event.stopPropagation();
else this.event.cancelBubble = true;
return this;
},
preventDefault: function(){
if (this.event.preventDefault) this.event.preventDefault();
else this.event.returnValue = false;
return this;
}
});
var Class = new Native({
name: 'Class',
initialize: function(properties){
properties = properties || {};
var klass = function(){
for (var key in this){
if ($type(this[key]) != 'function') this[key] = $unlink(this[key]);
}
this.constructor = klass;
if (Class.prototyping) return this;
var instance = (this.initialize) ? this.initialize.apply(this, arguments) : this;
if (this.options && this.options.initialize) this.options.initialize.call(this);
return instance;
};
for (var mutator in Class.Mutators){
if (!properties[mutator]) continue;
properties = Class.Mutators[mutator](properties, properties[mutator]);
delete properties[mutator];
}
$extend(klass, this);
klass.constructor = Class;
klass.prototype = properties;
return klass;
}
});
Class.Mutators = {
Extends: function(self, klass){
Class.prototyping = klass.prototype;
var subclass = new klass;
delete subclass.parent;
subclass = Class.inherit(subclass, self);
delete Class.prototyping;
return subclass;
},
Implements: function(self, klasses){
$splat(klasses).each(function(klass){
Class.prototying = klass;
$extend(self, ($type(klass) == 'class') ? new klass : klass);
delete Class.prototyping;
});
return self;
}
};
Class.extend({
inherit: function(object, properties){
var caller = arguments.callee.caller;
for (var key in properties){
var override = properties[key];
var previous = object[key];
var type = $type(override);
if (previous && type == 'function'){
if (override != previous){
if (caller){
override.__parent = previous;
object[key] = override;
} else {
Class.override(object, key, override);
}
}
} else if(type == 'object'){
object[key] = $merge(previous, override);
} else {
object[key] = override;
}
}
if (caller) object.parent = function(){
return arguments.callee.caller.__parent.apply(this, arguments);
};
return object;
},
override: function(object, name, method){
var parent = Class.prototyping;
if (parent && object[name] != parent[name]) parent = null;
var override = function(){
var previous = this.parent;
this.parent = parent ? parent[name] : object[name];
var value = method.apply(this, arguments);
this.parent = previous;
return value;
};
object[name] = override;
}
});
Class.implement({
implement: function(){
var proto = this.prototype;
$each(arguments, function(properties){
Class.inherit(proto, properties);
});
return this;
}
});
var Chain = new Class({
$chain: [],
chain: function(){
this.$chain.extend(Array.flatten(arguments));
return this;
},
callChain: function(){
return (this.$chain.length) ? this.$chain.shift().apply(this, arguments) : false;
},
clearChain: function(){
this.$chain.empty();
return this;
}
});
var Events = new Class({
$events: {},
addEvent: function(type, fn, internal){
type = Events.removeOn(type);
if (fn != $empty){
this.$events[type] = this.$events[type] || [];
this.$events[type].include(fn);
if (internal) fn.internal = true;
}
return this;
},
addEvents: function(events){
for (var type in events) this.addEvent(type, events[type]);
return this;
},
fireEvent: function(type, args, delay){
type = Events.removeOn(type);
if (!this.$events || !this.$events[type]) return this;
this.$events[type].each(function(fn){
fn.create({'bind': this, 'delay': delay, 'arguments': args})();
}, this);
return this;
},
removeEvent: function(type, fn){
type = Events.removeOn(type);
if (!this.$events[type]) return this;
if (!fn.internal) this.$events[type].erase(fn);
return this;
},
removeEvents: function(events){
if ($type(events) == 'object'){
for (var type in events) this.removeEvent(type, events[type]);
return this;
}
if (events) events = Events.removeOn(events);
for (var type in this.$events){
if (events && events != type) continue;
var fns = this.$events[type];
for (var i = fns.length; i--; i) this.removeEvent(type, fns[i]);
}
return this;
}
});
Events.removeOn = function(string){
return string.replace(/^on([A-Z])/, function(full, first) {
return first.toLowerCase();
});
};
var Options = new Class({
setOptions: function(){
this.options = $merge.run([this.options].extend(arguments));
if (!this.addEvent) return this;
for (var option in this.options){
if ($type(this.options[option]) != 'function' || !(/^on[A-Z]/).test(option)) continue;
this.addEvent(option, this.options[option]);
delete this.options[option];
}
return this;
}
});
var Element = new Native({
name: 'Element',
legacy: window.Element,
initialize: function(tag, props){
var konstructor = Element.Constructors.get(tag);
if (konstructor) return konstructor(props);
if (typeof tag == 'string') return document.newElement(tag, props);
return $(tag).set(props);
},
afterImplement: function(key, value){
Element.Prototype[key] = value;
if (Array[key]) return;
Elements.implement(key, function(){
var items = [], elements = true;
for (var i = 0, j = this.length; i < j; i++){
var returns = this[i][key].apply(this[i], arguments);
items.push(returns);
if (elements) elements = ($type(returns) == 'element');
}
return (elements) ? new Elements(items) : items;
});
}
});
Element.Prototype = {$family: {name: 'element'}};
Element.Constructors = new Hash;
var IFrame = new Native({
name: 'IFrame',
generics: false,
initialize: function(){
var params = Array.link(arguments, {properties: Object.type, iframe: $defined});
var props = params.properties || {};
var iframe = $(params.iframe) || false;
var onload = props.onload || $empty;
delete props.onload;
props.id = props.name = $pick(props.id, props.name, iframe.id, iframe.name, 'IFrame_' + $time());
iframe = new Element(iframe || 'iframe', props);
var onFrameLoad = function(){
var host = $try(function(){
return iframe.contentWindow.location.host;
});
if (host && host == window.location.host){
var win = new Window(iframe.contentWindow);
new Document(iframe.contentWindow.document);
$extend(win.Element.prototype, Element.Prototype);
}
onload.call(iframe.contentWindow, iframe.contentWindow.document);
};
(window.frames[props.id]) ? onFrameLoad() : iframe.addListener('load', onFrameLoad);
return iframe;
}
});
var Elements = new Native({
initialize: function(elements, options){
options = $extend({ddup: true, cash: true}, options);
elements = elements || [];
if (options.ddup || options.cash){
var uniques = {}, returned = [];
for (var i = 0, l = elements.length; i < l; i++){
var el = $.element(elements[i], !options.cash);
if (options.ddup){
if (uniques[el.uid]) continue;
uniques[el.uid] = true;
}
returned.push(el);
}
elements = returned;
}
return (options.cash) ? $extend(elements, this) : elements;
}
});
Elements.implement({
filter: function(filter, bind){
if (!filter) return this;
return new Elements(Array.filter(this, (typeof filter == 'string') ? function(item){
return item.match(filter);
} : filter, bind));
}
});
Document.implement({
newElement: function(tag, props){
if (Browser.Engine.trident && props){
['name', 'type', 'checked'].each(function(attribute){
if (!props[attribute]) return;
tag += ' ' + attribute + '="' + props[attribute] + '"';
if (attribute != 'checked') delete props[attribute];
});
tag = '<' + tag + '>';
}
return $.element(this.createElement(tag)).set(props);
},
newTextNode: function(text){
return this.createTextNode(text);
},
getDocument: function(){
return this;
},
getWindow: function(){
return this.window;
}
});
Window.implement({
$: function(el, nocash){
if (el && el.$family && el.uid) return el;
var type = $type(el);
return ($[type]) ? $[type](el, nocash, this.document) : null;
},
$$: function(selector){
if (arguments.length == 1 && typeof selector == 'string') return this.document.getElements(selector);
var elements = [];
var args = Array.flatten(arguments);
for (var i = 0, l = args.length; i < l; i++){
var item = args[i];
switch ($type(item)){
case 'element': elements.push(item); break;
case 'string': elements.extend(this.document.getElements(item, true));
}
}
return new Elements(elements);
},
getDocument: function(){
return this.document;
},
getWindow: function(){
return this;
}
});
$.string = function(id, nocash, doc){
id = doc.getElementById(id);
return (id) ? $.element(id, nocash) : null;
};
$.element = function(el, nocash){
$uid(el);
if (!nocash && !el.$family && !(/^object|embed$/i).test(el.tagName)){
var proto = Element.Prototype;
for (var p in proto) el[p] = proto[p];
};
return el;
};
$.object = function(obj, nocash, doc){
if (obj.toElement) return $.element(obj.toElement(doc), nocash);
return null;
};
$.textnode = $.whitespace = $.window = $.document = $arguments(0);
Native.implement([Element, Document], {
getElement: function(selector, nocash){
return $(this.getElements(selector, true)[0] || null, nocash);
},
getElements: function(tags, nocash){
tags = tags.split(',');
var elements = [];
var ddup = (tags.length > 1);
tags.each(function(tag){
var partial = this.getElementsByTagName(tag.trim());
(ddup) ? elements.extend(partial) : elements = partial;
}, this);
return new Elements(elements, {ddup: ddup, cash: !nocash});
}
});
(function(){
var collected = {}, storage = {};
var props = {input: 'checked', option: 'selected', textarea: (Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerHTML' : 'value'};
var get = function(uid){
return (storage[uid] || (storage[uid] = {}));
};
var clean = function(item, retain){
if (!item) return;
var uid = item.uid;
if (Browser.Engine.trident){
if (item.clearAttributes){
var clone = retain && item.cloneNode(false);
item.clearAttributes();
if (clone) item.mergeAttributes(clone);
} else if (item.removeEvents){
item.removeEvents();
}
if ((/object/i).test(item.tagName)){
for (var p in item){
if (typeof item[p] == 'function') item[p] = $empty;
}
Element.dispose(item);
}
}
if (!uid) return;
collected[uid] = storage[uid] = null;
};
var purge = function(){
Hash.each(collected, clean);
if (Browser.Engine.trident) $A(document.getElementsByTagName('object')).each(clean);
if (window.CollectGarbage) CollectGarbage();
collected = storage = null;
};
var walk = function(element, walk, start, match, all, nocash){
var el = element[start || walk];
var elements = [];
while (el){
if (el.nodeType == 1 && (!match || Element.match(el, match))){
if (!all) return $(el, nocash);
elements.push(el);
}
el = el[walk];
}
return (all) ? new Elements(elements, {ddup: false, cash: !nocash}) : null;
};
var attributes = {
'html': 'innerHTML',
'class': 'className',
'for': 'htmlFor',
'text': (Browser.Engine.trident || (Browser.Engine.webkit && Browser.Engine.version < 420)) ? 'innerText' : 'textContent'
};
var bools = ['compact', 'nowrap', 'ismap', 'declare', 'noshade', 'checked', 'disabled', 'readonly', 'multiple', 'selected', 'noresize', 'defer'];
var camels = ['value', 'accessKey', 'cellPadding', 'cellSpacing', 'colSpan', 'frameBorder', 'maxLength', 'readOnly', 'rowSpan', 'tabIndex', 'useMap'];
Hash.extend(attributes, bools.associate(bools));
Hash.extend(attributes, camels.associate(camels.map(String.toLowerCase)));
var inserters = {
before: function(context, element){
if (element.parentNode) element.parentNode.insertBefore(context, element);
},
after: function(context, element){
if (!element.parentNode) return;
var next = element.nextSibling;
(next) ? element.parentNode.insertBefore(context, next) : element.parentNode.appendChild(context);
},
bottom: function(context, element){
element.appendChild(context);
},
top: function(context, element){
var first = element.firstChild;
(first) ? element.insertBefore(context, first) : element.appendChild(context);
}
};
inserters.inside = inserters.bottom;
Hash.each(inserters, function(inserter, where){
where = where.capitalize();
Element.implement('inject' + where, function(el){
inserter(this, $(el, true));
return this;
});
Element.implement('grab' + where, function(el){
inserter($(el, true), this);
return this;
});
});
Element.implement({
set: function(prop, value){
switch ($type(prop)){
case 'object':
for (var p in prop) this.set(p, prop[p]);
break;
case 'string':
var property = Element.Properties.get(prop);
(property && property.set) ? property.set.apply(this, Array.slice(arguments, 1)) : this.setProperty(prop, value);
}
return this;
},
get: function(prop){
var property = Element.Properties.get(prop);
return (property && property.get) ? property.get.apply(this, Array.slice(arguments, 1)) : this.getProperty(prop);
},
erase: function(prop){
var property = Element.Properties.get(prop);
(property && property.erase) ? property.erase.apply(this) : this.removeProperty(prop);
return this;
},
setProperty: function(attribute, value){
var key = attributes[attribute];
if (value == undefined) return this.removeProperty(attribute);
if (key && bools[attribute]) value = !!value;
(key) ? this[key] = value : this.setAttribute(attribute, '' + value);
return this;
},
setProperties: function(attributes){
for (var attribute in attributes) this.setProperty(attribute, attributes[attribute]);
return this;
},
getProperty: function(attribute){
var key = attributes[attribute];
var value = (key) ? this[key] : this.getAttribute(attribute, 2);
return (bools[attribute]) ? !!value : (key) ? value : value || null;
},
getProperties: function(){
var args = $A(arguments);
return args.map(this.getProperty, this).associate(args);
},
removeProperty: function(attribute){
var key = attributes[attribute];
(key) ? this[key] = (key && bools[attribute]) ? false : '' : this.removeAttribute(attribute);
return this;
},
removeProperties: function(){
Array.each(arguments, this.removeProperty, this);
return this;
},
hasClass: function(className){
return this.className.contains(className, ' ');
},
addClass: function(className){
if (!this.hasClass(className)) this.className = (this.className + ' ' + className).clean();
return this;
},
removeClass: function(className){
this.className = this.className.replace(new RegExp('(^|\\s)' + className + '(?:\\s|$)'), '$1');
return this;
},
toggleClass: function(className){
return this.hasClass(className) ? this.removeClass(className) : this.addClass(className);
},
adopt: function(){
Array.flatten(arguments).each(function(element){
element = $(element, true);
if (element) this.appendChild(element);
}, this);
return this;
},
appendText: function(text, where){
return this.grab(this.getDocument().newTextNode(text), where);
},
grab: function(el, where){
inserters[where || 'bottom']($(el, true), this);
return this;
},
inject: function(el, where){
inserters[where || 'bottom'](this, $(el, true));
return this;
},
replaces: function(el){
el = $(el, true);
el.parentNode.replaceChild(this, el);
return this;
},
wraps: function(el, where){
el = $(el, true);
return this.replaces(el).grab(el, where);
},
getPrevious: function(match, nocash){
return walk(this, 'previousSibling', null, match, false, nocash);
},
getAllPrevious: function(match, nocash){
return walk(this, 'previousSibling', null, match, true, nocash);
},
getNext: function(match, nocash){
return walk(this, 'nextSibling', null, match, false, nocash);
},
getAllNext: function(match, nocash){
return walk(this, 'nextSibling', null, match, true, nocash);
},
getFirst: function(match, nocash){
return walk(this, 'nextSibling', 'firstChild', match, false, nocash);
},
getLast: function(match, nocash){
return walk(this, 'previousSibling', 'lastChild', match, false, nocash);
},
getParent: function(match, nocash){
return walk(this, 'parentNode', null, match, false, nocash);
},
getParents: function(match, nocash){
return walk(this, 'parentNode', null, match, true, nocash);
},
getChildren: function(match, nocash){
return walk(this, 'nextSibling', 'firstChild', match, true, nocash);
},
getWindow: function(){
return this.ownerDocument.window;
},
getDocument: function(){
return this.ownerDocument;
},
getElementById: function(id, nocash){
var el = this.ownerDocument.getElementById(id);
if (!el) return null;
for (var parent = el.parentNode; parent != this; parent = parent.parentNode){
if (!parent) return null;
}
return $.element(el, nocash);
},
getSelected: function(){
return new Elements($A(this.options).filter(function(option){
return option.selected;
}));
},
getComputedStyle: function(property){
if (this.currentStyle) return this.currentStyle[property.camelCase()];
var computed = this.getDocument().defaultView.getComputedStyle(this, null);
return (computed) ? computed.getPropertyValue([property.hyphenate()]) : null;
},
toQueryString: function(){
var queryString = [];
this.getElements('input, select, textarea', true).each(function(el){
if (!el.name || el.disabled) return;
var value = (el.tagName.toLowerCase() == 'select') ? Element.getSelected(el).map(function(opt){
return opt.value;
}) : ((el.type == 'radio' || el.type == 'checkbox') && !el.checked) ? null : el.value;
$splat(value).each(function(val){
if (typeof val != 'undefined') queryString.push(el.name + '=' + encodeURIComponent(val));
});
});
return queryString.join('&');
},
clone: function(contents, keepid){
contents = contents !== false;
var clone = this.cloneNode(contents);
var clean = function(node, element){
if (!keepid) node.removeAttribute('id');
if (Browser.Engine.trident){
node.clearAttributes();
node.mergeAttributes(element);
node.removeAttribute('uid');
if (node.options){
var no = node.options, eo = element.options;
for (var j = no.length; j--;) no[j].selected = eo[j].selected;
}
}
var prop = props[element.tagName.toLowerCase()];
if (prop && element[prop]) node[prop] = element[prop];
};
if (contents){
var ce = clone.getElementsByTagName('*'), te = this.getElementsByTagName('*');
for (var i = ce.length; i--;) clean(ce[i], te[i]);
}
clean(clone, this);
return $(clone);
},
destroy: function(){
Element.empty(this);
Element.dispose(this);
clean(this, true);
return null;
},
empty: function(){
$A(this.childNodes).each(function(node){
Element.destroy(node);
});
return this;
},
dispose: function(){
return (this.parentNode) ? this.parentNode.removeChild(this) : this;
},
hasChild: function(el){
el = $(el, true);
if (!el) return false;
if (Browser.Engine.webkit && Browser.Engine.version < 420) return $A(this.getElementsByTagName(el.tagName)).contains(el);
return (this.contains) ? (this != el && this.contains(el)) : !!(this.compareDocumentPosition(el) & 16);
},
match: function(tag){
return (!tag || (tag == this) || (Element.get(this, 'tag') == tag));
}
});
Native.implement([Element, Window, Document], {
addListener: function(type, fn){
if (type == 'unload'){
var old = fn, self = this;
fn = function(){
self.removeListener('unload', fn);
old();
};
} else {
collected[this.uid] = this;
}
if (this.addEventListener) this.addEventListener(type, fn, false);
else this.attachEvent('on' + type, fn);
return this;
},
removeListener: function(type, fn){
if (this.removeEventListener) this.removeEventListener(type, fn, false);
else this.detachEvent('on' + type, fn);
return this;
},
retrieve: function(property, dflt){
var storage = get(this.uid), prop = storage[property];
if (dflt != undefined && prop == undefined) prop = storage[property] = dflt;
return $pick(prop);
},
store: function(property, value){
var storage = get(this.uid);
storage[property] = value;
return this;
},
eliminate: function(property){
var storage = get(this.uid);
delete storage[property];
return this;
}
});
window.addListener('unload', purge);
})();
Element.Properties = new Hash;
Element.Properties.style = {
set: function(style){
this.style.cssText = style;
},
get: function(){
return this.style.cssText;
},
erase: function(){
this.style.cssText = '';
}
};
Element.Properties.tag = {
get: function(){
return this.tagName.toLowerCase();
}
};
Element.Properties.html = (function(){
var wrapper = document.createElement('div');
var translations = {
table: [1, '<table>', '</table>'],
select: [1, '<select>', '</select>'],
tbody: [2, '<table><tbody>', '</tbody></table>'],
tr: [3, '<table><tbody><tr>', '</tr></tbody></table>']
};
translations.thead = translations.tfoot = translations.tbody;
var html = {
set: function(){
var html = Array.flatten(arguments).join('');
var wrap = Browser.Engine.trident && translations[this.get('tag')];
if (wrap){
var first = wrapper;
first.innerHTML = wrap[1] + html + wrap[2];
for (var i = wrap[0]; i--;) first = first.firstChild;
this.empty().adopt(first.childNodes);
} else {
this.innerHTML = html;
}
}
};
html.erase = html.set;
return html;
})();
if (Browser.Engine.webkit && Browser.Engine.version < 420) Element.Properties.text = {
get: function(){
if (this.innerText) return this.innerText;
var temp = this.ownerDocument.newElement('div', {html: this.innerHTML}).inject(this.ownerDocument.body);
var text = temp.innerText;
temp.destroy();
return text;
}
};
Element.Properties.events = {set: function(events){
this.addEvents(events);
}};
Native.implement([Element, Window, Document], {
addEvent: function(type, fn){
var events = this.retrieve('events', {});
events[type] = events[type] || {'keys': [], 'values': []};
if (events[type].keys.contains(fn)) return this;
events[type].keys.push(fn);
var realType = type, custom = Element.Events.get(type), condition = fn, self = this;
if (custom){
if (custom.onAdd) custom.onAdd.call(this, fn);
if (custom.condition){
condition = function(event){
if (custom.condition.call(this, event)) return fn.call(this, event);
return true;
};
}
realType = custom.base || realType;
}
var defn = function(){
return fn.call(self);
};
var nativeEvent = Element.NativeEvents[realType];
if (nativeEvent){
if (nativeEvent == 2){
defn = function(event){
event = new Event(event, self.getWindow());
if (condition.call(self, event) === false) event.stop();
};
}
this.addListener(realType, defn);
}
events[type].values.push(defn);
return this;
},
removeEvent: function(type, fn){
var events = this.retrieve('events');
if (!events || !events[type]) return this;
var pos = events[type].keys.indexOf(fn);
if (pos == -1) return this;
events[type].keys.splice(pos, 1);
var value = events[type].values.splice(pos, 1)[0];
var custom = Element.Events.get(type);
if (custom){
if (custom.onRemove) custom.onRemove.call(this, fn);
type = custom.base || type;
}
return (Element.NativeEvents[type]) ? this.removeListener(type, value) : this;
},
addEvents: function(events){
for (var event in events) this.addEvent(event, events[event]);
return this;
},
removeEvents: function(events){
if ($type(events) == 'object'){
for (var type in events) this.removeEvent(type, events[type]);
return this;
}
var attached = this.retrieve('events');
if (!attached) return this;
if (!events){
for (var type in attached) this.removeEvents(type);
this.eliminate('events');
} else if (attached[events]){
while (attached[events].keys[0]) this.removeEvent(events, attached[events].keys[0]);
attached[events] = null;
}
return this;
},
fireEvent: function(type, args, delay){
var events = this.retrieve('events');
if (!events || !events[type]) return this;
events[type].keys.each(function(fn){
fn.create({'bind': this, 'delay': delay, 'arguments': args})();
}, this);
return this;
},
cloneEvents: function(from, type){
from = $(from);
var fevents = from.retrieve('events');
if (!fevents) return this;
if (!type){
for (var evType in fevents) this.cloneEvents(from, evType);
} else if (fevents[type]){
fevents[type].keys.each(function(fn){
this.addEvent(type, fn);
}, this);
}
return this;
}
});
Element.NativeEvents = {
click: 2, dblclick: 2, mouseup: 2, mousedown: 2, contextmenu: 2, //mouse buttons
mousewheel: 2, DOMMouseScroll: 2, //mouse wheel
mouseover: 2, mouseout: 2, mousemove: 2, selectstart: 2, selectend: 2, //mouse movement
keydown: 2, keypress: 2, keyup: 2, //keyboard
focus: 2, blur: 2, change: 2, reset: 2, select: 2, submit: 2, //form elements
load: 1, unload: 1, beforeunload: 2, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window
error: 1, abort: 1, scroll: 1 //misc
};
(function(){
var $check = function(event){
var related = event.relatedTarget;
if (related == undefined) return true;
if (related === false) return false;
return ($type(this) != 'document' && related != this && related.prefix != 'xul' && !this.hasChild(related));
};
Element.Events = new Hash({
mouseenter: {
base: 'mouseover',
condition: $check
},
mouseleave: {
base: 'mouseout',
condition: $check
},
mousewheel: {
base: (Browser.Engine.gecko) ? 'DOMMouseScroll' : 'mousewheel'
}
});
})();
Element.Properties.styles = {set: function(styles){
this.setStyles(styles);
}};
Element.Properties.opacity = {
set: function(opacity, novisibility){
if (!novisibility){
if (opacity == 0){
if (this.style.visibility != 'hidden') this.style.visibility = 'hidden';
} else {
if (this.style.visibility != 'visible') this.style.visibility = 'visible';
}
}
if (!this.currentStyle || !this.currentStyle.hasLayout) this.style.zoom = 1;
if (Browser.Engine.trident) this.style.filter = (opacity == 1) ? '' : 'alpha(opacity=' + opacity * 100 + ')';
this.style.opacity = opacity;
this.store('opacity', opacity);
},
get: function(){
return this.retrieve('opacity', 1);
}
};
Element.implement({
setOpacity: function(value){
return this.set('opacity', value, true);
},
getOpacity: function(){
return this.get('opacity');
},
setStyle: function(property, value){
switch (property){
case 'opacity': return this.set('opacity', parseFloat(value));
case 'float': property = (Browser.Engine.trident) ? 'styleFloat' : 'cssFloat';
}
property = property.camelCase();
if ($type(value) != 'string'){
var map = (Element.Styles.get(property) || '@').split(' ');
value = $splat(value).map(function(val, i){
if (!map[i]) return '';
return ($type(val) == 'number') ? map[i].replace('@', Math.round(val)) : val;
}).join(' ');
} else if (value == String(Number(value))){
value = Math.round(value);
}
this.style[property] = value;
return this;
},
getStyle: function(property){
switch (property){
case 'opacity': return this.get('opacity');
case 'float': property = (Browser.Engine.trident) ? 'styleFloat' : 'cssFloat';
}
property = property.camelCase();
var result = this.style[property];
if (!$chk(result)){
result = [];
for (var style in Element.ShortStyles){
if (property != style) continue;
for (var s in Element.ShortStyles[style]) result.push(this.getStyle(s));
return result.join(' ');
}
result = this.getComputedStyle(property);
}
if (result){
result = String(result);
var color = result.match(/rgba?\([\d\s,]+\)/);
if (color) result = result.replace(color[0], color[0].rgbToHex());
}
if (Browser.Engine.presto || (Browser.Engine.trident && !$chk(parseInt(result)))){
if (property.test(/^(height|width)$/)){
var values = (property == 'width') ? ['left', 'right'] : ['top', 'bottom'], size = 0;
values.each(function(value){
size += this.getStyle('border-' + value + '-width').toInt() + this.getStyle('padding-' + value).toInt();
}, this);
return this['offset' + property.capitalize()] - size + 'px';
}
if ((Browser.Engine.presto) && String(result).test('px')) return result;
if (property.test(/(border(.+)Width|margin|padding)/)) return '0px';
}
return result;
},
setStyles: function(styles){
for (var style in styles) this.setStyle(style, styles[style]);
return this;
},
getStyles: function(){
var result = {};
Array.each(arguments, function(key){
result[key] = this.getStyle(key);
}, this);
return result;
}
});
Element.Styles = new Hash({
left: '@px', top: '@px', bottom: '@px', right: '@px',
width: '@px', height: '@px', maxWidth: '@px', maxHeight: '@px', minWidth: '@px', minHeight: '@px',
backgroundColor: 'rgb(@, @, @)', backgroundPosition: '@px @px', color: 'rgb(@, @, @)',
fontSize: '@px', letterSpacing: '@px', lineHeight: '@px', clip: 'rect(@px @px @px @px)',
margin: '@px @px @px @px', padding: '@px @px @px @px', border: '@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)',
borderWidth: '@px @px @px @px', borderStyle: '@ @ @ @', borderColor: 'rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)',
zIndex: '@', 'zoom': '@', fontWeight: '@', textIndent: '@px', opacity: '@'
});
Element.ShortStyles = {margin: {}, padding: {}, border: {}, borderWidth: {}, borderStyle: {}, borderColor: {}};
['Top', 'Right', 'Bottom', 'Left'].each(function(direction){
var Short = Element.ShortStyles;
var All = Element.Styles;
['margin', 'padding'].each(function(style){
var sd = style + direction;
Short[style][sd] = All[sd] = '@px';
});
var bd = 'border' + direction;
Short.border[bd] = All[bd] = '@px @ rgb(@, @, @)';
var bdw = bd + 'Width', bds = bd + 'Style', bdc = bd + 'Color';
Short[bd] = {};
Short.borderWidth[bdw] = Short[bd][bdw] = All[bdw] = '@px';
Short.borderStyle[bds] = Short[bd][bds] = All[bds] = '@';
Short.borderColor[bdc] = Short[bd][bdc] = All[bdc] = 'rgb(@, @, @)';
});
(function(){
Element.implement({
scrollTo: function(x, y){
if (isBody(this)){
this.getWindow().scrollTo(x, y);
} else {
this.scrollLeft = x;
this.scrollTop = y;
}
return this;
},
getSize: function(){
if (isBody(this)) return this.getWindow().getSize();
return {x: this.offsetWidth, y: this.offsetHeight};
},
getScrollSize: function(){
if (isBody(this)) return this.getWindow().getScrollSize();
return {x: this.scrollWidth, y: this.scrollHeight};
},
getScroll: function(){
if (isBody(this)) return this.getWindow().getScroll();
return {x: this.scrollLeft, y: this.scrollTop};
},
getScrolls: function(){
var element = this, position = {x: 0, y: 0};
while (element && !isBody(element)){
position.x += element.scrollLeft;
position.y += element.scrollTop;
element = element.parentNode;
}
return position;
},
getOffsetParent: function(){
var element = this;
if (isBody(element)) return null;
if (!Browser.Engine.trident) return element.offsetParent;
while ((element = element.parentNode) && !isBody(element)){
if (styleString(element, 'position') != 'static') return element;
}
return null;
},
getOffsets: function(){
if (Browser.Engine.trident){
var bound = this.getBoundingClientRect(), html = this.getDocument().documentElement;
return {
x: bound.left + html.scrollLeft - html.clientLeft,
y: bound.top + html.scrollTop - html.clientTop
};
}
var element = this, position = {x: 0, y: 0};
if (isBody(this)) return position;
while (element && !isBody(element)){
position.x += element.offsetLeft;
position.y += element.offsetTop;
if (Browser.Engine.gecko){
if (!borderBox(element)){
position.x += leftBorder(element);
position.y += topBorder(element);
}
var parent = element.parentNode;
if (parent && styleString(parent, 'overflow') != 'visible'){
position.x += leftBorder(parent);
position.y += topBorder(parent);
}
} else if (element != this && Browser.Engine.webkit){
position.x += leftBorder(element);
position.y += topBorder(element);
}
element = element.offsetParent;
}
if (Browser.Engine.gecko && !borderBox(this)){
position.x -= leftBorder(this);
position.y -= topBorder(this);
}
return position;
},
getPosition: function(relative){
if (isBody(this)) return {x: 0, y: 0};
var offset = this.getOffsets(), scroll = this.getScrolls();
var position = {x: offset.x - scroll.x, y: offset.y - scroll.y};
var relativePosition = (relative && (relative = $(relative))) ? relative.getPosition() : {x: 0, y: 0};
return {x: position.x - relativePosition.x, y: position.y - relativePosition.y};
},
getCoordinates: function(element){
if (isBody(this)) return this.getWindow().getCoordinates();
var position = this.getPosition(element), size = this.getSize();
var obj = {left: position.x, top: position.y, width: size.x, height: size.y};
obj.right = obj.left + obj.width;
obj.bottom = obj.top + obj.height;
return obj;
},
computePosition: function(obj){
return {left: obj.x - styleNumber(this, 'margin-left'), top: obj.y - styleNumber(this, 'margin-top')};
},
position: function(obj){
return this.setStyles(this.computePosition(obj));
}
});
Native.implement([Document, Window], {
getSize: function(){
var win = this.getWindow();
if (Browser.Engine.presto || Browser.Engine.webkit) return {x: win.innerWidth, y: win.innerHeight};
var doc = getCompatElement(this);
return {x: doc.clientWidth, y: doc.clientHeight};
},
getScroll: function(){
var win = this.getWindow();
var doc = getCompatElement(this);
return {x: win.pageXOffset || doc.scrollLeft, y: win.pageYOffset || doc.scrollTop};
},
getScrollSize: function(){
var doc = getCompatElement(this);
var min = this.getSize();
return {x: Math.max(doc.scrollWidth, min.x), y: Math.max(doc.scrollHeight, min.y)};
},
getPosition: function(){
return {x: 0, y: 0};
},
getCoordinates: function(){
var size = this.getSize();
return {top: 0, left: 0, bottom: size.y, right: size.x, height: size.y, width: size.x};
}
});
var styleString = Element.getComputedStyle;
function styleNumber(element, style){
return styleString(element, style).toInt() || 0;
};
function borderBox(element){
return styleString(element, '-moz-box-sizing') == 'border-box';
};
function topBorder(element){
return styleNumber(element, 'border-top-width');
};
function leftBorder(element){
return styleNumber(element, 'border-left-width');
};
function isBody(element){
return (/^(?:body|html)$/i).test(element.tagName);
};
function getCompatElement(element){
var doc = element.getDocument();
return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
};
})();
Native.implement([Window, Document, Element], {
getHeight: function(){
return this.getSize().y;
},
getWidth: function(){
return this.getSize().x;
},
getScrollTop: function(){
return this.getScroll().y;
},
getScrollLeft: function(){
return this.getScroll().x;
},
getScrollHeight: function(){
return this.getScrollSize().y;
},
getScrollWidth: function(){
return this.getScrollSize().x;
},
getTop: function(){
return this.getPosition().y;
},
getLeft: function(){
return this.getPosition().x;
}
});
Native.implement([Document, Element], {
getElements: function(expression, nocash){
expression = expression.split(',');
var items, local = {};
for (var i = 0, l = expression.length; i < l; i++){
var selector = expression[i], elements = Selectors.Utils.search(this, selector, local);
if (i != 0 && elements.item) elements = $A(elements);
items = (i == 0) ? elements : (items.item) ? $A(items).concat(elements) : items.concat(elements);
}
return new Elements(items, {ddup: (expression.length > 1), cash: !nocash});
}
});
Element.implement({
match: function(selector){
if (!selector || (selector == this)) return true;
var tagid = Selectors.Utils.parseTagAndID(selector);
var tag = tagid[0], id = tagid[1];
if (!Selectors.Filters.byID(this, id) || !Selectors.Filters.byTag(this, tag)) return false;
var parsed = Selectors.Utils.parseSelector(selector);
return (parsed) ? Selectors.Utils.filter(this, parsed, {}) : true;
}
});
var Selectors = {Cache: {nth: {}, parsed: {}}};
Selectors.RegExps = {
id: (/#([\w-]+)/),
tag: (/^(\w+|\*)/),
quick: (/^(\w+|\*)$/),
splitter: (/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),
combined: (/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)(["']?)([^\4]*?)\4)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)
};
Selectors.Utils = {
chk: function(item, uniques){
if (!uniques) return true;
var uid = $uid(item);
if (!uniques[uid]) return uniques[uid] = true;
return false;
},
parseNthArgument: function(argument){
if (Selectors.Cache.nth[argument]) return Selectors.Cache.nth[argument];
var parsed = argument.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);
if (!parsed) return false;
var inta = parseInt(parsed[1]);
var a = (inta || inta === 0) ? inta : 1;
var special = parsed[2] || false;
var b = parseInt(parsed[3]) || 0;
if (a != 0){
b--;
while (b < 1) b += a;
while (b >= a) b -= a;
} else {
a = b;
special = 'index';
}
switch (special){
case 'n': parsed = {a: a, b: b, special: 'n'}; break;
case 'odd': parsed = {a: 2, b: 0, special: 'n'}; break;
case 'even': parsed = {a: 2, b: 1, special: 'n'}; break;
case 'first': parsed = {a: 0, special: 'index'}; break;
case 'last': parsed = {special: 'last-child'}; break;
case 'only': parsed = {special: 'only-child'}; break;
default: parsed = {a: (a - 1), special: 'index'};
}
return Selectors.Cache.nth[argument] = parsed;
},
parseSelector: function(selector){
if (Selectors.Cache.parsed[selector]) return Selectors.Cache.parsed[selector];
var m, parsed = {classes: [], pseudos: [], attributes: []};
while ((m = Selectors.RegExps.combined.exec(selector))){
var cn = m[1], an = m[2], ao = m[3], av = m[5], pn = m[6], pa = m[7];
if (cn){
parsed.classes.push(cn);
} else if (pn){
var parser = Selectors.Pseudo.get(pn);
if (parser) parsed.pseudos.push({parser: parser, argument: pa});
else parsed.attributes.push({name: pn, operator: '=', value: pa});
} else if (an){
parsed.attributes.push({name: an, operator: ao, value: av});
}
}
if (!parsed.classes.length) delete parsed.classes;
if (!parsed.attributes.length) delete parsed.attributes;
if (!parsed.pseudos.length) delete parsed.pseudos;
if (!parsed.classes && !parsed.attributes && !parsed.pseudos) parsed = null;
return Selectors.Cache.parsed[selector] = parsed;
},
parseTagAndID: function(selector){
var tag = selector.match(Selectors.RegExps.tag);
var id = selector.match(Selectors.RegExps.id);
return [(tag) ? tag[1] : '*', (id) ? id[1] : false];
},
filter: function(item, parsed, local){
var i;
if (parsed.classes){
for (i = parsed.classes.length; i--; i){
var cn = parsed.classes[i];
if (!Selectors.Filters.byClass(item, cn)) return false;
}
}
if (parsed.attributes){
for (i = parsed.attributes.length; i--; i){
var att = parsed.attributes[i];
if (!Selectors.Filters.byAttribute(item, att.name, att.operator, att.value)) return false;
}
}
if (parsed.pseudos){
for (i = parsed.pseudos.length; i--; i){
var psd = parsed.pseudos[i];
if (!Selectors.Filters.byPseudo(item, psd.parser, psd.argument, local)) return false;
}
}
return true;
},
getByTagAndID: function(ctx, tag, id){
if (id){
var item = (ctx.getElementById) ? ctx.getElementById(id, true) : Element.getElementById(ctx, id, true);
return (item && Selectors.Filters.byTag(item, tag)) ? [item] : [];
} else {
return ctx.getElementsByTagName(tag);
}
},
search: function(self, expression, local){
var splitters = [];
var selectors = expression.trim().replace(Selectors.RegExps.splitter, function(m0, m1, m2){
splitters.push(m1);
return ':)' + m2;
}).split(':)');
var items, filtered, item;
for (var i = 0, l = selectors.length; i < l; i++){
var selector = selectors[i];
if (i == 0 && Selectors.RegExps.quick.test(selector)){
items = self.getElementsByTagName(selector);
continue;
}
var splitter = splitters[i - 1];
var tagid = Selectors.Utils.parseTagAndID(selector);
var tag = tagid[0], id = tagid[1];
if (i == 0){
items = Selectors.Utils.getByTagAndID(self, tag, id);
} else {
var uniques = {}, found = [];
for (var j = 0, k = items.length; j < k; j++) found = Selectors.Getters[splitter](found, items[j], tag, id, uniques);
items = found;
}
var parsed = Selectors.Utils.parseSelector(selector);
if (parsed){
filtered = [];
for (var m = 0, n = items.length; m < n; m++){
item = items[m];
if (Selectors.Utils.filter(item, parsed, local)) filtered.push(item);
}
items = filtered;
}
}
return items;
}
};
Selectors.Getters = {
' ': function(found, self, tag, id, uniques){
var items = Selectors.Utils.getByTagAndID(self, tag, id);
for (var i = 0, l = items.length; i < l; i++){
var item = items[i];
if (Selectors.Utils.chk(item, uniques)) found.push(item);
}
return found;
},
'>': function(found, self, tag, id, uniques){
var children = Selectors.Utils.getByTagAndID(self, tag, id);
for (var i = 0, l = children.length; i < l; i++){
var child = children[i];
if (child.parentNode == self && Selectors.Utils.chk(child, uniques)) found.push(child);
}
return found;
},
'+': function(found, self, tag, id, uniques){
while ((self = self.nextSibling)){
if (self.nodeType == 1){
if (Selectors.Utils.chk(self, uniques) && Selectors.Filters.byTag(self, tag) && Selectors.Filters.byID(self, id)) found.push(self);
break;
}
}
return found;
},
'~': function(found, self, tag, id, uniques){
while ((self = self.nextSibling)){
if (self.nodeType == 1){
if (!Selectors.Utils.chk(self, uniques)) break;
if (Selectors.Filters.byTag(self, tag) && Selectors.Filters.byID(self, id)) found.push(self);
}
}
return found;
}
};
Selectors.Filters = {
byTag: function(self, tag){
return (tag == '*' || (self.tagName && self.tagName.toLowerCase() == tag));
},
byID: function(self, id){
return (!id || (self.id && self.id == id));
},
byClass: function(self, klass){
return (self.className && self.className.contains(klass, ' '));
},
byPseudo: function(self, parser, argument, local){
return parser.call(self, argument, local);
},
byAttribute: function(self, name, operator, value){
var result = Element.prototype.getProperty.call(self, name);
if (!result) return (operator == '!=');
if (!operator || value == undefined) return true;
switch (operator){
case '=': return (result == value);
case '*=': return (result.contains(value));
case '^=': return (result.substr(0, value.length) == value);
case '$=': return (result.substr(result.length - value.length) == value);
case '!=': return (result != value);
case '~=': return result.contains(value, ' ');
case '|=': return result.contains(value, '-');
}
return false;
}
};
Selectors.Pseudo = new Hash({
checked: function(){
return this.checked;
},
empty: function(){
return !(this.innerText || this.textContent || '').length;
},
not: function(selector){
return !Element.match(this, selector);
},
contains: function(text){
return (this.innerText || this.textContent || '').contains(text);
},
'first-child': function(){
return Selectors.Pseudo.index.call(this, 0);
},
'last-child': function(){
var element = this;
while ((element = element.nextSibling)){
if (element.nodeType == 1) return false;
}
return true;
},
'only-child': function(){
var prev = this;
while ((prev = prev.previousSibling)){
if (prev.nodeType == 1) return false;
}
var next = this;
while ((next = next.nextSibling)){
if (next.nodeType == 1) return false;
}
return true;
},
'nth-child': function(argument, local){
argument = (argument == undefined) ? 'n' : argument;
var parsed = Selectors.Utils.parseNthArgument(argument);
if (parsed.special != 'n') return Selectors.Pseudo[parsed.special].call(this, parsed.a, local);
var count = 0;
local.positions = local.positions || {};
var uid = $uid(this);
if (!local.positions[uid]){
var self = this;
while ((self = self.previousSibling)){
if (self.nodeType != 1) continue;
count ++;
var position = local.positions[$uid(self)];
if (position != undefined){
count = position + count;
break;
}
}
local.positions[uid] = count;
}
return (local.positions[uid] % parsed.a == parsed.b);
},
index: function(index){
var element = this, count = 0;
while ((element = element.previousSibling)){
if (element.nodeType == 1 && ++count > index) return false;
}
return (count == index);
},
even: function(argument, local){
return Selectors.Pseudo['nth-child'].call(this, '2n+1', local);
},
odd: function(argument, local){
return Selectors.Pseudo['nth-child'].call(this, '2n', local);
}
});
Element.Events.domready = {
onAdd: function(fn){
if (Browser.loaded) fn.call(this);
}
};
(function(){
var domready = function(){
if (Browser.loaded) return;
Browser.loaded = true;
window.fireEvent('domready');
document.fireEvent('domready');
};
if (Browser.Engine.trident){
var temp = document.createElement('div');
(function(){
($try(function(){
temp.doScroll('left');
return $(temp).inject(document.body).set('html', 'temp').dispose();
})) ? domready() : arguments.callee.delay(50);
})();
} else if (Browser.Engine.webkit && Browser.Engine.version < 525){
(function(){
(['loaded', 'complete'].contains(document.readyState)) ? domready() : arguments.callee.delay(50);
})();
} else {
window.addEvent('load', domready);
document.addEvent('DOMContentLoaded', domready);
}
})();
var JSON = new Hash({
$specialChars: {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'},
$replaceChars: function(chr){
return JSON.$specialChars[chr] || '\\u00' + Math.floor(chr.charCodeAt() / 16).toString(16) + (chr.charCodeAt() % 16).toString(16);
},
encode: function(obj){
switch ($type(obj)){
case 'string':
return '"' + obj.replace(/[\x00-\x1f\\"]/g, JSON.$replaceChars) + '"';
case 'array':
return '[' + String(obj.map(JSON.encode).filter($defined)) + ']';
case 'object': case 'hash':
var string = [];
Hash.each(obj, function(value, key){
var json = JSON.encode(value);
if (json) string.push(JSON.encode(key) + ':' + json);
});
return '{' + string + '}';
case 'number': case 'boolean': return String(obj);
case false: return 'null';
}
return null;
},
decode: function(string, secure){
if ($type(string) != 'string' || !string.length) return null;
if (secure && !(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''))) return null;
return eval('(' + string + ')');
}
});
Native.implement([Hash, Array, String, Number], {
toJSON: function(){
return JSON.encode(this);
}
});
var Cookie = new Class({
Implements: Options,
options: {
path: false,
domain: false,
duration: false,
secure: false,
document: document
},
initialize: function(key, options){
this.key = key;
this.setOptions(options);
},
write: function(value){
value = encodeURIComponent(value);
if (this.options.domain) value += '; domain=' + this.options.domain;
if (this.options.path) value += '; path=' + this.options.path;
if (this.options.duration){
var date = new Date();
date.setTime(date.getTime() + this.options.duration * 24 * 60 * 60 * 1000);
value += '; expires=' + date.toGMTString();
}
if (this.options.secure) value += '; secure';
this.options.document.cookie = this.key + '=' + value;
return this;
},
read: function(){
var value = this.options.document.cookie.match('(?:^|;)\\s*' + this.key.escapeRegExp() + '=([^;]*)');
return (value) ? decodeURIComponent(value[1]) : null;
},
dispose: function(){
new Cookie(this.key, $merge(this.options, {duration: -1})).write('');
return this;
}
});
Cookie.write = function(key, value, options){
return new Cookie(key, options).write(value);
};
Cookie.read = function(key){
return new Cookie(key).read();
};
Cookie.dispose = function(key, options){
return new Cookie(key, options).dispose();
};
var Swiff = new Class({
Implements: [Options],
options: {
id: null,
height: 1,
width: 1,
container: null,
properties: {},
params: {
quality: 'high',
allowScriptAccess: 'always',
wMode: 'transparent',
swLiveConnect: true
},
callBacks: {},
vars: {}
},
toElement: function(){
return this.object;
},
initialize: function(path, options){
this.instance = 'Swiff_' + $time();
this.setOptions(options);
options = this.options;
var id = this.id = options.id || this.instance;
var container = $(options.container);
Swiff.CallBacks[this.instance] = {};
var params = options.params, vars = options.vars, callBacks = options.callBacks;
var properties = $extend({height: options.height, width: options.width}, options.properties);
var self = this;
for (var callBack in callBacks){
Swiff.CallBacks[this.instance][callBack] = (function(option){
return function(){
return option.apply(self.object, arguments);
};
})(callBacks[callBack]);
vars[callBack] = 'Swiff.CallBacks.' + this.instance + '.' + callBack;
}
params.flashVars = Hash.toQueryString(vars);
if (Browser.Engine.trident){
properties.classid = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
params.movie = path;
} else {
properties.type = 'application/x-shockwave-flash';
properties.data = path;
}
var build = '<object id="' + id + '"';
for (var property in properties) build += ' ' + property + '="' + properties[property] + '"';
build += '>';
for (var param in params){
if (params[param]) build += '<param name="' + param + '" value="' + params[param] + '" />';
}
build += '</object>';
this.object = ((container) ? container.empty() : new Element('div')).set('html', build).firstChild;
},
replaces: function(element){
element = $(element, true);
element.parentNode.replaceChild(this.toElement(), element);
return this;
},
inject: function(element){
$(element, true).appendChild(this.toElement());
return this;
},
remote: function(){
return Swiff.remote.apply(Swiff, [this.toElement()].extend(arguments));
}
});
Swiff.CallBacks = {};
Swiff.remote = function(obj, fn){
var rs = obj.CallFunction('<invoke name="' + fn + '" returntype="javascript">' + __flash__argumentsToXML(arguments, 2) + '</invoke>');
return eval(rs);
};
var Fx = new Class({
Implements: [Chain, Events, Options],
options: {
fps: 50,
unit: false,
duration: 500,
link: 'ignore'
},
initialize: function(options){
this.subject = this.subject || this;
this.setOptions(options);
this.options.duration = Fx.Durations[this.options.duration] || this.options.duration.toInt();
var wait = this.options.wait;
if (wait === false) this.options.link = 'cancel';
},
getTransition: function(){
return function(p){
return -(Math.cos(Math.PI * p) - 1) / 2;
};
},
step: function(){
var time = $time();
if (time < this.time + this.options.duration){
var delta = this.transition((time - this.time) / this.options.duration);
this.set(this.compute(this.from, this.to, delta));
} else {
this.set(this.compute(this.from, this.to, 1));
this.complete();
}
},
set: function(now){
return now;
},
compute: function(from, to, delta){
return Fx.compute(from, to, delta);
},
check: function(caller){
if (!this.timer) return true;
switch (this.options.link){
case 'cancel': this.cancel(); return true;
case 'chain': this.chain(caller.bind(this, Array.slice(arguments, 1))); return false;
}
return false;
},
start: function(from, to){
if (!this.check(arguments.callee, from, to)) return this;
this.from = from;
this.to = to;
this.time = 0;
this.transition = this.getTransition();
this.startTimer();
this.onStart();
return this;
},
complete: function(){
if (this.stopTimer()) this.onComplete();
return this;
},
cancel: function(){
if (this.stopTimer()) this.onCancel();
return this;
},
onStart: function(){
this.fireEvent('start', this.subject);
},
onComplete: function(){
this.fireEvent('complete', this.subject);
if (!this.callChain()) this.fireEvent('chainComplete', this.subject);
},
onCancel: function(){
this.fireEvent('cancel', this.subject).clearChain();
},
pause: function(){
this.stopTimer();
return this;
},
resume: function(){
this.startTimer();
return this;
},
stopTimer: function(){
if (!this.timer) return false;
this.time = $time() - this.time;
this.timer = $clear(this.timer);
return true;
},
startTimer: function(){
if (this.timer) return false;
this.time = $time() - this.time;
this.timer = this.step.periodical(Math.round(1000 / this.options.fps), this);
return true;
}
});
Fx.compute = function(from, to, delta){
return (to - from) * delta + from;
};
Fx.Durations = {'short': 250, 'normal': 500, 'long': 1000};
Fx.CSS = new Class({
Extends: Fx,
prepare: function(element, property, values){
values = $splat(values);
var values1 = values[1];
if (!$chk(values1)){
values[1] = values[0];
values[0] = element.getStyle(property);
}
var parsed = values.map(this.parse);
return {from: parsed[0], to: parsed[1]};
},
parse: function(value){
value = $lambda(value)();
value = (typeof value == 'string') ? value.split(' ') : $splat(value);
return value.map(function(val){
val = String(val);
var found = false;
Fx.CSS.Parsers.each(function(parser, key){
if (found) return;
var parsed = parser.parse(val);
if ($chk(parsed)) found = {value: parsed, parser: parser};
});
found = found || {value: val, parser: Fx.CSS.Parsers.String};
return found;
});
},
compute: function(from, to, delta){
var computed = [];
(Math.min(from.length, to.length)).times(function(i){
computed.push({value: from[i].parser.compute(from[i].value, to[i].value, delta), parser: from[i].parser});
});
computed.$family = {name: 'fx:css:value'};
return computed;
},
serve: function(value, unit){
if ($type(value) != 'fx:css:value') value = this.parse(value);
var returned = [];
value.each(function(bit){
returned = returned.concat(bit.parser.serve(bit.value, unit));
});
return returned;
},
render: function(element, property, value, unit){
element.setStyle(property, this.serve(value, unit));
},
search: function(selector){
if (Fx.CSS.Cache[selector]) return Fx.CSS.Cache[selector];
var to = {};
Array.each(document.styleSheets, function(sheet, j){
var href = sheet.href;
if (href && href.contains('://') && !href.contains(document.domain)) return;
var rules = sheet.rules || sheet.cssRules;
Array.each(rules, function(rule, i){
if (!rule.style) return;
var selectorText = (rule.selectorText) ? rule.selectorText.replace(/^\w+/, function(m){
return m.toLowerCase();
}) : null;
if (!selectorText || !selectorText.test('^' + selector + '$')) return;
Element.Styles.each(function(value, style){
if (!rule.style[style] || Element.ShortStyles[style]) return;
value = String(rule.style[style]);
to[style] = (value.test(/^rgb/)) ? value.rgbToHex() : value;
});
});
});
return Fx.CSS.Cache[selector] = to;
}
});
Fx.CSS.Cache = {};
Fx.CSS.Parsers = new Hash({
Color: {
parse: function(value){
if (value.match(/^#[0-9a-f]{3,6}$/i)) return value.hexToRgb(true);
return ((value = value.match(/(\d+),\s*(\d+),\s*(\d+)/))) ? [value[1], value[2], value[3]] : false;
},
compute: function(from, to, delta){
return from.map(function(value, i){
return Math.round(Fx.compute(from[i], to[i], delta));
});
},
serve: function(value){
return value.map(Number);
}
},
Number: {
parse: parseFloat,
compute: Fx.compute,
serve: function(value, unit){
return (unit) ? value + unit : value;
}
},
String: {
parse: $lambda(false),
compute: $arguments(1),
serve: $arguments(0)
}
});
Fx.Tween = new Class({
Extends: Fx.CSS,
initialize: function(element, options){
this.element = this.subject = $(element);
this.parent(options);
},
set: function(property, now){
if (arguments.length == 1){
now = property;
property = this.property || this.options.property;
}
this.render(this.element, property, now, this.options.unit);
return this;
},
start: function(property, from, to){
if (!this.check(arguments.callee, property, from, to)) return this;
var args = Array.flatten(arguments);
this.property = this.options.property || args.shift();
var parsed = this.prepare(this.element, this.property, args);
return this.parent(parsed.from, parsed.to);
}
});
Element.Properties.tween = {
set: function(options){
var tween = this.retrieve('tween');
if (tween) tween.cancel();
return this.eliminate('tween').store('tween:options', $extend({link: 'cancel'}, options));
},
get: function(options){
if (options || !this.retrieve('tween')){
if (options || !this.retrieve('tween:options')) this.set('tween', options);
this.store('tween', new Fx.Tween(this, this.retrieve('tween:options')));
}
return this.retrieve('tween');
}
};
Element.implement({
tween: function(property, from, to){
this.get('tween').start(arguments);
return this;
},
fade: function(how){
var fade = this.get('tween'), o = 'opacity', toggle;
how = $pick(how, 'toggle');
switch (how){
case 'in': fade.start(o, 1); break;
case 'out': fade.start(o, 0); break;
case 'show': fade.set(o, 1); break;
case 'hide': fade.set(o, 0); break;
case 'toggle':
var flag = this.retrieve('fade:flag', this.get('opacity') == 1);
fade.start(o, (flag) ? 0 : 1);
this.store('fade:flag', !flag);
toggle = true;
break;
default: fade.start(o, arguments);
}
if (!toggle) this.eliminate('fade:flag');
return this;
},
highlight: function(start, end){
if (!end){
end = this.retrieve('highlight:original', this.getStyle('background-color'));
end = (end == 'transparent') ? '#fff' : end;
}
var tween = this.get('tween');
tween.start('background-color', start || '#ffff88', end).chain(function(){
this.setStyle('background-color', this.retrieve('highlight:original'));
tween.callChain();
}.bind(this));
return this;
}
});
Fx.Morph = new Class({
Extends: Fx.CSS,
initialize: function(element, options){
this.element = this.subject = $(element);
this.parent(options);
},
set: function(now){
if (typeof now == 'string') now = this.search(now);
for (var p in now) this.render(this.element, p, now[p], this.options.unit);
return this;
},
compute: function(from, to, delta){
var now = {};
for (var p in from) now[p] = this.parent(from[p], to[p], delta);
return now;
},
start: function(properties){
if (!this.check(arguments.callee, properties)) return this;
if (typeof properties == 'string') properties = this.search(properties);
var from = {}, to = {};
for (var p in properties){
var parsed = this.prepare(this.element, p, properties[p]);
from[p] = parsed.from;
to[p] = parsed.to;
}
return this.parent(from, to);
}
});
Element.Properties.morph = {
set: function(options){
var morph = this.retrieve('morph');
if (morph) morph.cancel();
return this.eliminate('morph').store('morph:options', $extend({link: 'cancel'}, options));
},
get: function(options){
if (options || !this.retrieve('morph')){
if (options || !this.retrieve('morph:options')) this.set('morph', options);
this.store('morph', new Fx.Morph(this, this.retrieve('morph:options')));
}
return this.retrieve('morph');
}
};
Element.implement({
morph: function(props){
this.get('morph').start(props);
return this;
}
});
Fx.implement({
getTransition: function(){
var trans = this.options.transition || Fx.Transitions.Sine.easeInOut;
if (typeof trans == 'string'){
var data = trans.split(':');
trans = Fx.Transitions;
trans = trans[data[0]] || trans[data[0].capitalize()];
if (data[1]) trans = trans['ease' + data[1].capitalize() + (data[2] ? data[2].capitalize() : '')];
}
return trans;
}
});
Fx.Transition = function(transition, params){
params = $splat(params);
return $extend(transition, {
easeIn: function(pos){
return transition(pos, params);
},
easeOut: function(pos){
return 1 - transition(1 - pos, params);
},
easeInOut: function(pos){
return (pos <= 0.5) ? transition(2 * pos, params) / 2 : (2 - transition(2 * (1 - pos), params)) / 2;
}
});
};
Fx.Transitions = new Hash({
linear: $arguments(0)
});
Fx.Transitions.extend = function(transitions){
for (var transition in transitions) Fx.Transitions[transition] = new Fx.Transition(transitions[transition]);
};
Fx.Transitions.extend({
Pow: function(p, x){
return Math.pow(p, x[0] || 6);
},
Expo: function(p){
return Math.pow(2, 8 * (p - 1));
},
Circ: function(p){
return 1 - Math.sin(Math.acos(p));
},
Sine: function(p){
return 1 - Math.sin((1 - p) * Math.PI / 2);
},
Back: function(p, x){
x = x[0] || 1.618;
return Math.pow(p, 2) * ((x + 1) * p - x);
},
Bounce: function(p){
var value;
for (var a = 0, b = 1; 1; a += b, b /= 2){
if (p >= (7 - 4 * a) / 11){
value = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2);
break;
}
}
return value;
},
Elastic: function(p, x){
return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x[0] || 1) / 3);
}
});
['Quad', 'Cubic', 'Quart', 'Quint'].each(function(transition, i){
Fx.Transitions[transition] = new Fx.Transition(function(p){
return Math.pow(p, [i + 2]);
});
});
var Request = new Class({
Implements: [Chain, Events, Options],
options: {/*
onRequest: $empty,
onComplete: $empty,
onCancel: $empty,
onSuccess: $empty,
onFailure: $empty,
onException: $empty,*/
url: '',
data: '',
headers: {
'X-Requested-With': 'XMLHttpRequest',
'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
},
async: true,
format: false,
method: 'post',
link: 'ignore',
isSuccess: null,
emulation: true,
urlEncoded: true,
encoding: 'utf-8',
evalScripts: false,
evalResponse: false
},
initialize: function(options){
this.xhr = new Browser.Request();
this.setOptions(options);
this.options.isSuccess = this.options.isSuccess || this.isSuccess;
this.headers = new Hash(this.options.headers);
},
onStateChange: function(){
if (this.xhr.readyState != 4 || !this.running) return;
this.running = false;
this.status = 0;
$try(function(){
this.status = this.xhr.status;
}.bind(this));
if (this.options.isSuccess.call(this, this.status)){
this.response = {text: this.xhr.responseText, xml: this.xhr.responseXML};
this.success(this.response.text, this.response.xml);
} else {
this.response = {text: null, xml: null};
this.failure();
}
this.xhr.onreadystatechange = $empty;
},
isSuccess: function(){
return ((this.status >= 200) && (this.status < 300));
},
processScripts: function(text){
if (this.options.evalResponse || (/(ecma|java)script/).test(this.getHeader('Content-type'))) return $exec(text);
return text.stripScripts(this.options.evalScripts);
},
success: function(text, xml){
this.onSuccess(this.processScripts(text), xml);
},
onSuccess: function(){
this.fireEvent('complete', arguments).fireEvent('success', arguments).callChain();
},
failure: function(){
this.onFailure();
},
onFailure: function(){
this.fireEvent('complete').fireEvent('failure', this.xhr);
},
setHeader: function(name, value){
this.headers.set(name, value);
return this;
},
getHeader: function(name){
return $try(function(){
return this.xhr.getResponseHeader(name);
}.bind(this));
},
check: function(caller){
if (!this.running) return true;
switch (this.options.link){
case 'cancel': this.cancel(); return true;
case 'chain': this.chain(caller.bind(this, Array.slice(arguments, 1))); return false;
}
return false;
},
send: function(options){
if (!this.check(arguments.callee, options)) return this;
this.running = true;
var type = $type(options);
if (type == 'string' || type == 'element') options = {data: options};
var old = this.options;
options = $extend({data: old.data, url: old.url, method: old.method}, options);
var data = options.data, url = options.url, method = options.method;
switch ($type(data)){
case 'element': data = $(data).toQueryString(); break;
case 'object': case 'hash': data = Hash.toQueryString(data);
}
if (this.options.format){
var format = 'format=' + this.options.format;
data = (data) ? format + '&' + data : format;
}
if (this.options.emulation && ['put', 'delete'].contains(method)){
var _method = '_method=' + method;
data = (data) ? _method + '&' + data : _method;
method = 'post';
}
if (this.options.urlEncoded && method == 'post'){
var encoding = (this.options.encoding) ? '; charset=' + this.options.encoding : '';
this.headers.set('Content-type', 'application/x-www-form-urlencoded' + encoding);
}
if (data && method == 'get'){
url = url + (url.contains('?') ? '&' : '?') + data;
data = null;
}
this.xhr.open(method.toUpperCase(), url, this.options.async);
this.xhr.onreadystatechange = this.onStateChange.bind(this);
this.headers.each(function(value, key){
try {
this.xhr.setRequestHeader(key, value);
} catch (e){
this.fireEvent('exception', [key, value]);
}
}, this);
this.fireEvent('request');
this.xhr.send(data);
if (!this.options.async) this.onStateChange();
return this;
},
cancel: function(){
if (!this.running) return this;
this.running = false;
this.xhr.abort();
this.xhr.onreadystatechange = $empty;
this.xhr = new Browser.Request();
this.fireEvent('cancel');
return this;
}
});
(function(){
var methods = {};
['get', 'post', 'put', 'delete', 'GET', 'POST', 'PUT', 'DELETE'].each(function(method){
methods[method] = function(){
var params = Array.link(arguments, {url: String.type, data: $defined});
return this.send($extend(params, {method: method.toLowerCase()}));
};
});
Request.implement(methods);
})();
Element.Properties.send = {
set: function(options){
var send = this.retrieve('send');
if (send) send.cancel();
return this.eliminate('send').store('send:options', $extend({
data: this, link: 'cancel', method: this.get('method') || 'post', url: this.get('action')
}, options));
},
get: function(options){
if (options || !this.retrieve('send')){
if (options || !this.retrieve('send:options')) this.set('send', options);
this.store('send', new Request(this.retrieve('send:options')));
}
return this.retrieve('send');
}
};
Element.implement({
send: function(url){
var sender = this.get('send');
sender.send({data: this, url: url || sender.options.url});
return this;
}
});
Request.HTML = new Class({
Extends: Request,
options: {
update: false,
evalScripts: true,
filter: false
},
processHTML: function(text){
var match = text.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
text = (match) ? match[1] : text;
var container = new Element('div');
return $try(function(){
var root = '<root>' + text + '</root>', doc;
if (Browser.Engine.trident){
doc = new ActiveXObject('Microsoft.XMLDOM');
doc.async = false;
doc.loadXML(root);
} else {
doc = new DOMParser().parseFromString(root, 'text/xml');
}
root = doc.getElementsByTagName('root')[0];
for (var i = 0, k = root.childNodes.length; i < k; i++){
var child = Element.clone(root.childNodes[i], true, true);
if (child) container.grab(child);
}
return container;
}) || container.set('html', text);
},
success: function(text){
var options = this.options, response = this.response;
response.html = text.stripScripts(function(script){
response.javascript = script;
});
var temp = this.processHTML(response.html);
response.tree = temp.childNodes;
response.elements = temp.getElements('*');
if (options.filter) response.tree = response.elements.filter(options.filter);
if (options.update) $(options.update).empty().set('html', response.html);
if (options.evalScripts) $exec(response.javascript);
this.onSuccess(response.tree, response.elements, response.html, response.javascript);
}
});
Element.Properties.load = {
set: function(options){
var load = this.retrieve('load');
if (load) load.cancel();
return this.eliminate('load').store('load:options', $extend({data: this, link: 'cancel', update: this, method: 'get'}, options));
},
get: function(options){
if (options || ! this.retrieve('load')){
if (options || !this.retrieve('load:options')) this.set('load', options);
this.store('load', new Request.HTML(this.retrieve('load:options')));
}
return this.retrieve('load');
}
};
Element.implement({
load: function(){
this.get('load').send(Array.link(arguments, {data: Object.type, url: String.type}));
return this;
}
});
Request.JSON = new Class({
Extends: Request,
options: {
secure: true
},
initialize: function(options){
this.parent(options);
this.headers.extend({'Accept': 'application/json', 'X-Request': 'JSON'});
},
success: function(text){
this.response.json = JSON.decode(text, this.options.secure);
this.onSuccess(this.response.json, text);
}
});
