// Version 1.5

/**************************ENLARGEIT begin ***************************************************/
/*  This comment MUST stay intact for legal use, so don't remove it. EnlargeIt! 
v1.1 - (c) 2008 Timo Sack - http://enlargeit.timos-welt.de This program is free 
software: you can redistribute it and/or modify it under the terms of the GNU 
General Public License as published by the Free Software Foundation, either 
version 3 of the License, or (at your option) any later version. See LICENSE.TXT 
for details. */

// modify these
var enl_gifpath='http://www.klinikum.uni-muenchen.de/bilder/layout/enlargeit/'; // path to graphics
var enl_brdsize=12;    // border thickness (5-30)
var enl_brdcolor='';   // border color (white if empty)
var enl_brdbck='';     // border background pic, '' for no pic
var enl_brdround=1;    // use rounded borders (Mozilla/Safari only)
var enl_maxstep=18;    // ani steps (10-30)
var enl_speed=12;      // time between steps
var enl_ani=5;         // 0=no,1=fade,2=glide,3=bumpglide,4=smoothglide,5=expglide
var enl_opaglide=0;    // glide transparency
var enl_shadow=1;      // shadow under border
var enl_shadowsize=1;  // size of shadow right/bottom (0-20)
var enl_shadowcolor='';// shadow color (empty: black)
var enl_shadowintens=9;// shadow intensity (5-30)
var enl_dark=1;        // darken screen (0=off/1=on/2=keep dark when nav)
var enl_darkprct=20;   // how dark the screen should be (0-100)
var enl_darksteps=9;   // how long darkening should take
var enl_center=1;      // center enlarged pic on screen
var enl_drgdrop=1;     // enable drag&drop for pics
var enl_preload=1;     // preload next/prev pic
var enl_titlebar=1;    // show pic title bar
var enl_keynav=1;      // key navigation
var enl_wheelnav=1;    // mouse wheel navigation
var enl_titletxtcol='';// color of title bar text (empty: dark grey)
var enl_ajaxcolor='';  // background color for AJAX (empty: light grey)
var enl_usecounter=0;  // hidden call of counter page
var enl_counterurl=''; // base URL of counter page
var enl_btnact='bact.png';               // active buttons
var enl_btninact='binact.png';           // inactive buttons
var enl_pluscur='pluscur_new.cur';           // mouse cursor of thumbnail
var enl_minuscur='minuscur_new.cur';         // mouse cursor of enlarged image
var enl_noflash='No flash plugin found!';// msg if no flash plugin found
var enl_canceltext='Click to cancel';    // tooltip to cancel loading

// don't modify next line
var enl_buttonurl = new Array(),enl_buttontxt = new Array(),enl_buttonoff = new Array();

// define your buttons here
enl_ani = 0;
enl_brdsize = 25;
enl_shadow = 1;
enl_shadowintens = 20;
enl_shadowsize = 1;
enl_dark = 2;
enl_darkprct = 50;
enl_drgdrop = 0;
enl_darksteps = 1;
enl_brdbck = '';
enl_buttonurl[0] = 'prev';
enl_buttontxt[0] = 'Previous picture [left arrow key]';
enl_buttonoff[0] = -144;
enl_buttonurl[1] = 'next';
enl_buttontxt[1] = 'Next picture [right arrow key]';
enl_buttonoff[1] = -162;
enl_buttonurl[2] = 'close';
enl_buttontxt[2] = 'Close [Esc key]';
enl_buttonoff[2] = -108;

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}('i 1A=1z 69(),S=1z 69(),3r=0;i 2W,4M,Q,1p=0,2R=0;i 28=j.5G&&!j.8C;3q=u;i C,2D=0,1h=s.2z,3d=u;i 16,18,2x,2s,1t=\'\';i 2K=0,1P=0,1f=8A,35=0,3j=0;i 1H=u,2C=u,2S=0,4O;b 4F(){8(!2K){2K=1;8(q 4C==\'y\')47=0;8(q 2B==\'y\')38=0;8(q 2P==\'y\')2a=0;8(q 3o==\'y\')26=0;8(q 3N==\'y\')48=0;8(q 4X==\'y\')7o=0;8(q 4S==\'y\')M=0;f 8(1l.24)M=1;8(q 4a==\'y\'&&1C==1)1C=2;8(q 3V==\'y\'&&1C>1)1C=0;i c=0;8(q 2B!=\'y\')5y();8(M){2G(13+7r);2W=1A[1p];2G(13+5p);4M=1A[1p]}8(2n)2G(13+2n);4O=1A[1p];12=1R(\'12\');12.d.1D=6W;1m=1z 5Y();1m.1g=13+\'8M.8I\';1m.d.7e=\'7h\';1m.d.8e=\'7f\';1m.d.8a=\'54\';1m.g=\'1m\';12.1N(1m);1n=1R(\'5O\');1n.K=\'86\';1n.d.57=(6K)?6K:\'#9i\';8(2n)1n.d.3T=\'34(\'+13+2n+\')\';8(6b&&!2n){1n.d.67=n+\'D\';1n.d.6s=n+\'D\'}8(26){2T=1R(\'5N\');2T.d.57=(65)?65:\'54\';1r(2T,97);8(6b&&!2n){2T.d.67=2g(n+1)+\'D\';2T.d.6s=2g(n+1)+\'D\'}}8(2a)6a();8(7o){j.7H=4X;j.7O=1y}1U=j.3n(\'6A\');8(q j.H.d.7V==\'y\')3j=1;i 4j;2F(i c=0;c<1U.24;c++){8(q 1U[c].15==\'b\'){4j=2g(1U[c].15).7C();8(4j.6D(/2O/)!=-1){1U[c].3w=\'\';8(1h)1U[c].7y=\'3J\';8(!1U[c].g)1U[c].g=\'9E\'+c;21(1U[c],5P,\'36\',\'31\')}}}2K=2;6q=(1h)?82:Y;8(q 6g!=\'y\')o(\'3Z("\'+6g+\'")\',6q)}}b 3Z(5Z){7=e(5Z);2O(7)}b z(k,6m,5B,5g,5A){k.d.F=6m+\'D\';k.d.N=5B+\'D\';8(5g){k.d.w=5g+\'D\';k.d.B=5A+\'D\'}}b 1r(k,3A){k.d.5x=3A/Y;k.d.7D=3A/Y;k.d.4A="7E(5x="+3A+")"}b e(9){r j.5G(9)}b 2G(3p){1p+=1;1A[1p]=1z 5Y();8(3p.1T(3,5)!=\'::\')1A[1p].1g=3p;f 8(!1h)1A[1p].1g=3p.l(\'::\')[1]}b 1a(k){k.d.3E=\'7t\'}b 1d(k){k.d.3E=\'2I\'}b 1R(5T){2k=j.3i("2m");1d(2k);2k.g=5T;2k.d.2E=\'3b\';z(2k,-1Y,0,0,0);j.H.1N(2k);r 2k}b 5q(){8(q s.5U!=\'y\'){16=s.5U-10;18=s.3L}f 8(q j.2h!=\'y\'&&q j.2h.3K!=\'y\'&&j.2h.3K!=0){16=j.2h.3K;18=j.2h.7d}f{16=j.3n(\'H\')[0].3K;18=j.3n(\'H\')[0].7d}2s=s.7L||j.2h.7j||j.H.7j||0;2x=s.7G||j.2h.6I||j.H.6I||0}b 2p(c){8(q 6B!=\'y\')7Y=(c?6B:0)}b 2J(A){i 1S={N:0,F:0,w:0,B:0};8(!A)r 1S;f 8(q A==\'7w\')A=e(A);8(q A!=\'29\')r 1S;8(q A.78!=\'y\'){1S.B=A.58;1S.w=A.6H;1S.F=A.N=0;4Q(A&&A.6v!=\'6l\'){1S.N+=19(A.78);1S.F+=19(A.7A);A=A.7x}}r 1S}b 21(k,4e,4g,6J){8(s.7B||(!4e&&!3j)){1o{k.d.4m=4g}1k(1s){}}f 8(3j){1o{k.d.4m=6J}1k(1s){}}f{1o{k.d.4m=\'34(\'+13+4e+\'),\'+4g}1k(1s){}}}b 3e(9){1t=9;7=e(9);m=e(7.U);21(m,\'\',\'4t\',\'4t\');8(47){7.6T=4C;7.6Z=5w}f 8(7.2v||!M)7.15=b(){1Z(9)};8(!35&&38)o(\'5D("\'+m.g+\'")\',40);8(47)21(7,72,\'6R\',\'6R\');f 21(7,72,\'36\',\'31\');1P=0;2p(1);8(7T){2F(i c=0;c<2;c++){51=3g(9,c);8(51){6O=51.V(\'1O\');o(\'2G("\'+6O+\'")\',30)}}}}b 2Y(k){k.6T=1y;k.15=1y;k.6Z=1y}b 6d(4h){i 4d=s.3G;8(q s.3G!=\'y\'){s.3G=4h}f{s.3G=b(){8(4d){4d()}4h()}}}b 3H(k){12=e(\'12\');1b=2J(k);z(12,1b.F+1b.w/2-17,1b.N+1b.B/2-17);1a(12)}b 2A(){12=e(\'12\');1d(12);z(12,-1Y,0)}b 3g(9,43){1X=e(e(9).U);8(1X.1W){i 1B=j.H.3n(\'6A\');i 1e=0;8(!43){2F(i c=0;c<1B.24;c++){8((1e==1)&&(1B[c].1W==1X.1W)&&!1B[c].U){1e=2;3F=1B[c]}8(1X==1B[c])1e=1}}f{2F(i c=1B.24;c>=0;c--){8((1e==1)&&(1B[c].1W==1X.1W)&&!1B[c].U){1e=2;3F=1B[c]}8(1X==1B[c])1e=1}}8(1e==2&&!3F.2H&&1X.1W!=\'6k\'&&1X.1W!=\'7P\')r 3F;f r 1y}}b 3c(9){7=e(9);1M=e(9+"1u");8(48)4c(1M);8(M&&n<Q+4){11=7.E+n+Q+4;R=7.W-n-(Q+4)+n}f{11=7.E+n*2;R=7.W-n}z(1M,7.X-n,R);3I(1M.d){w=2g(7.I+n*2)+\'D\';B=11+\'D\';3E=\'7t\';1D=1f-1}8(26)3o(9);8(q 2j!=\'y\')2j(1M,0)}b 6j(9){1n=e(9+"1u");8(q 2j!=\'y\')2j(1M,1);1d(1n);z(1n,-1Y,0);8(26)4B(9)}b 2O(7){8(!2K)4F();8(2K==1||7.2H)r u;8(1P){o(\'3Z("\'+7.g+\'")\',99);r u}8(2n&&!4O.3Q)r u;8(M&&(!2W.3Q||!4M.3Q))r u;i h=7.V(\'1O\');8(h.1T(3,5)==\'::\'&&q 2t==\'y\')r u;1P=1;7.2H=1;2p(0);2G(h);9=7.V(\'g\');35=0;o(\'4W("\'+9+\'")\',10)}b 4W(9){7=e(9);12=e("12");i h=7.V(\'1O\');i 1c=h.1T(0,5);8(3r){e(\'1m\').15=1y;e(\'1m\').3w="";2S=0;8(2a)3S();2A();1P=0;7.2H=0;2p(1);3r=0;r u}i 2V=1A[1p].3Q;8((2V&&1A[1p].w)||(2V&&1c==\'1w::\')||(2V&&1c==\'4N::\')||(2V&&1c==\'3O::\')||1c==\'77::\'||1c==\'7i::\'||(1h&&(1c==\'1w::\'))||(1h&&(1c==\'4N::\'))||(1h&&(1c==\'3O::\'))){1f+=3;2A();8(1c==\'1w::\'||1c==\'4N::\'||1c==\'3O::\'){8(2t())v=5W(7,h);f{7I(7N);1P=0;7.2H=0;2p(1);r u}}f 8(1c==\'77::\')v=5I(7,h);f 8(1c==\'7i::\')v=5K(7,h);f{v=7.3P(P);z(v,-1Y,0);3I(v){g=7.g+"3u";d.3E=\'2I\';d.2E=\'3b\';d.7e=\'1Q\';d.7R=\'1Q\';d.2c=\'1Q\';d.7g=\'1Q\'}j.H.1N(v)}v.U=7.g;4z=e("5O");1M=4z.3P(P);1M.g=9+"7K";1M.d.1D=1f-1;8(26){4T=e("5N");4w=4T.3P(P);4w.g=v.g+"44";2r=4T.3P(P);2r.g=v.g+"3X";j.H.1N(4w);j.H.1N(2r)}j.H.1N(1M);1o{7.3C()}1k(1s){}v.2v=(h.1T(3,5)!=\'::\')?1:0;o(\'5C("\'+v.g+\'")\',50)}f{3H(7);e(\'1m\').15=b(){3r=1};e(\'1m\').3w=7F;1a(12);1o{7.3C()}1k(1s){}o(\'4W("\'+9+\'")\',50)}}b 5C(9){1f+=3;5q();8(q 2W!=\'y\')Q=19(2W.B);j.7Z=b(){r u};7=e(9);8(48)4c(7);m=e(7.U);1o{m.3C()}1k(1s){}2Y(7);2Y(m);2i=m.V(\'1O\');1b=2J(m);7.d.1D=1f;7.2u=1b.N;7.1x=1b.F;8(q 6i==\'81\'&&e(7.U).1W=="6k")7.2q=19(1b.B/(1+6i));f 7.2q=1b.B;7.1L=1b.w;8(7.1L+7.1x>16-20)7.1x=16-7.1L-20;8(7.2v){7.I=19(1A[1p].w);7.E=19(1A[1p].B)}f{7.I=2g(2i.l(\'::\')[2]);7.E=2g(2i.l(\'::\')[3])}8(7.I>16-Y){7.E=t.L(7.E*(16-Y)/7.I);7.I=16-Y}8(7.E>18-80){7.I=t.L(7.I*(18-80)/7.E);7.E=18-80}7.X=t.L(7.1x-(7.I-7.1L)/2);7.W=t.L(7.2u-(7.E-7.2q)/2);8(!7Q){8(7.X<(50+2x))7.X=50+2x;8(7.W<(40+2s))7.W=40+2s;8(7.X+7.I>16+2x-50)7.X=16+2x-50-7.I;8(7.W+7.E>18+2s-40)7.W=18+2s-40-7.E}f{7.X=t.L(16/2+2x-7.I/2);7.W=t.L(18/2+2s-7.E/2)}7.G=1;7.7U=7.1g;8(M)4S(9);8(!1C||!7.2v)6e(9);f 8(1C==1)o(\'4a("\'+9+\'")\',50);f o(\'3V("\'+9+\'")\',50)}b 6e(9){7=e(9);z(7,7.X,7.W,7.I,7.E);7.1g=2i;7.d.2E=\'3b\';1a(7);3c(9);8(M)2M(9);3e(9);8(2a)2P()}b 3W(9){7=e(9);m=e(7.U);i 41=e(m.g+\'3l\');i h=m.V(\'1O\');8((h.1T(0,5)!=\'1w::\')&&1h){2F(i c 7z 41){8(q 41[c]=="b")41[c]=1y}}8(M)j.H.2Q(e(9+"3a"));j.H.2Q(e(9+"1u"));8(26){j.H.2Q(e(9+"44"));j.H.2Q(e(9+"3X"))}m.2H=0;m.15=b(){2O(2L)};21(m,5P,\'36\',\'31\');j.H.2Q(7);2p(1);1P=0;8(35==1)2O(m)}b 6f(9){1d(e(9));o(\'3W("\'+9+\'")\',10)}b 1Z(9){8(1P){o(\'1Z("\'+9+\'")\',50);r u}1P=1;1t=\'\';2p(0);7=e(9);21(7,\'\',\'36\',\'31\');2Y(7);m=e(7.U);2i=m.V(\'1O\');1a(7);6j(9);8(M)6E(9);8(2a)3S();2S=0;1b=2J(e(7.U));7.2u=1b.N;7.1x=1b.F;8(7.1L+7.1x>16-20)7.1x=16-7.1L-20;8(!1C||!7.2v)6f(9);f 8(1C==1)o(\'4x("\'+9+\'")\',20);f o(\'4D("\'+9+\'")\',20)}6d(4F);b 3o(9){7=e(9);42=e(9+"44");2r=e(9+"3X");1E=7.I+4H+n*2+2;8(M&&n<Q+4){11=7.E+4H+n*2+6+Q-n;R=7.W-n-1-(Q+4)+n}f{11=7.E+4H+n*2+2;R=7.W-n-1}z(42,7.X-n-1,R,1E,11);42.d.1D=1f-2;1a(42);z(2r,7.X-n-2,R-1,1E+2,11+2);2r.d.1D=1f-2;1a(2r)}b 4B(9){4J=e(9+"44");4E=e(9+"3X");1d(4J);z(4J,-1Y,0);1d(4E);z(4E,-1Y,0)}b 4y(2U){i T;8(1C==3)T=((-1*t.9d(2U-0.2))+0.98)*3.5;f 8(1C==4)T=(t.9c(1.5*t.68+2U*t.68)+1)/2;f 8(1C==5)T=t.61(2U,t.61(2,2));f T=2U;r T}b 4D(9){7=e(9);2D=0;7.G++;8(7.G>=1j){1a(e(7.U));1d(7);7.G=1;o(\'3W("\'+9+\'")\',50)}f{i T=4y((1j-7.G)/1j);1E=t.L(T*(7.I-7.1L)+7.1L);11=t.L(T*(7.E-7.2q)+7.2q);R=t.L(7.2u+(7.W-7.2u)*T);1K=t.L(7.1x+(7.X-7.1x)*T);8(1E<0)1E=0;8(11<0)11=0;z(7,1K,R,1E,11);8(3f)1r(7,t.L((1j-7.G)/1j*Y));o(\'4D("\'+9+\'")\',2b)}}b 3V(9){7=e(9);7.G++;8(7.G>=1j){z(7,7.X,7.W,7.I,7.E);7.G=1;8(3f){1r(7,Y);7.d.4A=\'\'}o(\'3c("\'+9+\'")\',2b);8(2a)o(\'2P()\',2b*4);o(\'3e("\'+9+\'")\',2b*3);8(M)o(\'2M("\'+9+\'")\',2b*2)}f{8(7.G==2){7.1g=2i;7.d.2E=\'3b\';8(3f)1r(7,0);1a(7);8(!3f)1d(e(7.U))}i T=4y(7.G/1j);1E=t.L(T*(7.I-7.1L)+7.1L);11=t.L(T*(7.E-7.2q)+7.2q);R=t.L(7.2u+(7.W-7.2u)*T);1K=t.L(7.1x+(7.X-7.1x)*T);8(1E<0)1E=0;8(11<0)11=0;z(7,1K,R,1E,11);8(3f)1r(7,t.L(7.G/1j*Y));o(\'3V("\'+9+\'")\',2b)}}b 4x(9){7=e(9);2D=0;7.G++;8(7.G>=1j){7.G=1;1d(7);o(\'3W("\'+9+\'")\',50)}f{1r(7,(1-7.G/1j)*Y);o(\'4x("\'+9+\'")\',2b)}}b 4a(9){4z=e(9+"1u");7=e(9);7.G++;8(7.G==2){z(7,7.X,7.W,7.I,7.E);1r(7,0);7.1g=2i;7.d.2E=\'3b\';1a(7)}8(7.G>=1j){1r(7,Y);7.d.4A=\'\';7.G=1;3c(9);8(M)2M(9);o(\'3e("\'+9+\'")\',30);8(2a)o(\'2P()\',Y)}f{1r(7,7.G/1j*Y);o(\'4a("\'+9+\'")\',2b)}}b 5z(A){8(3q&&47){1K=28?4K+A.49-4V:4K+2w.49-4V;R=28?4L+A.3R-4U:4L+2w.3R-4U;z(C,1K,R);8(M&&n<Q+4)z(e(C.g+"1u"),1K-n,R-(Q+4));f z(e(C.g+"1u"),1K-n,R-n);8(M)2M(C.g);2D++;8(2D>3)3d=P;r u}}b 4C(A){C=28?A.95:2w.8Y;i 5S=28?"8X":"6l";3d=u;4Q(C.6v!=5S&&!C.E){C=28?C.8W:C.8U}3q=P;1f+=3;i 1G=C.g;8(M)e(1G+\'3a\').d.1D=1f+1;C.d.1D=1f;8(26)4B(1G);e(1G+"1u").d.1D=1f-1;4K=19(C.d.F+0);4L=19(C.d.N+0);4V=28?A.49:2w.49;4U=28?A.3R:2w.3R;2D=0;C.94=5z;r u}b 5w(){2Y(C);C.W=19(C.d.N);C.X=19(C.d.F);i 1G=C.g;8(26)3o(1G);3q=u;8(3d==P||!C.2v){8(q 2j!=\'y\')2j(0,1);3c(1G);8(M)2M(1G);3d=u;o(\'3e("\'+1G+\'")\',Y)}f o(\'1Z("\'+1G+\'")\',10)}b 6z(5Q,6w){2Z=j.3i("a");2Z.g=5Q;21(2Z,\'\',\'36\',\'31\');3I(2Z.d){B=Q+\'D\';w=Q+\'D\';9l=\'9C\';3T=\'34(\'+13+5p+\')\';9B=\'3J-9A\';9z=6w+\'D 1Q\';9D=\'83\';75=\'F\';74=\'F\'}r 2Z}b 4S(9){7=e(9);m=e(7.U);1q=1R(9+\'3a\');1q.d.7g=\'9I\';32=19(7.I)-1l.24*(Q+3);8(32>Y&&m.73!=\'\'){33=j.3i(\'2m\');3I(33.d){2E=\'9H\';75=\'F\';74=\'F\';9G=\'5X\';9F=\'1Q\';9y=\'9x,9q,9p-9o\';9m=\'9n\';5f=(7n)?7n:\'#9r\';9s=\'9w\';9v=\'9u\'}2l=m.73;8(!2l)2l=\'\';8(2l.24>t.L(32*0.6F))2l=2l.9t(0,t.L(32*0.6F)-2)+\'...\';33.2o=2l;33.d.w=32+\'D\';1q.1N(33)}i c=0;4Q(c<1l.24){8(1l[c]==\'6x\'&&3g(9,0)==1y){c++;3z}f 8(1l[c]==\'6M\'&&3g(9,1)==1y){c++;3z}f 8(((1l[c]==\'6V\')||(1l[c]==\'6X\'))&&(m.V(\'1O\').6D(/4p.+/)==-1)){c++;3z}f 8(!v.2v&&(1l[c]==\'8T.4v?7a=-\'||1l[c]==\'8S.4v?5c=\')){c++;3z}S[c]=6z(9+c,8l[c]);S[c].3w=8k[c];S[c].53=9;S[c].55=1l[c];8(1l[c].1T(0,5)==\'8j:\')S[c].15=b(){7c(2L)};f{7k(1l[c]){1V\'8h\':S[c].15=b(){1Z(9);r u};1I;1V\'6V\':S[c].15=b(){6G(9)};1I;1V\'6X\':i 4s=\'8i.4v?5c=\'+m.K;S[c].15=b(){s.5k(4s+\'&6U=1\',\'8m\',\'8n=6S,8r=3J,8q=3J,8p=6S,w=8o,B=8g\');2L.3C;r u};S[c].8f=4s+\'&88;6U=1\';1I;1V\'87\':S[c].15=b(){76(9)};1I;1V\'6M\':S[c].15=b(){2e(9,1)};1I;1V\'6x\':S[c].15=b(){2e(9,0)};1I;4t:8(q 2B!=\'y\')S[c].15=b(){6P(2L)};1I}}S[c].84=b(){79(2L)};S[c].85=b(){7q(2L)};1q.1N(S[c]);c++}7.7l=1q.6H}b 6G(9){7=e(9);m=e(7.U);m.7m(\'1O\',m.V(\'1O\').4Y(/4p/,\'\'));m.7m(\'89\',m.V(\'1O\').4Y(/4p/,\'\'));35=1;o(\'1Z("\'+9+\'")\',10)}b 2e(9,43){8(1t!=\'\'){4i=3g(9,43);8(4i){8(2a==2)2S=1;1Z(9);o(\'3Z("\'+4i.g+\'")\',50)}}}b 76(9){7=e(9);e(9+\'1u\').2o=\'\';1a(7);2A()}b 7c(k){7=e(k.53);m=e(7.U);9=7.g;3H(7);1i=k.55.1T(5);8(m.V(\'K\'))1i+=m.V(\'K\');s.8d=1i.4Y(/5c=/,\'7a=-\')}b 79(k){k.d.3T=\'34(\'+13+7r+\')\'}b 7q(k){k.d.3T=\'34(\'+13+5p+\')\'}b 2M(9){1q=e(9+\'3a\');7=e(9);1K=19(7.d.F)+7.I-7.7l+5;R=(M&&n<Q+4)?19(7.d.N)-(Q+4):19(7.d.N)-n;z(1q,1K,R);1q.d.1D=1f+1;1a(1q)}b 6E(9){1q=e(9+\'3a\');1d(1q);z(1q,-1Y,0)}b 6P(k){7=e(k.53);m=e(7.U);9=7.g;1i=k.55;8(m.V(\'K\'))1i+=m.V(\'K\');1i+=(1i.3v("?")<0)?"?7="+9:"&7="+9;2B(7,1i)}b 2B(7,5j){1n=e(7.g+\'1u\');1n.2o=\'\';3H(1n);1d(7);i 5i=t.L(6W*t.8c());i 6y=(5j.3v("?")<0)?"?6C="+5i:"&6C="+5i;1i+=(1i.3v("?")<0)?"?7="+9:"&7="+9;1o{1H.5k(\'6t\',5j+6y,P);1H.8b=b(){8(1H.8s==4){2A();5R=1H.8t;7s=7.E-2;7v=7.I-2;i 5M=(7p)?7p:\'#8L\';3M=\'<2m d="w:\'+7v+\'D;B:\'+7s+\'D;3k:8K;3s-5f:#8J;3s-w:7h;3s-d:7f;8H-5f:\'+5M+\';2c-F:\'+n+\'D;2c-2d:\'+n+\'D;2c-2f:\'+n+\'D;2c-N:\';3M+=(n<Q+4)?2g(Q+4):n;3M+=\'D;">\'+5R+\'</2m>\';e(9+\'1u\').2o=3M}};1H.6r(1y)}1k(1s){2A();e(9+\'1u\').2o="<5X><5V/><5V/><p d=\'8N-8R:8Q;\'>8P 8O 8G 8F"}}b 8y(k){5e=k.K;9=5e.l("7=")[1];8(9.3v("&"))9=9.l("&")[0];7=e(9);2B(7,5e)}b 5y(){1H=u;8(s.5d){1H=1z 5d();8(38)2C=1z 5d()}f 8(1h){1o{1H=1z 2z("5F.4b");8(38)2C=1z 2z("5F.4b")}1k(1s){1o{1H=1z 2z("5E.4b");8(38)2C=1z 2z("5E.4b")}1k(1s){}}}}b 5D(9){7=e(9);1i=8z;8(7.V(\'K\'))1i+=7.V(\'K\');1o{2C.5k(\'6t\',1i,P);2C.6r(1y)}1k(1s){}}b 2P(1e){J=e(\'J\');8(2R==0){1r(J,0);2R=1;1a(J);5m();8(1e)46(5b-1);f 46(0)}}b 46(2X){8(1t==\'\')3S;f{J=e(\'J\');2X++;1r(J,8D/5b*2X);8(2X<5b)o(\'46(\'+2X+\')\',4)}}b 3S(){8(!2S){J=e(\'J\');1d(J);z(J,-1Y,0,0,0);2R=0}}b 6p(5a){i 5s=s.3Y;8(q s.3Y!=\'b\')s.3Y=5a;f{s.3Y=b(){5a();8(5s){o(\'"+5s+"\',25)}}}}b 5m(){8(2R){J=e(\'J\');z(J,0,0,0,0);5q();8(s.3L&&s.5t)2y=(s.3L+s.5t>18)?s.3L+s.5t:18;f 2y=(j.H.6c>j.H.58)?j.H.6c:j.H.58;2y=(18>2y)?18:2y;z(J,0,0,j.H.8B,2y)}}b 6a(){J=1R(\'J\');J.d.57=\'54\';J.d.1D=8E;6p(5m);8(48)4c(J)}b 2t(){i 2t,3B=0;1o{2t=1z 2z("6u.6u.6");3B=1}1k(1s){}1o{2t=8v.8u["8w 8x"];8(2t)3B=1}1k(1s){}r 3B}b 5W(7,h){v=1R(7.g+\'3u\');v.d.3k=\'2I\';8(h.1T(0,5)==\'1w::\'){i 1v=(1h)?\' g="\'+7.g+\'3l" 3y="3x:52-56-59-5l-5n" 5u="\'+h.l(\'::\')[1]+\'"\':\'\';1v+=\' w="\'+h.l(\'::\')[2]+\'" B="\'+h.l(\'::\')[3]+\'"><O K="2N" 1F="\'+h.l(\'::\')[1]+\'"><O K="45" 1F="P"></O><O K="5L" 1F="5J"></O>\';1v+=\'<22 g="\'+7.g+\'5r\'+\'" 1g="\'+h.l(\'::\')[1]+\'" 3U="4Z/x-4R-4P" w="\'+h.l(\'::\')[2]+\'" 45="P" 5L="5J" B="\'+h.l(\'::\')[3]+\'"></22></29>\'}f 8(h.1T(0,5)==\'3O::\'){i 1v=(1h)?\' g="\'+7.g+\'3l" 3y="3x:52-56-59-5l-5n" 5u="\'+13+\'5h.1w"\':\'\';1v+=\' w="\'+h.l(\'::\')[2]+\'" B="\'+h.l(\'::\')[3]+\'"><O K="2N" 1F="\'+13+\'5h.1w"></O><O K="45" 1F="P"></O><O K="6L" 1F="6Y=\'+h.l(\'::\')[1]+\'&71=6N 6Q"></O>\';1v+=\'<22 g="\'+7.g+\'5r\'+\'" 1g="\'+13+\'5h.1w" 3U="4Z/x-4R-4P" w="\'+h.l(\'::\')[2]+\'" 7b="P" 6L="6Y=\'+h.l(\'::\')[1]+\'&71=6N 6Q" B="\'+h.l(\'::\')[3]+\'"></22></29>\'}f{i 1v=(1h)?\' g="\'+7.g+\'3l" 3y="3x:52-56-59-5l-5n" 5u="\'+13+\'5o.1w?2N=\'+h.l(\'::\')[1]+\'&4f=4n&4o=4k&4u=4q&4r=70&4l=0"\':\'\';1v+=\' w="\'+h.l(\'::\')[2]+\'" B="\'+h.l(\'::\')[3]+\'"><O K="2N" 1F="\'+13+\'5o.1w?2N=\'+h.l(\'::\')[1]+\'&4f=4n&4o=4k&4u=4q&4r=70&4l=0"></O><O K="45" 1F="P"></O>\';1v+=\'<22 g="\'+7.g+\'5r\'+\'" 1g="\'+13+\'5o.1w?2N=\'+h.l(\'::\')[1]+\'&4f=4n&4o=4k&4u=4q&4r=70&4l=0" 3U="4Z/x-4R-4P" w="\'+h.l(\'::\')[2]+\'" 7b="P" B="\'+h.l(\'::\')[3]+\'"></22></29>\'}8(1h){3D=j.3i("2m");3D.g=7.g+\'3l\';v.1N(3D);3D.9k=\'<29 d="2c:1Q;" \'+1v}f{v.2o=\'<2m d="2c:1Q;3k:2I;"><29 \'+1v+\'</2m>\'}r v}b 5K(7,h){v=1R(7.g+\'3u\');v.d.3k=\'2I\';23=j.3i(\'91\');23.1g=h.l(\'::\')[1];23.d.2c=\'1Q\';23.d.w=h.l(\'::\')[2]+\'D\';23.d.B=h.l(\'::\')[3]+\'D\';23.d.3s=\'92\';23.d.93=\'0\';v.1N(23);r v}b 5I(7,h){v=1R(7.g+\'3u\');v.d.3k=\'2I\';4G=\'<29 3y="3x:90-8Z-8V-96-9g" g="\'+7.g+\'9h" w="\'+h.l(\'::\')[2]+\'" B="\'+h.l(\'::\')[3]+\'" 9j="60://62.4I.6o/6h/9f.9e">\';4G+=\'<O K="1g" 1F="\'+h.l(\'::\')[1]+\'"/><O K="66" 1F="P"/><O K="64" 1F="u"/><22 3U="9a/4I" 1g="\'+h.l(\'::\')[1]+\'" w="\'+h.l(\'::\')[2]+\'" 66="P" 64="u" B="\'+h.l(\'::\')[3]+\'" 9b="60://62.4I.6o/6h/9J/"></22></29>\';v.2o=4G;r v}b 3N(1J){i 3h=0;8(!1J)1J=s.2w;8(1J.5H)3h=1J.5H;f 8(1J.5v)3h=-1J.5v;8(1t!=\'\'){8(3h>0)2e(1t,0);8(3h<0)2e(1t,1)}8(1J.63)1J.63();1J.7S=u;r u}b 4c(k){8(s.6n)k.6n(\'7W\',3N,u);f k.7X=3N}b 4X(3t){8(1t!=\'\'){3t=3t||s.2w;7u=3t.7M;7k(7u){1V 39:2e(1t,0);1I;1V 37:2e(1t,1);1I;1V 27:1Z(1t);1I}}}b 2j(k,1e){8(3j){8(!1e){14=2J(k);14.2d=14.N+14.B;14.2f=14.F+14.w}3m=j.3n(\'7J\');2F(i c=0;c<3m.24;c++){8(!1e){Z=2J(3m[c]);Z.2d=Z.N+Z.B;Z.2f=Z.F+Z.w;8((Z.N>=14.N&&Z.N<=14.2d&&Z.F>=14.F&&Z.F<=14.2f)||(Z.2d>=14.N&&Z.2d<=14.2d&&Z.2f>=14.F&&Z.2f<=14.2f)){1d(3m[c])}}f{1a(3m[c])}}}}',62,604,'|||||||enl_img|if|enl_imgid||function|enl_i|style|enl_geto|else|id|enl_getlongdesc|var|document|enl_obj|split|enl_orig|enl_brdsize|setTimeout||typeof|return|window|Math|false|enl_clone|width||undefined|enl_setpos|enl_el|height|enl_drgelem|px|newh|left|steps|body|neww|enl_drk|name|round|enl_titlebar|top|param|true|enl_btnheight|enl_tmpt|enl_button|enl_factor|orig|getAttribute|newt|newl|100|enl_selectpos||enl_tmph|enl_ldr|enl_gifpath|enl_objpos|onclick|enl_brwsx||enl_brwsy|parseInt|enl_visible|enl_r|enl_divtype|enl_hide|enl_flag|enl_zcnt|src|enl_isie|enl_geturl|enl_maxstep|catch|enl_buttonurl|enl_ldrgif|enl_brdm|try|enl_prldcnt|enl_btns|enl_setopa|enl_err|enl_infront|brd|enl_swfsrc|swf|oldl|null|new|enl_prldimg|enl_allElm|enl_ani|zIndex|enl_tmpw|value|enl_drgid|enl_request|break|enl_wheelevent|enl_tmpl|oldw|enl_brdclone|appendChild|longdesc|enl_inprogress|0px|enl_mkdiv|enl_values|slice|enl_imglist|case|className|enl_oripic|5000|enl_shrink||enl_setcur|embed|enl_ifr|length||enl_shadow||enl_nn6|object|enl_dark|enl_speed|margin|bottom|enl_next|right|eval|documentElement|enl_fullimg|enl_hideselect|enl_div|enl_gettitle|div|enl_brdbck|innerHTML|enl_ctlslid|oldh|enl_shdclone2|enl_scrolly|enl_checkflash|oldt|ispic|event|enl_scrollx|enl_darkh|ActiveXObject|enl_ajaxldrhide|enl_ajax|enl_request2|enl_mvcnt|position|for|enl_preloadit|isenlarged|hidden|enl_coord|enl_firstcall|this|enl_showbtn|movie|enlarge|enl_darken|removeChild|enl_darkened|enl_keepblack|enl_shdm|enl_facthelp|enl_ispreload|enl_butact|enl_darkenstep|enl_noevents|enl_tempbtn||hand|enl_maxwidth|enl_title|url|enl_inmax|pointer||enl_usecounter||btns|absolute|enl_mkborder|enl_hasmvd|enl_makedraggable|enl_opaglide|enl_getnext|enl_wheeldelta|createElement|enl_ie6|overflow|swfinner|enl_selectlist|getElementsByTagName|enl_dropshadow|enl_picpath|enl_drgmode|enl_stopload|border|enl_keyevent|clone|indexOf|title|clsid|classid|continue|enl_opval|enl_flashthere|blur|enl_swfinnerdiv|visibility|enl_nextObj|onload|enl_ajaxload|with|no|clientWidth|innerHeight|enl_tmphtml|enl_wheel|flv|cloneNode|complete|clientY|enl_nodark|backgroundImage|type|enl_doglidein|enl_enable|shd2|onresize|enl_openthepic||enl_makenull|enl_shdclone1|enl_prvnxt|shd1|allowFullScreen|enl_fadedark|enl_drgdrop|enl_wheelnav|clientX|enl_dofadein|XMLHTTP|enl_wheelenable|enl_oldonload|enl_curstr1|autoload|enl_curstr2|enl_func|enl_nextPic|enl_ui|0xFF0000|autorewind|cursor|on|fgcolor|normal_|0x000000|volume|enl_maxmeurl|default|bgcolor|php|enl_shdclone|enl_dofadeout|enl_calcfact|enl_brddiv|filter|enl_delshadow|enl_buttonpress|enl_doglideout|enl_shd2|enl_init|enl_dvxhtml|enl_shadowsize|divx|enl_shd1|enl_tx|enl_ty|enl_butinact|fl2|enl_brdbckpic|flash|while|shockwave|enl_mktitlebar|enl_shddiv|enl_y|enl_x|enl_chckready|enl_keynavi|replace|application||enl_nextpic|D27CDB6E|whichpic|black|ajaxurl|AE6D|backgroundColor|offsetHeight|11cf|enl_resfunc|enl_darksteps|pid|XMLHttpRequest|enl_link|color|enl_w|flvPlayer|enl_randomizenumber|enl_url|open|96B8|enl_resize|444553540000|player|enl_btninact|enl_getbrwsxy|swfinneremb|enl_oldonresize|scrollMaxY|data|detail|enl_enddrag|opacity|enl_ajaxprepare|enl_mousemv|enl_h|enl_posy|enl_doenlarge|enl_count|Microsoft|Msxml2|getElementById|wheelDelta|enl_dvxdiv|opaque|enl_ifrdiv|wmode|enl_myajaxcol|enl_shd|enl_brd|enl_pluscur|enl_id|enl_answer|topenl_el|enl_divname|innerWidth|br|enl_swfdiv|center|Image|enl_toopen|http|pow|go|preventDefault|bannerEnabled|enl_shadowcolor|loop|MozBorderRadius|PI|Array|enl_darkenprepare|enl_brdround|scrollHeight|enl_addLoad|enl_donoani|enl_noaniremove|enl_openpic|plugin|cpgif_conf_reflection_p|enl_delborder|imgflowimg|BODY|enl_posx|addEventListener|com|enl_addResize|enl_timetowait|send|khtmlBorderRadius|GET|ShockwaveFlash|tagName|enl_offset|next|enl_randomizeit|enl_makebtn|img|realcopyspeed|enl_rndit|search|enl_hidebtn|08|enl_max|offsetWidth|scrollLeft|enl_curstr3|enl_brdcolor|FlashVars|prev|FLV|enl_pictoget|enl_btnajax|Video|move|yes|onmousedown|fullsize|max|9999|maxpop|flvPath|onmouseup||flvTitle|enl_minuscur|alt|cssFloat|styleFloat|enl_btnpicture|dvx|offsetTop|enl_btnmover|pos|allowfullscreen|enl_gotosite|clientHeight|borderWidth|solid|padding|1px|ifr|scrollTop|switch|btnw|setAttribute|enl_titletxtcol|enl_keynav|enl_ajaxcolor|enl_btnmout|enl_btnact|enl_divh|visible|enl_key|enl_divw|string|offsetParent|galleryimg|in|offsetLeft|opera|toString|MozOpacity|alpha|enl_canceltext|pageXOffset|onkeyup|alert|select|clonebrd|pageYOffset|keyCode|enl_noflash|onkeydown|sliderimg|enl_center|outlineWidth|returnValue|enl_preload|thumbpic|maxHeight|DOMMouseScroll|onmousewheel|copyspeed|onselectstart||number|750|block|onmouseover|onmouseout|ajax|pic|amp|longDesc|borderColor|onreadystatechange|random|location|borderStyle|href|650|close|displayimage|site|enl_buttontxt|enl_buttonoff|Max|scrollbars|900|resizable|status|toolbar|readyState|responseText|plugins|navigator|Shockwave|Flash|enl_ajaxfollow|enl_counterurl|9700|scrollWidth|all|enl_darkprct|9670|work|not|background|gif|666677|auto|d0d0d0|loader|font|did|AJAX|12px|size|enl_hist|enl_bbcode|parentElement|41fa|parentNode|HTML|srcElement|D0AB|67DABFBF|iframe|none|frameborder|onmousemove|target|9C46|enl_shadowintens|||video|pluginspage|sin|cos|cab|DivXBrowserPlugin|CC0F21721616|divxinner|ffffff|codebase|outerHTML|marginRight|fontSize|10pt|serif|sans|Helvetica|444444|whiteSpace|substring|bold|fontWeight|nowrap|Arial|fontFamily|backgroundPosition|repeat|backgroundRepeat|3px|display|enl_autoid|paddingTop|textAlign|relative|2px|download'.split('|'),0,{}))

/**************************ENLARGEIT end ***************************************************/


function zoom_out() {
      document.all.bild_klein.style.display = "none";  
      document.all.bild_gross.style.display = "block";          
}

function zoom_in() {
      document.all.bild_klein.style.display = "inline";  
      document.all.bild_gross.style.display = "none";          
}


function changeFlipList(id) {
   var aktion = "nicht einklappen";
   var allTagsLI = document.getElementsByTagName("li");
   
   if (document.getElementById(id).style.display != "none") aktion="einklappen";

   
   for (i=0; i < allTagsLI.length; i++) {
      if (document.getElementsByTagName("li")[i].parentNode.className == "serviceKategorie") {  
         document.getElementsByTagName("li")[i].parentNode.style.display="none";
         document.getElementsByTagName("li")[i].parentNode.parentNode.className="ausklappen";	
      }
   }
   
   if (aktion=="einklappen")
   {
      document.getElementById(id).style.display="none";	
      document.getElementById(id).parentNode.className="ausklappen";
   } else {
      document.getElementById(id).style.display="block";	
      document.getElementById(id).parentNode.className="ausgeklappt";
   }
}


function printFooter()  {
      var heute = new Date();
      var jahr = heute.getYear();
      var monat = heute.getMonth()+1;
      var tag = heute.getDate();
      document.all["print_data"].innerHTML = window.document.URL+"<br>ausgedruckt am "+tag+"."+monat+"."+jahr;
}

function go(x)  {
      window.location.href=x;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}


startList = function() {
   var allTagsLI = document.getElementsByTagName("li");
   
   for (i=0; i < allTagsLI.length; i++) {
      if (document.getElementsByTagName("li")[i].parentNode.className == "serviceKategorie") {  
         document.getElementsByTagName("li")[i].parentNode.style.display="none";
         document.getElementsByTagName("li")[i].parentNode.parentNode.className="ausklappen";	
      }
   }
   
   // noetig fuer enlargeit
   enl_init();
}



/**
 * Kalender
 */

function newDate(s) {
	var t = s.split('.');
	if ( t.length == 3 )
		return new Date( t[2], t[1]-1, t[0] );
	else
		return null;
}

Date.prototype.equals = function( otherDate ) {
	return ( this.getDate() == otherDate.getDate() && this.getMonth() == otherDate.getMonth() && this.getFullYear() == otherDate.getFullYear() );
}

Date.prototype.nextDate = function() {
	var day = this.getDate();
	var month = this.getMonth();
	var year = this.getFullYear();
	
	var months_total_days = new Array( 31, 28, 31, 30, 31, 30, 30, 31, 30, 31, 30, 31 );
	
	if ( day >= months_total_days[month] && !( day == 28 && month == 1 && year % 4 == 0 ) ) { // valid until 2099
		day = 1;
		month++;
		if ( month > 11 ) {
			month = 0;
			year++;
		} 
	} else {
		day++;
	}
	
	return new Date( year, month, day);
}

Date.prototype.toGermanString = function() {
	var day = this.getDate();
	var month = this.getMonth() + 1;
	var year = this.getFullYear();
	
	if ( day < 10 ) day = "0" + String(day);
	if ( month < 10 ) month = "0" + String(month);
	
	return day + '.' + month + '.' + year;
}


/**
 * http://javascript.about.com/library/blweekyear.htm
 */
Date.prototype.getWeek = function() {
	var onejan = new Date(this.getFullYear(),0,1);
	return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7);
}





/**
 * https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/indexOf
 */
if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

/**
 * http://stackoverflow.com/questions/5223/length-of-javascript-associative-array
 */
Object.size = function(obj) {
	var size = 0, key;
	for (key in obj)
		if (obj.hasOwnProperty(key)) 
			size++;
	return size;
};







function startCalendar() {
	if ( !window.json_events )
		return;

	//hashClock ist das globale Array was die Kalendardaten beinhaltet
	//
	// Die JSON Struktur ist wie folgt:
	// {'datumA':[{titelA1, urlA1,zeitA1},{titelA2, urlA2,zeitA2},..], 'datumB':[{titelB1, urlB1,zeitB1},{titelB2, urlB2,zeitB2},..],}
	// Die Daten sind nach Datum und Uhrzeit geordnet
	
	hashClock = [];
	
	var months_total_days = [ 31, 28, 31, 30, 31, 30, 30, 31, 30, 31, 30, 31 ];
	
	for ( var ii = 0; ii < window.json_events.length; ii++ ) {
		var event = window.json_events[ii];
		
		if ( 'start' in event && event.start.length > 0 )
			var startdate = newDate(event.start);
		else
			continue;
		if ( 'end' in event && event.end.length > 0 )
			var enddate = newDate(event.end);
		else
			enddate = startdate;
		
		var d = startdate;
		var filter = parse_terminserie(event.terminserie);
		while ( true ) {
			if ( filter.check(d) ) {
				var currDate = d.toGermanString();
				if ( hashClock[currDate] == undefined )
					hashClock[currDate] = [];
				hashClock[currDate].push(event);
			}
			
			if ( d.equals(enddate) )
				break;
			else
				d = d.nextDate();
		}
	}
	

	document.getElementById('calendarBox').style.display = 'block'; // anzeigen vom Kalendar, da bei Default versteckt
	
	// Die hashClock Struktur sieht nach dem eval folgendermassen aus:
	// hashClock[...]
	// 	01.01.2009[..]
	//	02.01.2009[..]
	//	...
	//	01.10.2010[...]
	//		0
	//		1
	//		...
	// letzeres Beinhaltet zB die Einträge .title, .link
	// d.h. ein Beispielobjekt wäre: hashClock[01.01.2010][0]
	// Dessen Titel wäre: hashClock[01.01.2010][0].title
	
	//Sollte Javascript auf dem Benutzersystem nicht funktionieren, wäre es schön, wenn die Kalendarsuche nicht erscheint,
	// deswegen wäre es von Interesse das gesammte Div hier zeichnen zu lassen, statt im Template.
	// Der Nachteil ist jedoch, dass wir einen absoluten Pfad zum Go-Button brauchen.
	
	
	//Erstellen der Divs für den Kalendar und deren Suche
		//var d = document.getElementById('calendarBox');
		//d.innerHTML = ""
	
	//Der Kalendar wir dargestellt
	writeCal();
	
	/**
	 * Zeige Termine für heute an
	 */
	loadData('heute');
}


function parse_terminserie( terminserie ) {
	var rDailyWorkingDays = /täglich werktags/;
	var rDaily = /täglich/;
	var rWeekly = /jeden (montag|dienstag|mittwoch|donnerstag|freitag|samstag|sonntag)/;
	var rMonthly = /jeden (ersten|zweiten|dritten|vierten|letzten) (montag|dienstag|mittwoch|donnerstag|freitag|samstag|sonntag) im monat/;
	var rSomeWeekly = /jeden (zweiten|dritten|vierten) (montag|dienstag|mittwoch|donnerstag|freitag|samstag|sonntag)/;
	var rExcludeDays = /au(?:ss|ß)er (\d{1,2}.\d{1,2}(?:.\d{2.4})?)(?:\s*,\s*(\d{1,2}.\d{1,2}(?:.\d{2.4})?))*/;
	
	terminserie = terminserie.toLowerCase(); /** case insensitive */
	terminserie = terminserie.replace( /\s+/, ' ' ); /** ignore multiple spaces */
	var filter;
	if ( terminserie.length == 0 ) {
		/**
		 * Keine Terminserie: Gebe true zurück
		 */
		filter = {
			check : function( myDate ) {
				return true;
			}
		}
	} else if ( match = rDailyWorkingDays.exec(terminserie) ) {
		filter = {
			check : function( myDate ) {
				return ( myDate.getDay() > 0 && myDate.getDay() < 6 );
			}
		}
	} else if ( match = rDaily.exec(terminserie) ) {
		filter = {
			check : function( myDate ) {
				return true;
			}
		}
	} else if ( match = rWeekly.exec(terminserie) ) {
		filter = {
			dow : ['sonntag','montag','dienstag','mittwoch','donnerstag','freitag','samstag'].indexOf(match[1]),
			check : function( myDate ) {
				return ( myDate.getDay() === this.dow );
			}
		}
	} else if ( match = rMonthly.exec(terminserie) ) {
		filter = {
			index : ['letzten','ersten','zweiten','dritten','vierten'].indexOf(match[1]),
			dow : ['sonntag','montag','dienstag','mittwoch','donnerstag','freitag','samstag'].indexOf(match[2]),
			check : function( myDate ) {
				var total_days_for_month = [ 31, 28, 31, 30, 31, 30, 30, 31, 30, 31, 30, 31 ][myDate.getMonth()];
				return ( myDate.getDay() === this.dow && ( Math.ceil(day/7) === this.index || ( this.index === 0 && total_days_for_month - myDate.getDate() < 8 ) ) );
			}
		}
	} else if ( match = rSomeWeekly.exec(terminserie) ) {
		filter = {
			index : ['placeholder0','placeholder1','zweiten','dritten','vierten'].indexOf(match[1]),
			dow : ['sonntag','montag','dienstag','mittwoch','donnerstag','freitag','samstag'].indexOf(match[2]),
			woy : null,
			check : function( myDate ) {
				var total_days_for_month = [ 31, 28, 31, 30, 31, 30, 30, 31, 30, 31, 30, 31 ][myDate.getMonth()];
				if ( myDate.getDay() === this.dow ) {
					if ( this.woy == null )
						this.woy = myDate.getWeek();
					return ( myDate.getWeek() - this.woy % this.index === 0 );					
				}
			}
		}
	} else {
		/** 
		 * Wenn das Feld 'terminserie' nicht geparst werden kann, wird der
		 * Termin im Zweifel täglich angezeigt. Gebe immer true zurück
		 */
		filter = {
			check : function( myDate ) {
				return true;
			}
		}
	}
	
	/**
	 * Falls bestimmte Termine einer Terminserie ausfallen, werden diese
	 * hier behandelt. Dem Filter wird ein zweiter Filter vorgeschaltet.
	 */
	if ( match = rExcludeDays.exec(terminserie) ) {
		var excluded_days = [];
		for ( var ii in match ) {
			var day, month, year;
			if ( m = /^(\d{1,2}).(\d{1,2}).(\d{4})$/.exec(match[ii]) ) {
				day = m[1];
				month = m[2] - 1;
				year = m[3];
			} else if ( m = /^(\d{1,2}).(\d{1,2}).(\d{2})$/.exec(match[ii]) ) {
				day = m[1];
				month = m[2] - 1;
				year = 2000 + m[3];
			} else if ( m = /^(\d{1,2}).(\d{1,2})$/.exec(match[ii]) ) {
				day = m[1];
				month = m[2] - 1;
				year = 0;
			}
			excluded_days.push( [year, month, day] );
		}
			
		return {
			filter : filter,
			implicit_year : null,
			check : function( year, month, day ) {
				for ( ii in excluded_days ) {
					var ed = excluded_days[ii];
					if ( ed[0] == year && ed[1] == month && ed[2] == day ) {
						return false;
					} else if ( ed[0] == 0 && ed[1] == month && ed[2] == day ) {
						if ( this.implicit_year == null ) {
							this.implicit_year = year;
							return false;
						} else if ( this.implicit_year == year ) {
							return false;
						}
					}
				}
				/**
				 * Falls der Termin nicht ausfallt, gebe das Ergebnis des 
				 * eigentlichen Filters zurück
				 */
				return this.filter.check( year, month, day );
			}
		}
	} else {
		return filter;
	}
}

function printEvent( event ) {
	var outputHTML = "";
	
	outputHTML += "<div style=\"margin-top: 20px;\">";
	if ( event.bild ) {
		outputHTML += "<div class=\"pic\">";
		outputHTML += "<a href=\"" + event.link + "\"><img src=\"" + event.bild + "\"></a>";
		outputHTML += "</div>";
	}
	outputHTML += "<h2><a href=\"" + event.link + "\">" + event.title + "</a></h2>";
	if ( event.untertitel )
		outputHTML += "<h3>" + event.untertitel + "</h3>";
	outputHTML += "<div class=\"text\"><p>" + event.dauer;
	if ( event.terminserie )
		outputHTML += "<br/>" + event.terminserie;
	if ( event.ort )
		outputHTML += "<br/>" + event.ort;
	outputHTML += "</p>";
	outputHTML += "<p>" + event.teasertext + " <a href=\"" + event.link + "\">[mehr...]</a></p>";
	outputHTML += "</div><div style=\"clear: both;\">&nbsp;</div></div>";
	
	return outputHTML;
}


function loadData(myData) {
	var d = document.getElementById('calendarInhalt'); //Output
	var outputHTML = "<div class=\"calendarInhalt\">";
	
	// Wir holen aus unserem Array alle Einträge die dem ausgewähltem Datum entsprechen
	if ( myData == 'heute' ) {
		var today = new Date();
		var todayString = today.toGermanString();
		var hCtoday = [];
		if ( todayString in hashClock )
			hCtoday = hashClock[todayString];

		var nextDate = today.nextDate();
		var hCnext = {};
		var cntDays = 0;
		while ( true ) {
			var nextDateString = nextDate.toGermanString();
			if ( nextDateString in hashClock && hashClock[nextDateString].length > 0 )
				hCnext[nextDateString] = hashClock[nextDateString];
			if ( Object.size(hCnext) >= 5 )				
				break;
			if ( cntDays == 28 )
				break;
			nextDate = nextDate.nextDate();
			cntDays++;
		}
	} else {
		var hCtoday = [];
		var hCnext = {};
		if ( myData in hashClock )
			hCnext[myData] = hashClock[myData];
		else
			hCnext[myData] = [];
	}
	
	if ( myData == 'heute' ) {
		outputHTML += "<div class=\"container_element\">";
		outputHTML += "<h1>Veranstaltungen heute</h1>";
		for ( var ii = 0; ii < hCtoday.length; ii++ )
			outputHTML += printEvent(hCtoday[ii]);
		if ( hCtoday.length == 0 )
			outputHTML += "<div class=\"titelleiste\">Heute finden keine Veranstaltungen statt.</div>";
		outputHTML += "</div>";
	}
	
	if ( myData != 'heute' || Object.size(hCnext) > 0 ) {
		for ( var nextDateString in hCnext ) {
			if ( typeof nextDateString == 'function' )
				continue;
			outputHTML += "<div class=\"container_element\">";
			outputHTML += "<h1>Veranstaltungen am " + nextDateString + "</h1>";
			for ( var ii = 0; ii < hCnext[nextDateString].length; ii++ )
				outputHTML += printEvent(hCnext[nextDateString][ii]);
			outputHTML += "</div>";
		}
		if ( Object.size(hCnext) == 0 )
			outputHTML += "<div class=\"titelleiste\">Am " + myData + " finden keine Veranstaltungen statt.</div>";
	}

	outputHTML += "</div>";
	d.innerHTML = outputHTML;
}

function writeCal(){

    monatsNamen = new Array ("Jan", "Feb", "M&auml;rz", "April", "Mai", "Juni", "Juli", "Aug", "Sept", "Okt", "Nov", "Dez");
    
    var date = new Date();
	if (arguments.length == 2) { //Monat vor bzw zurück
        var mm = arguments[0];
        var yy = arguments[1];
        if (mm == date.getMonth() + 1) {
            var dd = date.getDate();
        } else {
            var dd = 0;
        }
    }
    else { // Laden des Kalendars - Heute
        var dd = date.getDate();
        var mm = (date.getMonth()+1);
        var yy = date.getYear();
    }
    
    var thisYear = date.getYear();
    if (thisYear < 999 ) {
        thisYear += 1900;
    }
    if (yy < 999 ) {
        yy += 1900;
    }
   
    if (mm == 12) {
        var nextMonth = 1;
        var nextYear = yy + 1;
    } else {
        var nextMonth = ( mm + 1);
        var nextYear = yy;
    }
    
    if (mm == 1) {
        var prevMonth = 12;
        var prevYear = yy - 1;
    } else {
        var prevMonth = (mm - 1);
        var prevYear = yy;
    }
    

    var htmlOutput="";
    htmlOutput += "<div id=\"calendarBox_top\">"
    +"<div style=\"float:left;\">"
    +"<a href=\"javascript:writeCal();loadData('heute')\">Heute</a>"
    +"</div>"
    +"<div style=\"float: right;\">"
    +"<a href=\"javascript:writeCal("+prevMonth+","+prevYear+");\">&laquo;</a>&nbsp;"
    +"<b>"+monatsNamen[mm-1]+" "+yy+"</b>"
    +"&nbsp;<a href=\"javascript:writeCal("+nextMonth+","+nextYear+");\">&raquo;</a>"
    +"</div>"
    +"</div>"
    +"<div style=\"clear: both;\"></div>"
    +"<table id=\"calendarBox_table\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">"
    +"<tr><th>Mo</th><th>Di</th><th>Mi</th><th>Do</th><th>Fr</th><th>Sa</th><th>So</th></tr>"
    +"<tr>"
    
    //Wochentag des 1. des Monats ermitteln
    date.setDate(1);
    date.setMonth(mm-1);
    date.setYear(yy);
    var kk=date.getDay();
    if (kk == 0) {
        kk=7;
    }
    
    //erste Zeile auffuellen
    for (var ii=1; ii<kk; ii++) {
        htmlOutput += "<td></td>";
    }

	var myMonth;
    var myDay;
	
	if (mm < 10) {
		myMonth = "0" + String(mm);
	} else {
		myMonth = String(mm);
	}
	
    for(ii=1; ii<32; ii++) {

        if (ii < 10) {
            myDay = "0" + String(ii);
        } else {
            myDay = String(ii);
        }

        if ((ii == dd) && (thisYear == yy)) {
            // Den aktuellen Tag fett <-- Nur für das aktuelle Jahr!
            htmlOutput += "<td class=\"today\">";
        } else {
            htmlOutput += "<td>";
        }
		
        if (hashClock[myDay+"."+myMonth+"."+yy] != undefined){
			// Wir überprüfen ob wir im Array einen Eintrag mit dem Datum haben, falls das Array exisitert haben wir mindestens einen.
			// In diesem Fall erstellen wir einen Link mit dem wir die Wiedergabe der Einträge realisieren können.
			
			htmlOutput += "<a href=\"javascript:loadData('"+myDay+"."+myMonth+"."+yy+"')\">"+ii+ "</a></td>";
		} else {
			htmlOutput += ii+"</td>";
		}
        kk++;
        if (kk > 7) {
            htmlOutput += "</tr><tr>";
            kk = 1;
        }
    }
    htmlOutput += "</tr></table>";
    var d = document.getElementById('calendarBox_sheet');
	d.innerHTML = htmlOutput;
}



function unescape_html(str) {
	return str.replace( /&lt;/g, "<").replace( /&gt;/g, ">").replace( /&amp;/g, "&");
}

function kum_onload() {
	/**
	 * Aufklappbare Sericekategorien starten
	 */
	startList();
	
	/**
	 * Kalender starten
	 */
	if ( window.json_events && document.getElementById('calendarInhalt') != null && document.getElementById('calendarBox') != null ) {
			startCalendar();
	}
}

if ( typeof window.onload == 'function' ) {
	var other = window.onload;
	window.onload = function() {
		other();
		kum_onload();
	};
} else {
	window.onload = kum_onload;
}
